如何评估u-boot环境变量?

时间:2016-05-02 19:12:50

标签: embedded environment-variables u-boot

我想将u-boot环境变量评估为其他环境变量的函数。我的想法是制作一个模板,然后进行评估,但变量永远不会被替换:

setenv a "1"
setenv b "2"
setenv c_tpl "'\${a}' '\${b}'"
setenv eval_c "setenv c '\${c_tpl}'"
printenv
run eval_c
printenv

printenv输出:

a=1
b=2
c=${a} ${b}
c_tpl=${a} ${b}
eval_c=setenv c ${c_tpl}

3 个答案:

答案 0 :(得分:1)

在我的创作者CI20上,我必须设置相同的东西。

原始的printenv读作:

baudrate=115200
board_date=20140704
board_mfr=NP
bootargs=console=ttyS4,115200 console=tty0 mem=256M@0x0 mem=768M@0x30000000 rootwait quiet rw ubi.mtd=3 ubi.mtd=4 ubi.fm_autoconvert=1 root=ubi1:root rootfstype=ubifs
bootcmd=run ethargs; mtdparts default; ubi part boot; ubifsmount ubi:boot; ubifsload 0x88000000 uImage; bootm 0x88000000
bootdelay=1
ethact=dm9000
ethaddr=d0:31:10:ff:7d:20
ethargs=env set bootargs ${bootargs} dm9000.mac_addr=${ethaddr}
loads_echo=1
serial#=1255
stderr=eserial0,eserial4
stdin=eserial0,eserial4
stdout=eserial0,eserial4

Environment size: 582/32764 bytes

因此,在u-boot期间,您只需键入:

setenv ethargs env set bootargs \${bootargs} dm9000.mac_addr=\${ethaddr}

答案 1 :(得分:0)

语法与我使用的语法略有不同。例如。这样的事情应该有效:

set a 1
set b 2
set c_tpl $(a) $(b)
set eval_c set c $(c_tpl)

run eval_c

也许有一些好的"""

我并不完全确定您尝试做什么。以上"运行eval_c"应该创造一个" c"值为" 1 2"。

答案 2 :(得分:0)

你将遇到的部分问题是U-Boot shell不像bash甚至POSIX sh那样完整。所以你真正需要做的是重新思考你的函数不依赖于这种行为或者应用这个补丁https://patchwork.ozlabs.org/patch/552864/,这个补丁还讨论了为什么我们按照我们的方式做事情以及如何做一个例子你必须重新思考你想做什么,以便它在今天的U-Boot(好吧,我们的HUSH版本)限制内工作。