uboot设置默认env
1. 背景¶
21x/22x从V11版本相关配置已默认切换到env双备份机制,在这个机制下还可以增加一种设置default env的方法再给ENV增加一份保护。
2. 设置方法¶
env分区在读写过程中,如果突然断电,有极小的概率会出现数据损坏,导致env丢失,一但数据丢失系统会启动失败,为保证系统的启动,当env分区数据CRC校验失败时,会自动从default值去启动,由于每个用户分区的设置可能不尽相同,只需要按照以下步骤,在相应地方配置好默认值即可。
以下log代表ENV CRC 校验失败:
以NAND flash为例(NOR flash请根据相关code查看)
需修改文件boot/include/configs/pioneer3.h
中对应的宏定义(文件有多个MTDPARTS_DEFAULT,要确保更改到对应位置):
-
CONFIG_BOOTARGS和uboot下bootargs后内容的保持一致
-
CONFIG_BOOTCOMMAND和uboot下bootcmd后内容的保持一致
-
MTDPARTS_DEFAULT和uboot下mtdparts后内容的保持一致
-
CONFIG_EXTRA_ENV_SETTINGS填写和uboot下需要的环境变量,请注意ernel_file_size和recovery_file_size的大小,如果是fastboot版本包括rootfs_file_size的大小,平时烧写数值都是文件大小,因为默认的没有办法判断文件大小,只能默认为分区大小了!
#define CONFIG_BOOTARGS "ubi.mtd=UBI,2048 root=/dev/mtdblock7 rootfstype=squashfs ro init=/linuxrc LX_MEM=0x3FE0000 mma_heap=mma_heap_name0,miu=0,sz=0x1E00000 cma=2M highres=off mmap_reserved=fb,miu=0,sz=0x300000,max_start_off=0x3300000,max_end_off=0x3600000 mtdparts=nand0:1664k@1280k(BOOT0),1664k(BOOT1),256k(ENV),256k(ENV1),128k(KEY_CUST),5m(KERNEL),5m(RECOVERY),6m(rootfs),640k(MISC),108800k(UBI)" #define CONFIG_BOOTCOMMAND \ "nand read.e 0x22000000 KERNEL ${kernel_file_size};" \ "dcache on ;" \ "bootlogo 0 0 0 0;" \ "bootm 0x22000000;" \ "nand read.e 0x22000000 RECOVERY ${recovery_file_size};" \ "dcache on ;" \ "bootm 0x22000000" \ "" #define MTDIDS_DEFAULT "nand0=nand0" /* "nor0=physmap-flash.0,nand0=nand" */ /* must be different from real partition to test NAND partition function */ #define MTDPARTS_DEFAULT "mtdparts=nand0:1664k@1280k(BOOT0),1664k(BOOT1),256k(ENV),256k(ENV1),128k(KEY_CUST),5m(KERNEL),5m(RECOVERY),6m(rootfs),640k(MISC),108800k(UBI)" #define CONFIG_EXTRA_ENV_SETTINGS \ "mtdids=" MTDIDS_DEFAULT "\0" \ "mtdparts=" MTDPARTS_DEFAULT "\0" \ "partition=nand0,0\0" \ "autoestart=0\0" \ "baudrate=115200\0" \ "bootdelay=0\0" \ "ethact=sstar_emac\0" \ "ethaddr=00:30:1b:ba:02:db\0" \ "kernel_file_size=0x500000\0" \ "mtddevname=BOOT0\0" \ "mtddevnum=0\0" \ "recovery_file_size=0x500000\0" \ "sstar_bbm=off\0" \ "stderr=serial\0" \ "stdin=serial\0" \ "stdout=serial\0" \ "usb_folder=images\0" \ ""
在boot/include/configs/pioneer3.h
设置了系统启动必须的default env之后,重编uboot并更新到板端,可以保证env数据丢失时,依旧可以正常启动到系统。