UBOOT中环境变量的类别

来源:互联网 发布:日本人的气质 知乎 编辑:程序博客网 时间:2024/05/24 00:10
调试UBOOT时,想增加一个环境变量ipaddr,这个环境变量是uboot中默认支持的一个环境变量,当增加一个内容如下
#define CONFIG_IPADDR “192.168.1.2”
"ipaddr=" CONFIG_IPADDR "\0" \
UBOOT启动后,解析环境变量时,提示如下错误信息
## Error: flags type check failure for "ipaddr" <= ""192.168.1.2"" (type: i)
himport_r: can't insert "ipaddr="192.168.1.2"" into hash table
分析uboot代码发现,uboot会对一些特殊的环境变量进行合法性校验。比如ipaddr,uboot认为这是一个网络地址的环境变量,会进按照网络地址进行合法性校验,而不是当成字符串校验。
#define NET_FLAGS \
"ipaddr:i," \
"gatewayip:i," \
"netmask:i," \
"serverip:i," \
"nvlan:i," \
"vlan:i," \
"dnsip:i,"

_env_flags_validate_type()函数进行校验时,发现ipaddr的值是一个字符串,认为法非法。
改为如下形式可以校验通过
#define CONFIG_IPADDR 192.168.1.2
"ipaddr=" __stringify(CONFIG_IPADDR) "\0" \

环境变量的类型有一下几种,每种类型的合法性校验时不一样,使用时需要注意
enum env_flags_vartype {
env_flags_vartype_string,
env_flags_vartype_decimal,
env_flags_vartype_hex,
env_flags_vartype_bool,
env_flags_vartype_ipaddr,
env_flags_vartype_macaddr,
env_flags_vartype_end
};