Yocto构建中添加自定义U-Boot环境变量未生效问题排查
解决方法
你当前只在defconfig中定义了CONFIG_SWUPDATE_BOOTCMD和CONFIG_SWUPDATE_KERNEL,但U-Boot不会自动将这类编译配置转换成可被printenv识别的默认环境变量。必须将这些变量添加到U-Boot的默认环境变量列表中,具体操作如下:
定位并修改板级环境变量定义文件
对于imx6ull_14x14_evk板子,默认环境变量通常定义在include/configs/mx6ull_14x14_evk.h(板级头文件)中,通过CONFIG_EXTRA_ENV_SETTINGS宏来声明。需要在这个宏里追加新的环境变量,格式如下:
#define CONFIG_EXTRA_ENV_SETTINGS \ "script=boot.scr\0" \ "image=zImage\0" \ /* 保留原有所有环境变量定义 */ \ "swupdate_bootcmd=" CONFIG_SWUPDATE_BOOTCMD "\0" \ "swupdate_kernel=" CONFIG_SWUPDATE_KERNEL "\0"注意每个变量末尾必须用
\0分隔,这是U-Boot默认环境数组的格式要求。更新补丁文件
修改你的uboot.patch,在现有defconfig修改的基础上,添加对板级头文件的修改。示例补丁片段如下:--- a/include/configs/mx6ull_14x14_evk.h +++ b/include/configs/mx6ull_14x14_evk.h @@ -XXX,XX +XXX,XX @@ #define CONFIG_EXTRA_ENV_SETTINGS \ "script=boot.scr\0" \ "image=zImage\0" \ "console=ttymxc0\0" \ /* 其他原有变量 */ \ + "swupdate_bootcmd=" CONFIG_SWUPDATE_BOOTCMD "\0" \ + "swupdate_kernel=" CONFIG_SWUPDATE_KERNEL "\0"注意替换
XXX,XX为实际的行号,确保和你使用的U-Boot版本代码匹配。重新构建U-Boot
在Yocto环境中清理U-Boot的构建状态,然后重新编译:bitbake -c cleansstate u-boot-imx bitbake u-boot-imx验证结果
将新生成的U-Boot镜像烧录到设备,启动后执行printenv命令,就能看到swupdate_bootcmd和swupdate_kernel这两个变量了。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

