|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开发板:TQ24404 w0 S6 x0 f! F, K" _+ p/ [$ [
( r4 R. y6 x, B# B3 e
内核版本:2.6.32
+ i+ I/ L$ E4 k y2 b) K o
) i: c+ s: ~7 GNand flash:K9F2G08U0A
8 ^5 X% O! B; `+ A' n7 W
7 [8 M/ P8 c; d7 R1 s本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:3 c; N e( J3 X2 q0 _
$ y* ~ L$ K2 a b0 v: w1. 完成使用Busybox编译出所需要的工具。7 n" X8 Y; p2 v1 _
+ S+ w6 e; P; z' B+ ^2. 完成添加根文件系统所需的目录和配置文件。
/ C; ~ p; I3 k* {
4 v. l( d6 E- X1 E$ g# P3. 开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。; m6 h- t% N0 c$ W4 ]) R2 U. w
. E# }) o$ H" A1 z; f* [6 L: J' L4 K. \: q
O J0 R+ l3 D# z, K; b第一步:配置内核. V& D% O( h% Y% c2 _& ]
2 A4 F( b- {% [' C选择JFFS2文件系统:
7 a1 U J9 i# \; M
% b) M* w7 ^3 K, d# H
4 @7 \, G/ ^/ e- _! y1 J9 l
e9 b2 Z: X$ R7 V; u/ C
: T5 E& i/ ^3 M! y* m
, @' m d) ]( y ~" M6 V5 V0 {" t禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。6 a' R3 y* M. U2 }8 K: s7 A
6 e9 \+ H5 l3 G# [: r
# B; m+ h- E/ K9 [/ n
& H' C7 w" A$ t
1 u8 g- l' f/ k6 [3 ~' o! d1 k第二步:编译文件系统. P9 M/ h* B2 G
, n2 `" z" Q5 J, z/ C
使用如下命令: D* M, |7 I3 P) d% a k0 e+ v
: c* [0 m1 P# Y3 Q1 Q7 f6 C
mkfs.jffs2 -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin, j! R, m; i6 U; ~: z
! `$ f" a- B( G5 G2 g4 U其中,; c3 E/ |4 ?' e/ f
( i# c+ x0 L" a Z: B6 X% j! J' [
-s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
- Y2 c$ b! |) p4 V+ `, \. F3 }$ ~7 Z7 |
查看手册可知其大小,! O( R: V% C l( c+ A/ U
4 m* q6 m( J4 y+ C( k2 b% }
" c/ o# j$ d: P2 s, ?3 v9 r
5 _# y: T0 ~2 N% L
$ d8 o2 p: @9 n, T4 h3 |: t 页大小=0x800 = 2048Byte = 2KB,
- U( x- l, M2 Z' ?" G/ E
- @6 G0 L5 s1 [" S7 f8 S2 Q 块大小=0x20000=131072Byte = 128KB。, o& l& p) n9 R! l% X' A& b- I7 \- m
# X7 L! Q9 ^8 |+ Y -l 表示使用小端模式.. r6 i0 t3 \2 ?7 n l. q# f
5 Z; G. C9 y8 s6 K
-n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:3 a6 ]7 @- t* c! |
; I8 [6 O+ J4 H0 e CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x01 w- Q: P& a( W- y0 }! H+ H
* l3 ~! a0 q: G) S+ C9 y( r --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。
% w1 Q% y, p$ e/ a
: G4 g$ b/ e$ P3 u -d 表示文件系统所在的位置。) L$ Z6 o# Y1 G; v! m2 e4 Q2 l
) ~: R/ X3 c' m+ M$ `1 }& S
-o 表示生成的目标文件的名字。1 D! I9 E ^; R" `$ S! e2 B& z! P
) X* |! g# W' m4 A2 n
执行上述命令后,我们将得到编译好的JFFS2根文件系统。. {/ C5 Y6 R( I8 w
* [9 h( n1 @& l/ Y& w
9 V7 [: ~/ D8 b; [. [% a3 T7 t' p
第三步:修改Uboot的内核命令行
0 D2 J$ t2 N5 G9 `' c
5 l& J6 \0 n# X. H( D此步的目的是告诉内核根文件系统的类型为jffs2。- u P5 z, x# h* @
& P: y( |9 _6 b! `% ]. S& s4 u! k
setenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 $ f% m1 }6 Z. d2 _% a7 `6 D e! q
; `) I; A) I! m3 T
$ K8 k$ `, A. [* N% K- Y5 Y- F' {; @: B1 \, H8 H
第四步: 烧写JFFS2文件系统至nand flash 中
: a1 g2 r$ {% _3 Q0 I. S2 v5 G
% N4 z4 S7 Q3 {; o首先,看下我的分区表:
7 h! M$ a9 q4 Z' {3 ]
# J2 T v" {6 ?9 ^6 J1 L1 A[root@yj423 /root]#cat /proc/mtd
+ i/ T0 X! K j0 |4 U! l+ edev: size erasesize name
8 P% b5 X$ A& ]9 R: f# e1 e0 R0 U! \mtd0: 00800000 00020000 "mtdram test device"* `- P0 K/ |1 N+ N) N1 Y* ?) `( B
mtd1: 00040000 00020000 "Uboot"
* [8 G/ Z- B2 W6 S E: y+ pmtd2: 00300000 00020000 "Kernel"
5 g! z) Z" r0 w: m+ Vmtd3: 0fb00000 00020000 "filesystem"
/ n4 ?9 [- D v: k; ~[root@yj423 /root]#cat /proc/partitions8 c9 {. a( r. t# F" o% Y
major minor #blocks name' g3 j) s/ e3 B9 x" f" E0 S1 p, x; B- c
) z1 ?/ f7 f2 n- g( x
31 0 8192 mtdblock0: L0 b+ B# ?- y" H# k
31 1 256 mtdblock1
" m9 y& G$ L% A. S( {* ~- o% ~ E& C, d 31 2 3072 mtdblock28 R; c* ]% H3 o
31 3 257024 mtdblock3: A/ M2 g% p2 Y# Q. _
3 d' E5 N2 U9 o) w2 o0 K5 B4 I- c& R; y4 j4 g# v4 H4 F% W3 w
/ t" W5 ]* X3 D) h imtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。. ?% U. g) G+ `1 B/ y: P$ c8 p
0 Z' M9 C. r% p
所以第三步的root参数为mtdblock3,请留意!
( I g# q6 B' h" W* I: p% R- O5 w+ A# i3 m. B6 k
开始烧写,请注意烧写的起始地址和长度。
1 @8 c3 a, d5 [) W" K- T
5 O; X! Z+ g/ I2 Y4 T& m9 Jtftp 0x31000000 jffs2.bin& o/ h9 w5 j5 w1 p/ ^" O5 l# ^( H y
nand erase 0x500000 0x0FB00000
. S2 C9 b" y: c/ e B% H9 m3 Knand write.jffs2 0x31000000 0x500000 0x800000
( v7 V9 M D- I1 ~* n' E2 {
$ X& f* s1 e. Z8 u- I0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。
4 G/ Q8 Z6 U2 k2 w0 Z3 u
: u# n/ I4 x, v2 [# C
, s7 o5 t, ]: b- b% z
+ P. r9 G$ {5 p. t. N' R最后,来看下内核成功挂载JFFS2文件系统时的输出:5 {: x5 k1 ?4 e$ h/ _
9 w' I7 H* H1 }9 I- p" y) E......
: V/ S6 [3 V# p3 R& }# A% L8 w8 G/ t8 ^
VFS: Mounted root (jffs2 filesystem) on device 31:3.
' t7 ^" C8 D" QFreeing init memory: 156K
2 T) a! F5 E4 m+ T* `4 \eth0: link down; a7 ?) x% I3 Q; V
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1) L% C/ R% n: ~) j$ M, ^+ q7 T. ~
[root@yj423 /root]## ]. l. ? q7 Y9 k. N
& q) U: d+ E- M# B. c9 A/ }0 G0 }. G
3 D! p' Z% [+ ?9 u/ s) u
) x1 s* f1 O+ k5 C
0 N4 a1 e) F/ s% F2 I, m |
|