U-Boot 环境由格式为<env_var>=<string value><null>
(并以 CRC32 字开头)的字符串组成。因此,环境变量的字符串在使用CONFIG_EXTRA_ENV_SETTINGS
在代码中预定义它们时必须符合该模板。
这也意味着您不能在环境中安装原始命令,例如.
"setenv ncip 192.168.100.98 \0"
U-Boot 文档对此主题很清楚。
注意警告的最后一句话。
- Default Environment:
CONFIG_EXTRA_ENV_SETTINGS
Define this to contain any number of null terminated
strings (variable = value pairs) that will be part of
the default environment compiled into the boot image.
For example, place something like this in your
board's config file:
#define CONFIG_EXTRA_ENV_SETTINGS \
"myvar1=value1\0" \
"myvar2=value2\0"
Warning: This method is based on knowledge about the
internal format how the environment is stored by the
U-Boot code. This is NOT an official, exported
interface! Although it is unlikely that this format
will change soon, there is no guarantee either.
You better know what you are doing here.
我确实尝试过“ncip=192.168.100.98”...
这看起来几乎是正确的,但需要明确的空终止符。
有趣的是,我能够设置“ethaddr”、“swugip”和除“ncip”之外的其他变量。
...
后来我尝试设置一些名为 dummy_var_1、dummy_var_2、dummy_var_3 的虚拟变量。即使他们没有得到设置。
您只提供了对实际结果的模糊总结。
您是否检查了任何.o目标文件以检查存储了哪些文本字符串?
您是否strings u-boot.bin | less
对 U-Boot 映像文件执行了检查以查看映像中嵌入的默认环境?
请注意,您可能会犯另一个错误。
CONFIG_EXTRA_ENV_SETTINGS中定义的环境变量将仅(最初)存在于U-Boot的默认环境中。
你对细节非常吝啬,忽略了你的设置。如果非易失性引导介质中存在现有且有效的存储环境,则需要执行特定过程来抑制现有 存储环境,以便恢复到具有“新”环境变量的默认环境。
在安装新/不同版本的u-boot.bin时未能禁用/删除现有存储环境将隐藏新/不同默认环境以及其中的所有新/不同变量。如果 U-Boot未发出类似于以下内容的消息:
Loading Environment from xxx... *** Warning - bad CRC, using default environment
那么您可以放心,您的新/不同环境变量不在当前运行时环境中。
IOW 您希望在(初始)启动时看到此警告消息。