如何从 SD 卡启动 [嵌入式] Linux?

如何从 SD 卡启动 [嵌入式] Linux?

我正在 DM816x evm 板上快速搭建嵌入式 Linux 系统。以前我一直使用 TFTP 和 NFS 将内核和根文件系统加载到主板上。现在我正尝试切换到从 SD 卡加载所有内容。

我对卡进行了分区,使得 uBoot 和内核映像位于一个分区中,而 rootFS 位于另一个分区中。开机时,Uboot 正确启动并成功启动内核。但是,内核无法挂载根文件系统。它似乎无法识别任何 SD (mmc) 卡。它显示此错误消息。

VFS: Cannot open root device "mmcblk0p2" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0  (driver?)
1f01               8 mtdblock1  (driver?)
1f02            2560 mtdblock2  (driver?)
1f03            1272 mtdblock3  (driver?)
1f04            2432 mtdblock4  (driver?)
1f05             128 mtdblock5  (driver?)
1f06            4352 mtdblock6  (driver?)
1f07          204928 mtdblock7  (driver?)
1f08           50304 mtdblock8  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

我感觉我忽略了一些基本的东西。为什么它无法识别我尝试加载的根设备?

这是我正在运行的 uBoot 启动脚本:

setenv bootargs console=ttyO2,115200n8 root=/dev/mmcblk0p2 rw mem=124M earlyprink vram=50M ti816xfb.vram=0:16M,1:16M,2:6M ip=off noinitrd;mmc init;fatload mmc 1 0x80009000 uImage;bootm 0x80009000

答案1

我看到 DM816x EVM 中的一些示例 bootarg 行具有 rootdelay=2 到 rootdelay=10 的设置。由于 bootargs 中缺少该设置,因此从 2 的下限开始可能会比较好,这样您就可以查看是否需要一点时间来让 mmc 设备上线。

答案2

是的,根文件系统驱动程序必须内置在内核中,而不是模块中。原因是模块是从根文件系统加载的。重新编译内核并不是什么大事。前几次有点棘手,但这绝对不是只有内核黑客才能理解的事情。

相关内容