|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开发环境:
/ K6 C$ A# }- K5 {5 q
* r+ {5 o- z. cPC主机:Ubuntu 和 redhat 9.0
8 S+ ]2 z+ g! t+ w0 P. J# }3 _* m7 ^- ~1 n2 K2 c2 n4 v4 V
目标板:TQ2440开发板,linux内核2.6.30,根文件系统为YAFFS。
- C! o6 r* y' N; j: l P* J" F: W: U% P# e# P$ e8 \
0. 引言+ j/ C9 S ~* }, }/ t1 D
& i$ ^7 a* c' }8 F. R& N! D6 {( B
在yaffs2,jffs2和cramfs这3个文件系统中,只有cramfs可以作为loop device使用mount命令来挂载,而其他两个则不行。3 m. k! y9 a6 U7 \
9 m$ e3 j: t' O, q: p' T
不过内核可以使用RAM来模拟一个块设备,从而可以让jffs2文件系统使用mount命令来挂载文件系统。
; ]; I" B" W1 ^
5 }3 D; z! ]7 z 至于yaffs2文件系统的挂载,目前还不知道有什么方法。 ^9 ] l6 C, c" n0 S3 P' H
4 W/ F& I0 p9 }$ U7 Z' X
本文将对如何使用RAM来挂载jffs2文件系统做简要说明。0 C" n" P+ I' x l) n6 T6 c% ]; n$ }
6 u( p. t6 l- V L }4 g1. 配置开发板Linux内核
* M. a3 ?$ f: ] t% N$ i s: Y$ Y8 x* Q3 l x3 D
首先,打开test driver using RAM,这里将它编译进内核,而不是采用模块方式。下面的4096可以设的更大一下,这样能够容纳更大的文件系统。这里使用默认的4096。
0 U1 Z- P5 {8 a, _6 T% @1 \" o; B C9 p" U
5 c# ~! Q% o; n! m6 w% U
/ }) a! H. b0 Z j' H: @
% d' f7 \3 X# ^ o其次,让内核支持jffs2文件系统。
. T$ O% Y) |' w/ a- l
' E2 _' t5 e5 Q; L' H6 g0 z
& E( E- A5 g1 D( i
2 i7 E. F$ }( [0 q1 g, ]' |4 ~& q) @& }. H4 o+ q+ V
最后,编译内核。编译完成以后,重新下载内核镜像到开发板中。 ! b$ o% R: J/ Y6 q1 J
8 S5 N: |* v6 k2 Z2 ]- Y6 I2. 制作jffs2文件系统$ q# w: X. B B2 s9 |
' q( G* U& I5 p$ E7 Y( n- |. a在PC机执行:
4 j' k" u5 q2 y! d5 _, T- Y* X
. U. v9 y+ g3 Nyj423@ubuntu:~$ mkfs.jffs2 -r ./jffs-dir-test/ -o jffs2.bin
+ ]" ]" d1 d1 N# iyj423@ubuntu:~$ ll jffs2.bin
, t' K+ U8 d' ^- S$ S6 D-rw-r--r-- 1 yj423 yj423 268 2012-07-13 17:22 jffs2.bin* R! s! m4 k# \; J3 u5 u
说明:mkfs.jffs2工具是ubuntu系统自带的。
5 V' l: R& P' |! Y0 j2 u/ W# I1 M$ T8 N
3.修改内核命令行
6 X( e7 X# t4 c; W) ^8 e: r+ x- e+ x& G' B7 I
在没有使用RAM功能时,内核命令行:Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
- Q4 D6 O" {. D' j) O3 r( _' ^, |" P1 s! X& N
分区表为:$ @9 A1 e* F6 W+ C
% y6 d f' t6 t! i* ^! S2 r4 T2 |
major minor #blocks name
4 s7 h$ U( T5 N, L, S. Q 31 0 256 mtdblock0
- r6 s. R% l o9 s) t V 31 1 3072 mtdblock13 ?1 S: X+ z! V4 {1 W# g+ E9 j
31 2 257024 mtdblock2$ P, N+ M+ L+ x' r1 m2 F
9 D- l; @ y. W新编译的内核启动后,分区表如下:1 p! C: O* E6 A
! x! |9 k2 q6 ?) Y2 {! `) j3 Z1 U8 z
major minor #blocks name
2 z; M/ L( U4 ?9 j& r, i* ? 31 0 4096 mtdblock0 //4096是配置时指定的大小
* ^& t# t6 N8 B% P% c 31 1 256 mtdblock1: @- q. k) T5 s/ ]8 t. v5 }2 ~2 Z( }% U/ t
31 2 3072 mtdblock2! x( Z. B9 [2 s3 C( c% t( a
31 3 257024 mtdblock32 U2 D! F9 x8 X& w, r3 ^
0 A+ {) {( f. @. _8 A4 E我们可以看到,如果开启test driver using RAM后,mtdblock0将成为内存映射的块文件。原先的mtdblock0~1将后移,成为mtdblock1~3。而我们的内核命令行指定了文件系统在mtdblock2分区中,因此需要对内核命令行做出修改:root=/dev/mtdblock3。如果不做修改,内核将会panic,因为内核找不到文件系统。2 R6 [7 Q9 n. c) c. k% g( d
+ e) P7 Z: i! h1 i2 C# v2 D3 Y: I
8 ~8 f% ?' R4 y5 F6 Z V; n7 H5 o/ G
4. 挂载jffs2
% N! R9 N$ |& y1 ^+ A4 ]- e3 W/ X
在开发板中执行:* I& {6 \) K/ l' P
+ n# R! x/ Z9 i& I7 W9 H/ o[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
% a# ?' D$ c/ \5 P/ r: [5 f0+1 records in
2 C6 b: F, C8 v! A9 K6 \0+1 records out
3 p1 w8 @8 v, Y) q4 C4 l3 P[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
; j! O' A/ Z0 q* E3 g8 X[root@yj423 nfs]#cd /mnt/jiffs2/
5 g2 L7 z5 }3 k0 ` l7 k1 m[root@yj423 jiffs2]#ls0 z. F/ v+ ?" ~9 X
a hello
- M. ?6 r! X' t8 c9 q[root@yj423 jiffs2]#cat hello
* y* I6 r& f/ }2 b#This is a test for jffs2
8 o4 j, G1 y6 A* A2 o! e
. t d2 \% t: W% s1 a6 s4 c现在我们修改下hello的内容,并卸除挂载的jffs2。
+ J! h- o- q4 G, j4 p. b/ o7 M6 E7 x% t/ G* Z2 c6 L
[root@yj423 jiffs2]#cat hello
) B% X! e0 J- ~# C" v. q* M6 C" p#This is a test for jffs2
5 I! [7 m8 b8 Z/ i+ ^#another test7 n4 u7 S0 Q* l& v" T, [
8 S2 z5 T: C+ K; g然后,重新挂载,发现刚才修改的内容仍在
2 {# u5 q" x3 s6 h, ^
/ E% K3 i8 L5 Y; K9 Q b0 F[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0* b2 G+ [' l- h& o, W+ \
0+1 records in
. N$ s6 k6 V X2 N+ w0+1 records out7 S/ K5 t% T, q1 [
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/) q9 f! [5 b" x/ ^9 W& |: i
[root@yj423 nfs]#cat /mnt/jiffs2/hello
: n$ D& M6 I5 `#This is a test for jffs2 A% V* Y& j: V1 C5 ~& E7 O4 c
#another test% Y& j: t' u7 E7 F4 L+ Q
' A: |( s- e4 i, h/ f4 [. x4 [" A
: C! Y1 D4 v5 Q3 D
但是,当重启开发板之后,之前的修改又没了。这个符合RAM的特性,掉电数据就没了。6 q5 o4 n6 k" b2 i3 |. e
* P8 ~# @3 R+ x; I+ I
[root@yj423 nfs]#cat /mnt/jiffs2/hello
" y( y( ~% M6 h#This is a test for jffs2
) p4 t% r. ?1 e% ^2 B
( N; m9 A# z" @; f3 u5 \. G& H- `
* }4 O& k* Z- }# \
, y2 X8 N( `# O* }+ p: t2 s$ ?& Y e# u9 ~" V& s
|
|