|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开发板:TQ2440
* o( b6 d! c. `4 ^) O6 @ s
6 }8 g+ Y3 G/ I- ?, D" D$ _) M内核版本:2.6.32 R( C+ K. j. N7 g
1 h) W, H j7 k% i v( z
Nand flash:K9F2G08U0A
g0 ^# E2 W2 @8 _
) a. d" K, S( Y$ c* Q% J3 I本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:. o3 j0 O$ T# [$ I1 S6 ?" {
5 d c) e9 j8 L; G* \+ Z# o8 a1. 完成使用Busybox编译出所需要的工具。
. _) I& E5 O; r8 m5 k0 A h5 j/ W
: Z) d+ H, G1 F- K. _/ c2. 完成添加根文件系统所需的目录和配置文件。
( e* ]7 A% d* N7 S% V) t0 Z
! x8 f/ q8 f; o% u7 ]0 X/ Z3. 开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。
( c, X5 ?/ i9 N. n, s
( z% _4 ~' j# b6 H- K, G9 Q3 w
( q4 f3 t9 x# L2 u
+ y; i2 j6 |+ d( b0 ^* \3 s% r8 X7 P第一步:配置内核
$ N. ?+ D* ~+ o1 C+ }& B- ]' I. R" X$ S* e
选择JFFS2文件系统:
! t% m Q' V8 H+ s% @
( B; Y$ m* u2 ~4 D
: Q0 y' i8 z5 X
3 }2 I; x9 K) F; m. l% k3 _* S1 c" ?: v T- W- Y9 l
' O' z1 X. K* w' I/ q
禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。& C4 j* u% w' b* e/ i0 w: P
2 b# y' b+ u/ z+ k
7 I# r7 P, b1 z0 ?$ j( R
$ Z! n* F$ I- |9 K4 A% Q% B7 B; v9 b
第二步:编译文件系统4 K; B7 p9 Y1 d! @; }! l
8 j, Q" j8 k# Y& j) @使用如下命令:
! t/ ~4 D1 x: [2 Y
& w3 `- J/ R% `2 R# p! A. G1 Q9 Vmkfs.jffs2 -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin
& S/ H5 o8 U) C4 N4 l- g I4 _- F+ a. f8 ]/ k9 S( y
其中,2 P+ z( y2 A7 |& N: u
: s. L0 d4 L T/ _: a8 j
-s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
# h* s' d: |+ c2 [% V8 N7 K2 t5 ]8 J6 x9 f; \, R5 b
查看手册可知其大小,: M* q: W1 A9 D. x
6 C/ h9 F8 F/ Q' A$ J( q
+ x% m3 k8 }2 `+ N% |% e
0 i3 K7 W0 g! Y3 b! @
R. A2 L; N: }4 L 页大小=0x800 = 2048Byte = 2KB,& H$ e# y( d5 k9 s2 K( ^$ M
q7 D- J! u& J, D3 t 块大小=0x20000=131072Byte = 128KB。
" O0 a, [* x, ]3 L5 N) @3 t/ |2 H3 Y X3 S
-l 表示使用小端模式..
, D: t. y2 A2 X+ {+ `7 M4 ^$ O) O% x
0 L% C0 H" f3 M. `$ v: T -n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:
: v4 S! b5 f6 b) R+ v; B
( E8 P% o+ P1 s: [ CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0, _3 r! O2 E4 a' R
! B- R _) y; E8 Y, F3 ^ --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。
" V) l$ R' k5 z1 t. V# X/ T
1 Q$ H! a. H- z; b- t! H -d 表示文件系统所在的位置。
2 \# N& u: Q( G+ b. }. O5 U
; h/ |2 \; L% @( L O# [ -o 表示生成的目标文件的名字。+ \' F! p$ ^ l3 Z& Z5 q. H( a# h1 C
4 q3 s3 k9 ?7 u& s
执行上述命令后,我们将得到编译好的JFFS2根文件系统。
+ i3 x' z! D4 d8 ` [: A* {* ]. ]8 W. U7 b% Q p
$ u* W! o& X/ ]) ]% T- F2 ^. @, n; n$ X: n! p) [. b3 F
第三步:修改Uboot的内核命令行
/ V( P+ } i* A( q, Y
2 x! C8 K4 [, Z$ {8 N& n2 H+ U此步的目的是告诉内核根文件系统的类型为jffs2。
7 h8 y; D9 B8 N$ a4 M1 }! p, M( l
. Q3 p# @- x) J% v, B" Tsetenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 , F! Z& r& t, P4 i2 L
# Z# c( b- o5 o% [$ t0 c; x0 `5 b- u
3 J) C! k( j$ v# B" Y0 z: v/ a! E
第四步: 烧写JFFS2文件系统至nand flash 中
. ~' X% j/ y2 n8 z+ P' l
/ E0 l4 @9 F% T$ y) S6 [首先,看下我的分区表:
1 f( J Q2 ~( F- ]% F
, [% E5 x# r% E* H[root@yj423 /root]#cat /proc/mtd2 w d' K9 ^/ p
dev: size erasesize name9 d7 |0 i% P% @
mtd0: 00800000 00020000 "mtdram test device"
$ c& { d1 v- b6 ymtd1: 00040000 00020000 "Uboot"& Z2 W8 s$ i# A5 V* [# q. z
mtd2: 00300000 00020000 "Kernel"
5 |. l- @6 R- H- m: P/ E x5 Ymtd3: 0fb00000 00020000 "filesystem"; e5 p5 m/ r& C+ Z* w* [
[root@yj423 /root]#cat /proc/partitions
/ e; s2 ?: t% \% k! nmajor minor #blocks name
4 }1 E! e$ s \
/ u3 L2 C J! ?& G6 k9 f" K 31 0 8192 mtdblock0
$ t" V w$ o p9 e7 W- j0 [2 U 31 1 256 mtdblock1* x2 g1 {" @& _7 ~ n
31 2 3072 mtdblock27 p; }& |* D# Z/ _
31 3 257024 mtdblock3, K1 M. l$ `: c- }$ y' I
- f/ c2 k8 a( A# a" i1 {
" W0 B% L6 l# S! \
& }5 h# E- u6 L& ?/ zmtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。
) ~- X# U2 K* U0 o) E, Y
! }# @1 x* j9 m7 s0 x T, s所以第三步的root参数为mtdblock3,请留意!, f, B7 U7 B* ]
- i. O& ^) n* T% B
开始烧写,请注意烧写的起始地址和长度。# ~% M h1 Q* J( y
+ u% {5 M( l. a+ H) b( G0 {tftp 0x31000000 jffs2.bin% m2 K& k- u) I: s8 r" f
nand erase 0x500000 0x0FB00000
/ }* a, w: Z* q9 m& Vnand write.jffs2 0x31000000 0x500000 0x800000
9 L( V* Z- F1 Y: {" E$ \4 {7 `5 o8 B; O' z+ I/ \
0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。# G$ ^* J* A$ y
* L7 O" j7 m/ H# _; Q
' F; U4 Y8 E1 H) l [* B9 x8 }
* c I. x( v! n7 C% @最后,来看下内核成功挂载JFFS2文件系统时的输出:9 s. r2 U; ^2 ?6 q; h8 M; N
7 G$ ?( f( Y! u }6 M( r) z( i......
: d# \+ A" [/ r8 b: p# Q
8 m+ p% g3 q/ `1 N5 ?4 U( ^VFS: Mounted root (jffs2 filesystem) on device 31:3.& @4 h6 G) @, X0 {- G
Freeing init memory: 156K; b8 d0 E ?9 G4 V- U" t
eth0: link down4 L5 `" K* i' I( t
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1) Z9 f. u. Q& R" o
[root@yj423 /root]#
: @5 ?$ X" A) q: {. z+ G
1 e' v* r& Y+ c" X8 P9 w0 k7 X4 E- U
/ ?$ `# j# N2 _( b' X6 Y) R, a6 Q8 {& }9 L7 h4 Z
|
|