|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
对SD卡进行分区,然后试图从SD加载EXT3文件系统。但是,在加载过程中会有如下报错:! _" o% ^6 H2 ~ B, {0 _ f
* _- r: r' ^- r! E# N; B/ i
.......8 {4 |# ?6 c8 q# C8 X
1 n+ U) L+ L6 v$ X# Z: [4 g
VFS: Cannot open root device "179:2" or unknown-block(179,2)- ~2 i1 p9 h7 w
Please append a correct "root=" boot option
+ t* r, o. Q& bKernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)/ V$ Y- S& L! R$ K: ^
2 ]: k8 V% x/ |! t3 w+ s
6 |9 c# c" P0 B3 T$ p" |
9 n" y6 @3 m- p2 V# j J: H8 Q首先,先确保你的SD卡没有写保护。如果写保护了,也有可能造成上面的输出。* B% U. j; n$ D: [ a8 b+ H- [- _
$ ]* l4 f3 B% h, Y2 b Y其次,修改Uboot的bootargs。修改内容如下:+ P' \# p4 Y5 p9 S2 ?) N- A* @, C
- r% M9 D, R. ~; }, X
U-Boot> setenv bootargs noinitrd root=179:2 rw rootdelay=3 rootfstype=ext3 console=ttySAC0
/ s6 ]3 H$ S+ ^1 }, N7 V( s: M% \' Z- E/ }3 S% s
其实就是增加rootdelay这个参数,该参数的目的是让根文件系统的加载时间推迟3秒。 B( Y( V. r5 E0 D9 X* U: s
" q- r) F5 ?5 m, | @, ~" \% C$ q
推迟3秒是为了让sd卡能够先初始化完毕,让后再从sd卡加载文件系统。
- f, E+ J4 k5 Y0 s# @$ |& B$ ?' ^% O, T& i [3 H
So之所以内核会panic就是因为sd卡都没有初始化,还要让内核去sd卡加载文件系统,怎么可能加载成功。
$ s& \& h' d A9 q
( I$ u* C4 F4 {$ ]- h4 h! d6 ]3 q) { V7 Q* v
- A2 D# _: T0 ^. o9 c$ w# v那么怎么可以推断出是因为根文件系统的加载早于sd卡的初始化,所以造成内核panic的呢?% U( p+ P& K5 Y o8 e7 K% j
) V6 E3 F/ p0 M8 f0 p
来看下正常情况下,根文件系统位于nandflash中,内核从nandflash加载yaffs2根文件系统,同时,SD卡已插入卡槽中。 N) j8 d; e N5 t. V6 J# G$ B
F5 {/ r5 x7 y: g1 ~6 [8 Y
给开发板上电,我们看下输出信息:: `( F j5 ]( H8 @; {
2 p! A* V( i. u6 d+ `....
8 U6 _( q0 a; Q8 s2 v
. ~) e! v& c$ S. N, Dyaffs: dev is 32505856 name is "mtdblock0"+ J% ]& _% o, L
yaffs: passed flags ""! H- }, T% a" B* Y# Y
yaffs: Attempting MTD mount on 31.0, "mtdblock0"( D8 M1 f% ?5 _7 i- g
block 419 is bad. p! P5 r$ u* e4 G; _* q
block 420 is bad r; o* i4 h4 V3 }
block 421 is bad
4 g( F H! y6 U H2 r* \ bblock 423 is bad, g0 j0 Y- ~9 i1 @) G; J, V
block 424 is bad
/ V# ~- n/ D, A1 w) V% Zblock 425 is bad
* Z/ r9 q* a9 G/ t' sblock 426 is bad2 x0 Q0 A3 h) [. F3 Y/ S
VFS: Mounted root (yaffs filesystem).( m& u* G4 G5 Q5 _& U9 |
Freeing init memory: 104K
8 \5 M8 d. y# t0 g9 S4 wmmc0: card is read-write. b+ \5 M8 d9 v7 [! v
mmcblk0: mmc0:5996 SD02G 1921024KiB ( {* _' c3 y& ?& T% t
mmcblk0: p1 p2
6 V+ b& T5 Z# U: f B3 _! ystarting udev...kjournald starting. Commit interval 5 seconds
: j9 d+ J- y h. U+ q( cEXT3 FS on mmcblk0p2, internal journal& _$ X, l6 R! N% z
EXT3-fs: recovery complete./ I" f5 }1 u* P/ q6 }% h w' t
EXT3-fs: mounted filesystem with ordered data mode.
- K& T; E7 _& }! M# u$ ldone
$ S. y8 g: W. V: U$ z. P4 A) |7 {( w8 N0 L$ Y4 T% I. D
....
) g0 n1 @7 k6 Q) a) z* Q" ]
* b# i/ d* Q9 U& I5 V我们可以看到,内核首先加载了根文件系统yaffs,然后才加载了sd卡。
+ n# M# A. b0 d ]2 B5 J9 ^: o; ?- Z( u- R& I2 E; i7 `+ h2 S
因此,如果不推迟根文件系统加载的时间,sd卡根本得不到初始化的机会。
- F) t, M0 `. S/ e3 a) h4 D/ S/ M! ~7 ~# m& O
1 t2 I4 E7 }' z4 Z5 n, g
! e/ u0 y2 k8 x. u$ s$ q
最后,我们看下加入rootdelay参数后的输出情况。
8 N) t% t! K# Y4 N- S
9 I* E' ]" S! J. c! u$ S- S...
' Y: {* D: C q: k/ E8 l& L# I& q5 M9 t3 S3 v9 |
Waiting 3sec before mounting root device...
# s' {: B7 n) M5 Cmmc0: card is read-write
1 |4 R6 Q5 t8 J7 [" Lmmcblk0: mmc0:5996 SD02G 1921024KiB 2 c/ R* h' X ^: ~1 r0 d j# Y, h
mmcblk0: p1 p21 D5 C5 @& n2 A" }; y$ b
kjournald starting. Commit interval 5 seconds$ f! g, Y0 U( d7 F% }0 }8 N" E
EXT3 FS on mmcblk0p2, internal journal
" W+ E# k* o' t" R' m7 A( HEXT3-fs: recovery complete.7 ^4 q1 f8 X- d2 D
EXT3-fs: mounted filesystem with ordered data mode.
; x. |9 {% ~/ g' D2 i% UVFS: Mounted root (ext3 filesystem).
L9 u! z! y' T# C/ cFreeing init memory: 104K
7 U7 m# q! k5 Z5 Astarting udev...done: r# B$ A/ U: J6 b
/ @$ S9 ~( W: l4 X/ J. \
...
1 K, A$ \! T" o5 Q% N. t
- `" S# R& ~7 C% P从上面的输出来看,内核推迟了3秒加载根文件系统,先加载了SD卡,然后挂载了ext3文件系统。
1 k6 Z" \ }; w% \% R; R/ v4 {1 I9 r6 {: p) B' i$ e
/ @/ ]3 w# d' D* Q! a0 b6 w
( t+ D# C# F* t( X" V( J1 o2 N' I9 E" {
|
|