OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 169|回复: 1

EMMC核心板内核启动失败问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2023-9-10
在线时间
1 小时
发表于 3 天前 | 显示全部楼层 |阅读模式
1金钱
为什么我核心板是emmc版,但是需要用NAND版的DTB文件内核才能起来?
我开发板启动信息:U-Boot 2016.03 (Sep 08 2026 - 00:18:32 +0800)

CPU:   Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 53C
Reset cause: POR
Board: I.MX6U ALPHA|MINI
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0

mmc信息:
=> mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1
=> <INTERRUPT>
=>
=>
=> mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1
=> fatls mmc 1:1
    39459   imx6ull-14x14-emmc-10.1-1280x800-c.dtb
    39459   imx6ull-14x14-emmc-4.3-480x272-c.dtb
    39459   imx6ull-14x14-emmc-4.3-800x480-c.dtb
    39459   imx6ull-14x14-emmc-7-1024x600-c.dtb
    39459   imx6ull-14x14-emmc-7-800x480-c.dtb
    40295   imx6ull-14x14-emmc-hdmi.dtb
    40203   imx6ull-14x14-emmc-vga.dtb
  6785272   zimage

8 file(s), 0 dir(s)



使用emmc启动,一直卡在Starting kernel ...

用这个文件imx6ull-14x14-nand-7-1024x600-c.dtb才会起来


emmc启动打印

emmc启动打印

启动信息

启动信息
回复

使用道具 举报

0

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
696
金钱
696
注册时间
2026-1-29
在线时间
52 小时
发表于 3 天前 | 显示全部楼层
根据您的问题描述,EMMC核心板需要使用NAND版本的DTB文件才能启动内核,这通常是由于设备树(Device Tree)配置与实际硬件不匹配导致的。以下是详细分析和解决方案:

一、问题原因分析
设备树关键配置不匹配

存储介质差异:EMMC和NAND在硬件接口、控制器驱动、分区布局上存在差异。EMMC的DTB需正确描述MMC控制器、电源管理、引脚复用等配置,而NAND的DTB可能包含不同的MTD分区设置。
根文件系统路径错误:EMMC的DTB可能未正确指定根文件系统(root=参数)所在的设备分区,导致内核无法挂载文件系统。
U-Boot启动参数问题

bootargs参数错误:U-Boot传递给内核的bootargs可能仍指向NAND的MTD设备(如root=/dev/mtdblock2),而EMMC需要指定MMC设备(如root=/dev/mmcblk1p2)。
设备树加载地址错误:U-Boot可能未将EMMC的DTB正确加载到内存地址,或内核镜像与DTB不匹配。
EMMC控制器驱动问题

时钟/电源配置缺失:EMMC控制器的时钟源、电压调节等配置可能在EMMC版DTB中未正确定义,导致控制器初始化失败。
硬件兼容性问题:核心板EMMC模块与SoC的兼容性可能存在问题(如型号、速率支持),需通过DTB配置调整。
二、解决步骤
1. 检查U-Boot启动参数
在U-Boot命令行中查看并修改bootargs:

=> printenv bootargs
# 预期输出可能包含类似:root=/dev/mtdblock2 ...(NAND配置)

# 修改为EMMC的分区设备(例如mmcblk1p2)
setenv bootargs "console=ttyS0,115200 root=/dev/mmcblk1p2 rw rootwait"
saveenv

      
2. 确认DTB文件与硬件匹配
验证DTB文件来源:确保使用的DTB是针对您的EMMC核心板实际原理图编译的,而非从其他板型直接复制。
对比EMMC与NAND的DTB差异:
使用dtc -I dts -O dtb -o compare.dtb imx6ull-14x14-emmc.dts反编译DTB,对比EMMC和NAND版本的关键配置,如:
&mmc1节点的配置(是否启用、引脚、速率)。
chosen节点中的bootargs(是否包含root=/dev/mmcblk*)。
分区布局(/reserved-partition是否与EMMC实际分区一致)。
3. 更新设备树配置
检查EMMC控制器节点:确保DTB中&mmc1节点配置正确,例如:

&mmc1 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_mmc1>;
    clock-frequency = <40000000>;  // 根据EMMC模块要求调整
    vmmc-supply = <&reg_3p3v>;     // 确保电源域正确
};

      
调整根文件系统分区:在bootargs中明确指定EMMC的分区:

/ {
    bootargs = "root=/dev/mmcblk1p2 rw rootwait";
};

      
4. 验证EMMC分区与文件系统
检查EMMC实际分区:通过U-Boot读取EMMC分区表:

=> mmc dev 1
=> mmc part
# 确认分区是否包含内核、DTB、根文件系统

      
重新烧录EMMC:若分区损坏,使用dd命令或NXP官方工具重新烧录EMMC:

sudo dd if=u-boot-spl.bin of=/dev/sdX bs=1k seek=1
sudo dd if=u-boot.bin of=/dev/sdX bs=512 seek=32
sudo dd if=zimage.bin of=/dev/sdX bs=512 seek=1024
sudo dd if=imx6ull-14x14-emmc.dtb of=/dev/sdX bs=512 seek=2048

      
5. 调试内核启动日志
若内核仍卡在Starting kernel...,通过串口获取详细日志:

# 在U-Boot中添加earlyprintk参数
setenv bootargs "console=ttyS0,115200 earlyprintk root=/dev/mmcblk1p2 rw rootwait"
saveenv
bootz

      
关键日志分析:
mmc0: error -84:EMMC控制器初始化失败(检查电源、时钟、引脚配置)。
VFS: Cannot open root device "mmcblk1p2":根文件系统分区不存在(检查分区表和文件系统类型)。
三、推荐工具与资源
设备树编译工具:

dtc(Device Tree Compiler):用于反编译和检查DTB文件。
文档手册:i.MX6ULL参考手册([RM]):重点阅读MMC/SD控制器章节。
调试工具:

逻辑分析仪:抓取EMMC模块的时钟、数据线信号,验证硬件通信是否正常。
四、总结
EMMC核心板启动失败的根本原因是设备树配置与实际硬件不匹配。需通过修正bootargs参数、验证DTB配置、检查EMMC分区三个步骤逐步排查。若问题仍存在,建议从硬件层面检查EMMC模块的电源、时钟、信号完整性。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-9-19 04:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表