|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开发环境:: w! Z" V# f5 M9 r3 h4 t* n, m
8 H9 W% W+ _: _6 `' EPC主机:Ubuntu 和 redhat 9.0
& X" P% T" r9 q: g& s: T! |% ^; F3 G' M9 O& J- T
目标板:TQ2440开发板,linux内核2.6.30,根文件系统为YAFFS。
/ f3 Z2 t* z; f
, P( K) O& q \/ ?0. 引言
# x9 ^! t0 X, y2 E @
4 l1 M* O/ L+ h6 i! l+ t9 F7 t& ] 在yaffs2,jffs2和cramfs这3个文件系统中,只有cramfs可以作为loop device使用mount命令来挂载,而其他两个则不行。
1 y/ _: h5 P I) ]( ^3 k5 }8 R7 W# [4 b8 i& k7 {4 R
不过内核可以使用RAM来模拟一个块设备,从而可以让jffs2文件系统使用mount命令来挂载文件系统。. ?4 ]) Y# b/ D7 [
& e" X0 H: X/ F; s' x! S
至于yaffs2文件系统的挂载,目前还不知道有什么方法。
7 `, X M( S- S* N1 G- O9 J. q" A7 a: F% a$ b: f6 `: ~. u
本文将对如何使用RAM来挂载jffs2文件系统做简要说明。
( B9 g& j' P9 s- q4 }) `0 O P2 R
1. 配置开发板Linux内核
7 e- @: v* p9 N5 [& b& F& m% l
. w' x* J3 a, ?; {首先,打开test driver using RAM,这里将它编译进内核,而不是采用模块方式。下面的4096可以设的更大一下,这样能够容纳更大的文件系统。这里使用默认的4096。- g" z5 k: l# t0 x6 S. t
* {% D7 J9 ]) @2 u& y$ T- s2 Y. |
) ~9 x9 E0 ^$ v& e: @9 u8 Y$ R+ p
$ H f1 B5 M5 |( b# d" b% A! j8 f' _# F1 c0 b& E; R" l4 |
其次,让内核支持jffs2文件系统。
( X) X4 F! m0 A5 W% }& ?% V w& T$ L I3 r
: E( n: W- B! g+ w. X+ z
3 T: _9 ?6 O! M6 b r, |
2 [% q5 l0 x' C% u7 Q最后,编译内核。编译完成以后,重新下载内核镜像到开发板中。 2 s" f% @9 Y! g7 l E% x. @/ H
9 M% Z+ J# o7 [/ t7 v' W# y2. 制作jffs2文件系统
4 o( j$ R6 M% u, F
# D. P) `8 M8 Q6 L在PC机执行:
3 p& I7 A0 s6 m m5 s
3 }6 R+ E# V% d; Kyj423@ubuntu:~$ mkfs.jffs2 -r ./jffs-dir-test/ -o jffs2.bin
4 x- @: ]% c! W1 ^4 d; Gyj423@ubuntu:~$ ll jffs2.bin
" i0 K7 B% B, I) O! B-rw-r--r-- 1 yj423 yj423 268 2012-07-13 17:22 jffs2.bin
0 ?8 S! k0 y5 H' X f说明:mkfs.jffs2工具是ubuntu系统自带的。
6 g* b+ Q! m) ~; ^7 S+ S$ i! q) B" m" [7 }! U
3.修改内核命令行
' e8 i7 p. i+ o/ K5 u2 h+ Y4 {- H; S& N( ^1 ~8 F# G$ g
在没有使用RAM功能时,内核命令行:Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
( N7 q; `; ~7 E) v* R7 ?1 r6 z: o a" \% B/ m. p$ u# H* i; b
分区表为:# D: M' c# f0 o+ c! ` X
) Z" C6 Z1 `% j! Tmajor minor #blocks name2 S" \' a/ w- t7 ]5 Z8 _3 {
31 0 256 mtdblock0
2 [6 [3 Y, w# S6 D 31 1 3072 mtdblock17 u) b, S1 F+ W" n% W' d2 B
31 2 257024 mtdblock23 D: F7 G2 @3 A7 ~! b! M) |
, E4 B8 E, g' o& b# M
新编译的内核启动后,分区表如下:
3 c; ?9 K. S) S/ U3 {& F4 P; N0 T1 k1 S7 _+ n1 d
major minor #blocks name
) s+ |! k' w7 a& f5 B' m! ? 31 0 4096 mtdblock0 //4096是配置时指定的大小
& D8 e+ F- K2 C2 H7 w! G 31 1 256 mtdblock1
! ?( S, I4 n; D9 i( } 31 2 3072 mtdblock21 r9 N" G! J) }' ~7 f# h' U& x
31 3 257024 mtdblock3
7 V, }9 a H. M2 f+ D
) W% B+ R8 t, m/ d6 [' H我们可以看到,如果开启test driver using RAM后,mtdblock0将成为内存映射的块文件。原先的mtdblock0~1将后移,成为mtdblock1~3。而我们的内核命令行指定了文件系统在mtdblock2分区中,因此需要对内核命令行做出修改:root=/dev/mtdblock3。如果不做修改,内核将会panic,因为内核找不到文件系统。
9 X+ x- {7 g! `9 ]/ r6 d
5 J# E3 }7 b; h4 r0 e3 \, A
; W1 R( z$ X* n( ]' Z# H \- v, }/ U2 a1 H
4. 挂载jffs25 V# { U& y+ Q: U$ _) \
, y+ M, I; e" ]
在开发板中执行:
2 h6 [9 k @* `' d2 f$ J: O8 g" J% r8 p H1 ]: H
[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0* F) |# D8 j1 C9 _6 @) B% z2 S
0+1 records in+ s- h! U$ Z4 x, T6 I) U9 z7 q
0+1 records out' u9 R1 m" }- a$ _# S6 ^- s
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
2 ] ?* e4 g5 A( A3 V3 r" E[root@yj423 nfs]#cd /mnt/jiffs2/
# t5 i0 i! J! A- D9 _$ h[root@yj423 jiffs2]#ls
1 U* z4 ]/ H) fa hello8 w; t% @) C, u. ^ C
[root@yj423 jiffs2]#cat hello5 @0 v5 e3 d3 ?0 q8 m. j
#This is a test for jffs2
0 R* h4 w3 q C0 z& E/ ^3 Q: [& l% P0 q: u9 N& `' Z
现在我们修改下hello的内容,并卸除挂载的jffs2。$ Y% S) ^! }( d; X, b" h
& F' n$ g' y& K% A[root@yj423 jiffs2]#cat hello
5 M+ p# q) R p% }1 @2 }% d5 p#This is a test for jffs2
* |- L% B$ x4 B2 z. W2 R# p#another test
; l5 M3 ~, c+ s; ]" N7 ]* x
. y O6 N2 d( l6 F0 X. M然后,重新挂载,发现刚才修改的内容仍在2 ?" ~2 s3 q8 e$ O5 Y# K6 t: n
7 e: C u, @0 I2 a: i[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
! O4 o2 u& G$ H' V0 [0 i5 W0+1 records in) H% B: V/ y) |0 \& s* Y" m7 m. A
0+1 records out) q2 y# M3 c8 X: j( z0 ?6 C( [
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
9 f0 C; {/ Z% a# f1 i# q[root@yj423 nfs]#cat /mnt/jiffs2/hello7 [) P- a/ r4 A( c; @1 _
#This is a test for jffs27 I1 E6 a& g9 t3 y
#another test
% C/ I0 s3 _4 }' }+ t: ^ C6 \' B9 }# H7 k
5 v* w" W, _. P5 w- U
但是,当重启开发板之后,之前的修改又没了。这个符合RAM的特性,掉电数据就没了。
1 y" K7 |( r( Y5 }' P( y. q8 t1 R j) e' ^1 [+ v
[root@yj423 nfs]#cat /mnt/jiffs2/hello
8 K( S! H* g5 Y% P7 J0 }& _! J+ ]#This is a test for jffs2/ b+ |. n$ i0 V5 }( j% P/ z; e
( L4 w: }$ I' A7 K5 }9 k
3 T% f4 j9 ~0 S \
' z/ i0 H2 U+ `, ^# q1 u
, r- K; O4 U5 D- D1 q4 K |
|