如何让U-Boot从SD卡第二分区加载rootfs?问题求助
解决U-Boot自定义bootargs未生效,内核误挂载错误分区的问题
问题分析
你手动设置的bootargs被U-Boot启动流程中的其他逻辑覆盖了——大概率是bootcmd里调用了类似mmcargs的环境变量,该变量会重新生成包含PARTUUID的bootargs,直接替换了你手动配置的参数,导致内核挂载了第一分区(PARTUUID=a545119e-01对应mmcblk0p1),而该分区没有rootfs的init进程,触发panic。
解决步骤
排查启动命令链
先打印完整的启动相关环境变量,确认是哪个环节覆盖了bootargs:printenv bootcmd printenv mmcargs # 如果存在这个变量的话典型的问题场景是
bootcmd里包含run mmcargs,而mmcargs的内容是自动生成带PARTUUID的bootargs,比如:mmcargs=setenv bootargs console=ttyS0,115200 root=PARTUUID=${uuid} rootwait修改启动参数逻辑
根据排查结果选一种方式修改:- 方式一:直接跳过自动参数生成
修改bootcmd,移除调用mmcargs的步骤,让U-Boot直接使用你手动设置的bootargs:
(注:替换成你实际的内核、设备树加载地址和命令)setenv bootcmd 'mmc dev 0; mmc read ${loadaddr} 0x800 0x4000; mmc read ${fdtaddr} 0x4800 0x800; bootz ${loadaddr} - ${fdtaddr}' - 方式二:修改自动参数模板
如果依赖mmcargs的其他逻辑,直接修改该变量为你需要的参数:setenv mmcargs 'setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait'
- 方式一:直接跳过自动参数生成
保存环境变量并验证
执行以下命令保存修改,重启后测试:saveenv reset
额外排查点
- 确认SD卡第二分区确实包含完整的rootfs:用
ext2ls mmc 0:2 /查看是否存在init或systemd等初始化进程; - 检查
mmc dev指定的设备是否正确,用mmc list确认SD卡对应的设备编号。
内容的提问来源于stack exchange,提问作者Zafer Delice
相关产品推荐
相关产品推荐

