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校验,如果成功,则认为数据有效,否则使用默认的环境变量。

 

posted @ 2024-04-30 19:56  goodboyyd  阅读(91)  评论(0编辑  收藏  举报