uboot: 制作环境变量的二进制文件
依赖项
uboot需要设置相关配置,比如存储的地址,大小,存储介质等等,一般是使用文件env.bin烧写到flash的某一段固定区域。
#define CONFIG_ENV_IS_IN_MMC #define CONFIG_SYS_MMC_ENV_DEV 0 #define CONFIG_ENV_OFFSET (0x2E0200) #define CONFIG_ENV_SIZE (0x4000) /* env size */
工具
mkenvimage
示例:mkenvimage -p 0x00 -s 0x4000 -o env.bin env.conf
-p,非有效数据区域,填充的值,可以根据实际需要来设置;
-s,整个镜像的大小,环境变量一般也不大,1k-16k我认为就够用了;
env.conf是输入的文件,env.bin是输出的文件;
注意env.conf格式,示例:
setargs=setenv bootargs console=ttyAMA0,115200n8 root=/dev/mmcblk${rootfsdev}p2 rootfstype=ext4 rootwait init=/sbin/init loglevel=7 printk.time=1 consoleblank=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 bootcmd=run setargs; run mmcboot bootdelay=1 bootdev=1 bootpart=1 dtb_addr=0x7A000000 dtb_name=s5p4418-nanopi2-rev01.dtb dtb_reserve=if test -n "$dtb_addr"; then fdt addr $dtb_addr; fi fdt_high=0xffffffff kernel=zImage load_dtb=fatload mmc ${bootdev}:${bootpart} ${dtb_addr} ${dtb_name}; run dtb_reserve load_kernel=fatload mmc ${bootdev}:${bootpart} ${loadaddr} ${kernel} loadaddr=0x71080000 mmcboot=run load_kernel; run load_dtb; bootz ${loadaddr} - ${dtb_addr} rootfsdev=0
最后
uboot启动后,会读取对应的地址的环境变量,先进性crc校验,如果成功,则认为数据有效,否则使用默认的环境变量。