pnegedge 2026-01-25 12:45 采纳率: 29.4%
浏览 4

petalinux配置无EMMC的系统时AUTOSTART不能执行

使用petalinux做的嵌入式系统,第一版硬件有EMMC,从SD卡启动,功能一切正常,考虑到EMMC没有使用,第二版把EMMC去掉了后出现几个怪现象,AUTOSTART不能执行,系统串口只能输出不能输入,把root=/dev/mmcblk1p2改为root=/dev/mmcblk0p2也没用,AI的方法不要推荐了,用了都不行。

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-01-25 12:46
    关注

    中午好🌞🌞🌞
    本答案参考通义千问

    根据你描述的问题,这是一个典型的 Petalinux 系统配置问题,特别是在硬件变更(如移除 EMMC)后,系统引导和启动脚本出现了异常。以下是详细分析和解决方案:


    一、问题分析

    1. AUTOSTART 无法执行

    • AUTOSTART 是 Petalinux 中用于在系统启动时自动运行脚本的机制。
    • 当你移除了 EMMC 后,可能影响了系统对根文件系统的识别或挂载方式,导致 AUTOSTART 脚本没有被正确加载。

    2. 串口只能输出不能输入

    • 这通常意味着系统虽然启动了,但没有正常进入 shell 或控制台。
    • 可能是由于 console 配置错误rootfs 挂载失败 导致系统无法进入交互模式。

    3. root=... 的修改无效

    • 说明内核启动参数中的 root= 没有被正确识别,可能是 u-boot 配置未更新设备树(Device Tree)中定义的设备不匹配

    二、解决方案

    1. 检查 u-boot 配置

    重点:确保 u-boot 的 bootargs 正确

    • 打开你的 u-boot 命令行(通过串口),查看当前的 bootargs 内容:
      printenv bootargs
      
    • 如果 root= 指向的是 /dev/mmcblk1p2,而你已移除 EMMC,则需要改为:
      setenv bootargs root=/dev/mmcblk0p2 ...
      
    • 保存并重启:
      saveenv
      reset
      

    加粗重点:确保 u-boot 的 bootargs 与实际硬件一致。


    2. 检查 Device Tree (DTS) 文件

    重点:确保 DTS 中的 mmc 设备节点正确

    • 在 Petalinux 工程中,找到对应的 .dts 文件(例如 zynqmp-zc7z1020.dts)。
    • 查看是否有以下内容:
      mmc0: mmc@e0000000 {
          compatible = "xlnx,zynqmp-mmc";
          reg = <0x0 0xe0000000 0x0 0x1000>;
          ...
      };
      
    • 如果你移除了 EMMC,应确保 mmc0 对应的是 SD 卡(即 mmcblk0),而不是 EMMC(mmcblk1)。

    加粗重点:Device Tree 必须与硬件匹配,否则会导致设备无法识别。


    3. 检查 rootfs 挂载是否成功

    重点:确认 rootfs 是否挂载到正确的设备

    • 在系统启动过程中,观察内核日志(通过串口):
      dmesg | grep -i mmc
      
    • 确认是否挂载了 /dev/mmcblk0p2
      mount /dev/mmcblk0p2 /mnt
      

    加粗重点:如果 rootfs 无法挂载,系统将无法进入 shell,导致串口无输入。


    4. 检查 AUTOSTART 配置

    重点:确保 autostart.sh 存在且可执行

    • 在 Petalinux 中,AUTOSTART 脚本位于:
      project-root/images/linux/autostart.sh
      
    • 确保该脚本存在,并且具有可执行权限:
      chmod +x autostart.sh
      

    重点:检查 petalinux-config 中的 AUTOSTART 设置

    • 打开 Petalinux GUI:
      petalinux-config -c rootfs
      
    • Root File System Settings 中,确认:
      • Enable autostart scriptYes
      • Autostart script nameautostart.sh

    加粗重点:确保 AUTOSTART 配置正确,脚本路径无误。


    5. 重新生成镜像并测试

    步骤如下:

    1. 修改完配置后,重新构建镜像:
      petalinux-build
      
    2. 生成 SD 卡镜像:
      petalinux-package --boot --fsbl images/linux/fsbl.elf --fpga images/linux/system.bit --u-boot --force
      
    3. 使用新的镜像烧录到 SD 卡,并测试启动。

    三、代码修改建议(如有)

    如果你在 system-top.hdfdevice-tree 中手动配置了设备,可以参考以下修改示例:

    示例:修改 Device Tree 中的 MMC 设备

    mmc0: mmc@e0000000 {
        compatible = "xlnx,zynqmp-mmc";
        reg = <0x0 0xe0000000 0x0 0x1000>;
        interrupts = <0 98 4>;
        clock-names = "mmc", "sample";
        clocks = <&clkc 21>, <&clkc 22>;
        #address-cells = <1>;
        #size-cells = <0>;
        status = "okay";
    };
    

    加粗重点:确保 mmc0 对应的是 SD 卡,而非 EMMC。


    四、总结

    | 问题点 | 解决方案 | |--------|----------| | AUTOSTART 无法执行 | 检查 autostart.sh 存在性和配置 | | 串口无输入 | 检查 rootfs 挂载和 console 配置 | | root=... 不生效 | 更新 u-boot 的 bootargs 和 Device Tree | | EMMC 移除影响 | 确保硬件配置与 Device Tree 和 u-boot 一致 |


    如需进一步帮助,请提供:

    • Petalinux 版本
    • 具体使用的开发板型号
    • bootargs 输出
    • dmesg 日志片段

    我可以帮你更精确地定位问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月25日