RK3566开发板SD卡启动Linux失败问题求助
Waiting for root device /dev/mmcblk1p3问题解决 编译4.19版本内核时,确实需要调整配置以支持SD卡控制器驱动和分区挂载,结合你提供的信息,具体分析和操作如下:
一、必须开启的内核配置项
针对RK3566平台的SD/MMC支持,4.19内核需确保以下配置编译进内核(而非模块,避免启动阶段无法加载):
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卡控制器驱动未生效。GPT分区支持
你的SD卡采用GPT分区表(从分区结构的Type GUID可判断),需开启:CONFIG_PARTITION_ADVANCED=y CONFIG_EFI_PARTITION=y若缺少此项,内核无法识别GPT格式的分区,自然找不到
/dev/mmcblk1p3设备。根文件系统支持
你的rootfs分区为Linux文件系统类型(GUID0fc63daf-8483-4772-8e79-3d69d8477de4),需确保对应文件系统驱动编译进内核,以ext4为例:CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y
二、其他需排查的问题
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卡识别。
设备树配置问题
检查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并重新编译设备树。内核日志验证
修正配置后重新编译内核,启动时查看内核日志,若能输出类似mmcblk1: mmc1:xxxx XXXX xx.X GiB的日志,说明SD卡已被识别,后续分区挂载即可正常进行。
内容的提问来源于stack exchange,提问作者cvh

