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

RK3566开发板SD卡启动Linux失败问题求助

RK3566 SD卡启动卡在Waiting for root device /dev/mmcblk1p3问题解决

编译4.19版本内核时,确实需要调整配置以支持SD卡控制器驱动和分区挂载,结合你提供的信息,具体分析和操作如下:

一、必须开启的内核配置项

针对RK3566平台的SD/MMC支持,4.19内核需确保以下配置编译进内核(而非模块,避免启动阶段无法加载):

  1. SD/MMC控制器驱动

    CONFIG_MMC=y
    CONFIG_MMC_SDHCI=y
    CONFIG_MMC_SDHCI_PLTFM=y
    CONFIG_MMC_SDHCI_ROCKCHIP=y
    

    其中CONFIG_MMC_SDHCI_ROCKCHIP=y是RK平台专属的SDHCI控制器驱动,必须开启——从你的内核日志看,系统仅识别了mmc0(eMMC)和mmc2(SDIO卡),未出现mmc1(SD卡)的识别日志,说明SD卡控制器驱动未生效。

  2. GPT分区支持
    你的SD卡采用GPT分区表(从分区结构的Type GUID可判断),需开启:

    CONFIG_PARTITION_ADVANCED=y
    CONFIG_EFI_PARTITION=y
    

    若缺少此项,内核无法识别GPT格式的分区,自然找不到/dev/mmcblk1p3设备。

  3. 根文件系统支持
    你的rootfs分区为Linux文件系统类型(GUID 0fc63daf-8483-4772-8e79-3d69d8477de4),需确保对应文件系统驱动编译进内核,以ext4为例:

    CONFIG_EXT4_FS=y
    CONFIG_EXT4_FS_POSIX_ACL=y
    CONFIG_EXT4_FS_SECURITY=y
    

二、其他需排查的问题

  1. Uboot启动命令错误
    你的bootcmd中指定加载mmc 1:2的内容,但SD卡的boot分区是第3个分区(对应Uboot中的mmc 1:3),需修正为:

    setenv bootcmd "load mmc 1:3 ${kernel_addr_r} Image; load mmc 1:3 ${fdt_addr_r} rk3566-rock-3a.dtb; booti ${kernel_addr_r} - ${fdt_addr_r}"
    

    虽然当前内核已启动到等待根设备阶段,但错误的分区加载可能导致内核/设备树不匹配,间接影响SD卡识别。

  2. 设备树配置问题
    检查RK3566的设备树文件(rk3566-rock-3a.dtb对应的dts),确保SD卡对应的SDHCI控制器节点处于启用状态,例如:

    &sdhci {
        status = "okay";
        bus-width = <4>;
        cap-mmc-highspeed;
        cap-sd-highspeed;
        disable-wp;
    };
    

    若节点被标记为status = "disabled";,需修改为okay并重新编译设备树。

  3. 内核日志验证
    修正配置后重新编译内核,启动时查看内核日志,若能输出类似mmcblk1: mmc1:xxxx XXXX xx.X GiB的日志,说明SD卡已被识别,后续分区挂载即可正常进行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:29:48