如何评估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}

在我的Creator 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}

语法看起来与我使用的有点不同。像这样的东西应该行得通:

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

也许有一些位置合适的

不过,我不完全确定你想做什么。上面的"run eval_c"应该创建一个值为"12"的"c"。

您将遇到的部分问题是U-Boot shell并不像bash甚至POSIX-sh那样完整。因此,您真正需要做的是重新思考您的函数不依赖于此行为或应用此补丁https://patchwork.ozlabs.org/patch/552864/它还对我们为什么以我们的方式做事进行了更长时间的讨论,并举例说明了你必须如何重新思考你想做的事情,以便它在今天的U-Boot(好吧,我们的HUSH版本)限制范围内工作。

最新更新