美文网首页
替换uboot启动参数

替换uboot启动参数

作者: 叶迎宪 | 来源:发表于2021-12-04 20:12 被阅读0次

有块amlogic的板,想在uboot启动参数中修改bootargs,把内存模拟成1G。最早找到的方案是修改 uboot代码中board configs中的.h头文件。但是这样每次修改都要重新编译固件并整体烧录,比较麻烦

一、在uboot中使用setenv设置uboot环境变量bootargs,saveenv保存。但是不知道为什么重启后参数又恢复了,savaenv并没有报错

二、在uboot中使用 usb_update bootloader u-boot.bin 替换1G的uboot镜像。但是重启后uboot环境变量并没有改变,似乎uboot环境变量不是放在 u-boot.bin ?

三、尝试编译fw_printenv 工具。进入uboot\bl33目录,输入
make distclean
make g12b_w400_v1_config
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- env

编译出来一个fw_printenv ,还要做一个fw_setenv 的软链接
ln -s fw_printenv fw_setenv

接着要编辑/etc/fw_env.config,参考n1盒子
# Device to access offset env size
/dev/mmcblk0 0x27400000 0x10000

此方法作废,虽然会看到环境变量,但是跟uboot看到的会不一致

linux中已经有/dev/env了,/etc/fw_env.config,应该改为
# Device to access offset env size
/dev/env 0x0 0x10000

其中offset、env size等参数的获取,可以在uboot中通过printenv、saveenv看到
https://github.com/laris/Phicomm-N1/blob/master/uboot.md

fw_setenv可以成功修改bootargs了,用dd从/dev/env分区读取出的内容也确实看到bootargs已经被改了。但是重启后内存依然没有变?这是什么鬼?

fw_setenv成功修改bootargs后,进入uboot,用print看到的bootargs仍然是修改之前的。但是进入linux后,用fw_printenv看到的bootargs却是新的。难道uboot使用的bootargs是代码写死的?不过仔细的看所有的环境变量,发现有一个跟bootargs长得很像的initargs。前面所说的我们修改uboot config头文件中的,其实也是initargs参数。uboot环境变量中,可以看到另外一个变量
storeargs=setenv bootargs ${initargs} ${fs_type} reboot_mode_android=...

看来uboot每次启动时,bootargs都是从initargs等参数中推导而来的,因此直接修改bootargs是无效的,应该修改initargs

相关文章

网友评论

      本文标题:替换uboot启动参数

      本文链接:https://www.haomeiwen.com/subject/hskmxrtx.html