修正无法正常从SD卡加载根文件系统

本文假设参照

ARM Linux使用SD卡根文件系统

一文对SD卡进行分区,然后试图从SD加载EXT3文件系统。但是,在加载过程中会有如下报错:

.......

VFS: Cannot open root device "179:2" or unknown-block(179,2)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)


首先,先确保你的SD卡没有写保护。如果写保护了,也有可能造成上面的输出。

其次,修改Uboot的bootargs。修改内容如下:

U-Boot> setenv bootargs noinitrd root=179:2 rw rootdelay=3 rootfstype=ext3 console=ttySAC0

其实就是增加rootdelay这个参数,该参数的目的是让根文件系统的加载时间推迟3秒。

推迟3秒是为了让sd卡能够先初始化完毕,让后再从sd卡加载文件系统。

So之所以内核会panic就是因为sd卡都没有初始化,还要让内核去sd卡加载文件系统,怎么可能加载成功。


那么怎么可以推断出是因为根文件系统的加载早于sd卡的初始化,所以造成内核panic的呢?

来看下正常情况下,根文件系统位于nandflash中,内核从nandflash加载yaffs2根文件系统,同时,SD卡已插入卡槽中。

给开发板上电,我们看下输出信息:

....

yaffs: dev is 32505856 name is "mtdblock0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.0, "mtdblock0"
block 419 is bad
block 420 is bad
block 421 is bad
block 423 is bad
block 424 is bad
block 425 is bad
block 426 is bad
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 104K
mmc0: card is read-write
mmcblk0: mmc0:5996 SD02G 1921024KiB
 mmcblk0: p1 p2
starting udev...kjournald starting.  Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
done

....

我们可以看到,内核首先加载了根文件系统yaffs,然后才加载了sd卡。

因此,如果不推迟根文件系统加载的时间,sd卡根本得不到初始化的机会。


最后,我们看下加入rootdelay参数后的输出情况。

...

Waiting 3sec before mounting root device...
mmc0: card is read-write
mmcblk0: mmc0:5996 SD02G 1921024KiB
 mmcblk0: p1 p2
kjournald starting.  Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem).
Freeing init memory: 104K
starting udev...done

...

从上面的输出来看,内核推迟了3秒加载根文件系统,先加载了SD卡,然后挂载了ext3文件系统。



参考文档:

http://hi.baidu.com/xuxin_813/item/5fdab053022280c9d58bacff

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值