BeagleBone Black从eMMC启动时,U-Boot命令添加位置咨询
BeagleBone Black eMMC启动时执行U-Boot命令的解决方案
方案一:直接修改并保存U-Boot环境变量
这是快速生效的方式,配置后永久生效(除非U-Boot被更新覆盖):
- 启动BeagleBone Black时,快速按下空格键或任意键中断U-Boot自动启动,进入U-Boot命令行。
- 输入修正后的U-Boot命令(注意修正原命令中的变量名笔误:
fdrovaddr改为fdtovaddr):
setenv fdtaddr 0x87f00000 setenv fdtovaddr 0x87fc0000 load mmc 1:1 ${fdtaddr} /boot/dtbs/4.14.71-ti-r80/am355x-boneblack-uboot-univ.dtb load mmc 1:1 ${fdtovaddr} /lib/firmware/PCDEV0.dtbo fdt addr $fdtaddr fdt resize 8192 fdt apply $fdtovaddr
- 执行
saveenv命令保存环境变量,重启后这些命令会自动执行。
方案二:修改boot.scr启动脚本(更稳定)
BeagleBone Black启动时会优先加载/boot/boot.scr(由boot.cmd编译生成),修改这个脚本可以确保命令稳定执行:
- 在文件系统中创建
boot.cmd文件,内容包含你的设备树加载命令,同时保留原有启动流程(示例如下,根据实际内核路径调整):
# 自定义设备树加载命令 setenv fdtaddr 0x87f00000 setenv fdtovaddr 0x87fc0000 load mmc 1:1 ${fdtaddr} /boot/dtbs/4.14.71-ti-r80/am355x-boneblack-uboot-univ.dtb load mmc 1:1 ${fdtovaddr} /lib/firmware/PCDEV0.dtbo fdt addr $fdtaddr fdt resize 8192 fdt apply $fdtovaddr # 原有系统启动流程(示例,需匹配你的实际内核文件) load mmc 1:1 ${loadaddr} /boot/vmlinuz-4.14.71-ti-r80 load mmc 1:1 ${ramdiskaddr} /boot/initrd.img-4.14.71-ti-r80 bootz ${loadaddr} ${ramdiskaddr}:${filesize} ${fdtaddr}
- 使用
mkimage工具将boot.cmd编译为boot.scr:
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Custom Boot Script" -d boot.cmd boot.scr
- 将生成的
boot.scr替换到/boot/目录下,重启后命令会自动执行。
关于uEnv.txt失效的说明
你的/boot/uEnv.txt未生效,大概率是U-Boot配置中未启用uEnv.txt解析功能,或是文件路径、语法格式不符合要求(比如变量名错误)。上述两种方案可绕过此问题,直接实现需求。
内容的提问来源于stack exchange,提问作者JP Hayes
相关产品推荐
相关产品推荐

