You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让U-Boot从SD卡第二分区加载rootfs?问题求助

解决U-Boot自定义bootargs未生效,内核误挂载错误分区的问题

问题分析

你手动设置的bootargs被U-Boot启动流程中的其他逻辑覆盖了——大概率是bootcmd里调用了类似mmcargs的环境变量,该变量会重新生成包含PARTUUID的bootargs,直接替换了你手动配置的参数,导致内核挂载了第一分区(PARTUUID=a545119e-01对应mmcblk0p1),而该分区没有rootfs的init进程,触发panic。

解决步骤

  1. 排查启动命令链
    先打印完整的启动相关环境变量,确认是哪个环节覆盖了bootargs:

    printenv bootcmd
    printenv mmcargs  # 如果存在这个变量的话
    

    典型的问题场景是bootcmd里包含run mmcargs,而mmcargs的内容是自动生成带PARTUUID的bootargs,比如:

    mmcargs=setenv bootargs console=ttyS0,115200 root=PARTUUID=${uuid} rootwait
    
  2. 修改启动参数逻辑
    根据排查结果选一种方式修改:

    • 方式一:直接跳过自动参数生成
      修改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'
      
  3. 保存环境变量并验证
    执行以下命令保存修改,重启后测试:

    saveenv
    reset
    

额外排查点

  • 确认SD卡第二分区确实包含完整的rootfs:用ext2ls mmc 0:2 /查看是否存在init或systemd等初始化进程;
  • 检查mmc dev指定的设备是否正确,用mmc list确认SD卡对应的设备编号。

内容的提问来源于stack exchange,提问作者Zafer Delice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:16:21