|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开发板:TQ2440* i* ]; ^1 j0 ~3 Y0 q6 J
$ D2 V6 M$ I% |( ?* d0 d% U内核版本:2.6.32
; p/ |% T* t1 ]6 M/ c2 i/ |3 X1 o3 O/ [% x( E: M8 U* Y
Nand flash:K9F2G08U0A
: W$ C$ l X4 n7 E) ^
+ K8 b1 h& l) v' G本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:" d4 R' `3 Z' |% w2 H1 [ d
- x. ^$ D- a( P/ p# g# V3 [! Y/ ^( S+ {1. 完成使用Busybox编译出所需要的工具。0 q, h+ ?: X) I: y2 U8 A: P
( r, d) r( X$ P5 e7 y2. 完成添加根文件系统所需的目录和配置文件。
& p& [ @7 C; D4 w9 R2 C9 u' E5 Y3 \ w5 N# S
3. 开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。
3 r* E* j+ A# L; p1 } \4 w& n: c& }8 i; q
& m M% s4 c2 F+ g3 o
6 B- r# H/ U; r0 [# b
第一步:配置内核
# a4 W6 s ^4 h
9 ^% F0 B2 C, f8 `$ A选择JFFS2文件系统:0 y8 V% a5 ~' W5 W2 {2 k6 l, a
) c o9 K8 p* F3 W% u5 P
% o, W6 a5 @+ J
- t' |: ^0 V- m0 _1 P5 }/ G1 H4 P' x
! U, [' a w! X/ A6 v
禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。# G3 K# W- Y+ I9 _
* Y0 p }. N+ q. ~! M; |
* s9 o$ G' m* f1 C3 h$ B) w8 }
% O9 N! T' c" y% d! S3 b8 f* }
' F1 O+ D+ C/ p3 o! s; R. [第二步:编译文件系统
' J2 o( W3 `3 l% V" I f! A$ m% W3 o; r! k1 W7 ^# y2 J
使用如下命令:
- G' @/ T7 Z8 v' d" h
, o9 h; Q2 \3 t7 G! B6 ^2 g9 Bmkfs.jffs2 -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin
1 o1 a4 I! P! m# }2 d' W1 G
, s2 a7 I. z+ X& m h$ m. R! R( |其中,
3 v# h: o3 j" x) k: L( T7 s+ _+ t2 \' O- c' H
-s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
6 M8 ?* M9 N/ Q# J7 [
! i* U, x4 E$ V: f 查看手册可知其大小,
2 K5 {& I6 t* ?9 M
( Q3 H+ W3 i$ P7 P$ u0 o: o; }
! a+ \6 W2 G& X& ~0 P3 u
0 n6 c6 V. g7 _* O
+ v, _9 l! w- T' p2 Y: _
页大小=0x800 = 2048Byte = 2KB,. L+ C, g( E; j" }5 b1 A+ A. K; N
6 t$ c3 q+ M2 _$ o4 t7 n) p Q
块大小=0x20000=131072Byte = 128KB。 x/ W( \8 A# {
( g* o+ Y( R6 Y2 l8 u -l 表示使用小端模式..! R0 t1 @ j: l1 J5 Y- K
4 G5 U. I# v0 X
-n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:
) f& c, d- C4 s0 `1 {2 h# f, z4 w% M2 p; |% D! _# Z! _7 V2 s9 P/ \3 f
CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0 \# J, `5 q2 c% F2 Q! r$ |
, O) H2 g- i& |9 r+ r' _ --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。
7 k. l3 M |- M; Q% U
# u, C7 D* K) B% [- d0 [, p Y -d 表示文件系统所在的位置。- a& V# }+ y! E# j7 i O# S8 Z' c( z
- l" t3 E# r" R( D& `6 i -o 表示生成的目标文件的名字。
6 i7 f+ `& p' w* m5 D" G4 A
% t2 o$ D* R) d执行上述命令后,我们将得到编译好的JFFS2根文件系统。& Z' _! g. H$ ^
4 S+ ~/ ]" s# n4 M% Y
" [' M& [) P& U6 n, R; Z H4 ?" ?3 c# {/ E
第三步:修改Uboot的内核命令行
1 f0 q# x3 E" p& K
$ B! s& [% ^/ r: U0 L% u此步的目的是告诉内核根文件系统的类型为jffs2。" n8 O6 I. E; X- c, R
X" m( h, J# o8 ^7 q1 X! a
setenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 ( ~0 a6 H, E1 R+ h: r
) I. b( u( g5 G5 H' k1 n
/ O/ R& ?) }' j3 R6 I
$ z" B5 n( T- ? z ]
第四步: 烧写JFFS2文件系统至nand flash 中
5 E% C0 x, D& V+ y
6 h0 D* g" J2 F首先,看下我的分区表:
3 w* [9 R9 r# L$ T( Q
5 i! d; p" i5 ~[root@yj423 /root]#cat /proc/mtd
0 G, V S4 O1 p1 @- o! [dev: size erasesize name
W c! M* F Q% C# X, V' Amtd0: 00800000 00020000 "mtdram test device"
* J3 e/ _) R8 ` p1 Imtd1: 00040000 00020000 "Uboot" g7 E" _! c$ o# j
mtd2: 00300000 00020000 "Kernel"& X' H3 {4 N" \2 A8 }3 ?, Q9 k
mtd3: 0fb00000 00020000 "filesystem"1 ~7 B" j& w' Y4 D; W" H" w
[root@yj423 /root]#cat /proc/partitions. s6 Q5 I0 o! A& ~2 e; u
major minor #blocks name+ g+ y% {. @; S% V
1 V+ |! k. h# m% ~2 \9 R) H: {: ` 31 0 8192 mtdblock0- M9 _$ e( P6 r( s* U
31 1 256 mtdblock1
' b: ^/ z2 v6 B3 J, ~7 B' _ 31 2 3072 mtdblock2
- t0 ]- X! c7 k: z 31 3 257024 mtdblock3
/ T. w3 a5 k( o, R6 n# l( n3 Q, M3 Q; g9 H0 i5 @6 }
. x4 z5 j3 \7 h
( ?9 I# n; Z9 q0 L$ V
mtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。
" H2 N) Z6 \5 c/ G
6 c# _0 i8 k% n1 U7 [! @$ j2 S所以第三步的root参数为mtdblock3,请留意!3 o/ C+ P) v3 q. S" s
* L9 [! g6 Y' o$ X5 k开始烧写,请注意烧写的起始地址和长度。% z% L/ s3 ?/ Q
7 `5 ?. m, G+ H6 s) B- Ktftp 0x31000000 jffs2.bin
3 V7 [6 L: q. N9 F. tnand erase 0x500000 0x0FB000004 I* K. B1 l* q6 A; W# r# z+ g
nand write.jffs2 0x31000000 0x500000 0x800000. |" D3 Y6 q' i9 x6 x
3 w# [) [6 M: e+ K" w3 b9 |* q
0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。
7 V% ~0 ?* R/ }6 N
% F; @9 i# a9 N) D' T/ A8 [5 M3 U" c4 W( i9 `# Y
; N" d( A8 h0 \7 J& ]% d
最后,来看下内核成功挂载JFFS2文件系统时的输出:
+ I. R; j4 k7 V3 _- B. X& W* c" D! b) x8 t; x: i. p4 L4 D" Z
......' R; z' H8 H9 a. W5 ^% |2 s
7 Y" c+ U \: } L
VFS: Mounted root (jffs2 filesystem) on device 31:3.
8 Y+ j- B, G; n( zFreeing init memory: 156K
* ]# o' _+ d8 ~: J$ q9 Ueth0: link down8 l. f& h9 I* g B. e& [% i
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1) ?" p7 N7 X6 R% }3 d, k
[root@yj423 /root]#" C* q/ Z9 H, x1 h) r6 \4 ~
7 P6 Y) {3 U. g. U/ h
' R* _% y8 [4 O
. K: |6 c2 K4 p* L4 h; X! E ^; d
# X8 c1 V( t- n7 J0 V |
|