|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开发环境:- ^* c) g9 s! Y: Q% n. h& u$ q
' U0 F0 _# H, \: n7 ^, HPC主机:Ubuntu 和 redhat 9.0% f9 j& A' u& W, y& F
3 I) R, Z# ^& a8 R! S' `/ G目标板:TQ2440开发板,linux内核2.6.30,根文件系统为YAFFS。
0 k: ~1 o& |0 H9 x, m9 S8 U
: p, }/ s9 X. Y3 G, [0. 引言
2 t5 J. _: n3 t* ^7 L1 X
9 m4 |* |/ L' _ 在yaffs2,jffs2和cramfs这3个文件系统中,只有cramfs可以作为loop device使用mount命令来挂载,而其他两个则不行。
1 j3 s% \6 q/ r1 b/ D# _' ]" y% `
7 {, `; h3 L* z1 v! N* \ 不过内核可以使用RAM来模拟一个块设备,从而可以让jffs2文件系统使用mount命令来挂载文件系统。/ F( p5 c5 k4 V6 v- l! k4 `: h
6 `/ ]9 Q2 r: @8 a2 q 至于yaffs2文件系统的挂载,目前还不知道有什么方法。
c! }2 [) k3 g& h/ U* X# J4 `9 v: }, K$ U+ Q8 Z5 \) x, G# D
本文将对如何使用RAM来挂载jffs2文件系统做简要说明。
/ P& L( y+ ^0 x, C8 I9 N
8 u3 K) M; e2 F4 H0 S1. 配置开发板Linux内核2 R) X/ K6 A8 B% g" n+ Y( B. ]
4 |3 J/ T7 e# C6 _
首先,打开test driver using RAM,这里将它编译进内核,而不是采用模块方式。下面的4096可以设的更大一下,这样能够容纳更大的文件系统。这里使用默认的4096。
6 m. Y8 l* j7 s' G! w5 k' w; \
, r" G$ }7 V: j
, [+ [6 c9 T1 R* [- P: k7 W/ q1 g9 Z- q+ I( K8 ^" Y
* P) {+ A8 p& E$ {" q7 @
其次,让内核支持jffs2文件系统。
3 R# p% v! u3 \& o& _( f9 x- U. R( D0 I+ n
* h% Q9 I: z/ l$ P# N% O2 k @7 P- f T) A
* V# B/ R; E, P+ V) m9 a最后,编译内核。编译完成以后,重新下载内核镜像到开发板中。
0 h& w: ~# z f) D' x1 T. r% P5 f5 G5 o* q: l# q) v- n
2. 制作jffs2文件系统
9 a8 v% K# ]0 |6 ^% \/ k3 y' X* U6 e
在PC机执行:0 c. A; d' b6 s( w6 O4 ?
( Y8 r p/ B/ e% H, T! Qyj423@ubuntu:~$ mkfs.jffs2 -r ./jffs-dir-test/ -o jffs2.bin7 Z* s5 J6 L9 W7 ^7 a7 a8 Y5 w
yj423@ubuntu:~$ ll jffs2.bin 5 V% b: V& r% m% @0 a- A, R
-rw-r--r-- 1 yj423 yj423 268 2012-07-13 17:22 jffs2.bin
1 e+ y% q6 s4 D7 F/ ~, G' y" a说明:mkfs.jffs2工具是ubuntu系统自带的。* y% i* g) x: H$ P
7 x2 Y. c8 F4 p2 O0 w5 q
3.修改内核命令行
9 S, U0 w" P- I3 r; u3 K" m
5 c! ~- P0 A! q* W& D# l在没有使用RAM功能时,内核命令行:Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0$ q& L$ E' @( x; T, ~' h" a& P
# X; L& f+ }# [, B3 H分区表为:6 d4 z# e: B. m9 P7 P2 z# ~" A
% C. H' ~) `2 J: }
major minor #blocks name1 z, [# V; q, f4 }
31 0 256 mtdblock00 c/ D# |9 o j3 R! t
31 1 3072 mtdblock1
4 }7 G) Z. O. K L 31 2 257024 mtdblock2
( {: P7 i \2 W# l: G# a& V* @ ]* n# L; Z6 ^
新编译的内核启动后,分区表如下:3 t; F7 U" h3 k2 S; k) r3 \! G
- o/ L- O a& A# ~8 y Lmajor minor #blocks name; v6 n2 L+ ~" t/ O6 v& |
31 0 4096 mtdblock0 //4096是配置时指定的大小& W, y0 ~. K6 B0 V; L6 ?" [4 w7 N
31 1 256 mtdblock1
6 s5 t7 b- b# x9 [/ D; L 31 2 3072 mtdblock2( @# y- M" ~* i4 k, [. R5 K
31 3 257024 mtdblock3
' ?2 q- E2 e4 { p; q6 ], f# u5 r7 r' u* k4 _, I" t+ z
我们可以看到,如果开启test driver using RAM后,mtdblock0将成为内存映射的块文件。原先的mtdblock0~1将后移,成为mtdblock1~3。而我们的内核命令行指定了文件系统在mtdblock2分区中,因此需要对内核命令行做出修改:root=/dev/mtdblock3。如果不做修改,内核将会panic,因为内核找不到文件系统。
1 I* q S( ^8 j# }% ?: p
( x+ M1 _7 ~1 \9 q" W' ?/ o5 n, A& C- _: @- \
) l. y9 _$ P/ B+ c
4. 挂载jffs27 X' e( z) A( V' U( S
- r0 R" g+ T! v7 m5 I在开发板中执行:
" ^1 B+ K: ~* y4 J9 N5 k$ _/ m
[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock08 t; j7 k8 A4 P7 H+ L2 C
0+1 records in$ b4 a Y8 Z0 D
0+1 records out) n# c2 V) A, x! W2 g
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/5 o# W- Z2 ]1 d% `9 F b; s$ Z
[root@yj423 nfs]#cd /mnt/jiffs2/. B5 v7 _ u, V$ K6 D
[root@yj423 jiffs2]#ls1 E" ^- n4 `5 }/ Q' b* A# @
a hello7 D$ j; G# ^! f" e W4 w
[root@yj423 jiffs2]#cat hello5 {/ W# [1 F2 H5 e
#This is a test for jffs2+ c; b- R9 x0 b
( Q; F5 D% c. ]" h
现在我们修改下hello的内容,并卸除挂载的jffs2。" k) g, T8 z1 [( u* l
# K' P* H8 T$ n- q$ s8 W6 }
[root@yj423 jiffs2]#cat hello
2 n* m f/ j( }5 _2 C#This is a test for jffs2
1 `8 r5 L( U8 }+ |, u( x) I! H#another test7 {. s9 ~3 z; s4 P. r7 d2 c4 r
& j* K1 p; N' u6 c# e0 _+ y" q
然后,重新挂载,发现刚才修改的内容仍在: R$ U# `7 m Q
$ H' x0 s) d' m& o[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
/ K4 d) J8 y: M7 C8 x# M0+1 records in
# @* O2 \5 M/ O8 t5 H0+1 records out4 u7 Y5 T3 w d) D
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
( |3 Y1 J0 G) H- C$ _5 L[root@yj423 nfs]#cat /mnt/jiffs2/hello( A5 G6 Z) H! F# T5 G, ^8 `- V
#This is a test for jffs2
2 u( Z, K: U* Y. h E3 N) J. K2 x F#another test$ x9 k9 ]( S8 t
: X5 \6 q' n, b; x. m- k
' V/ V# i" d7 w9 i# D8 c但是,当重启开发板之后,之前的修改又没了。这个符合RAM的特性,掉电数据就没了。% y" i3 U1 e& G
& `9 l/ Q# b$ Y/ v[root@yj423 nfs]#cat /mnt/jiffs2/hello) M7 F# X; n$ p* I; F
#This is a test for jffs29 a: s) @% d1 r! r x0 }( U4 P
. y, ^+ I0 u, G
8 x. i# ?0 }1 h7 u$ t
. Z. [" y$ I( T# b: w
# v% _4 Q" D1 _% f |
|