EDA365电子论坛网

标题: S3C2440使用RAM来挂载jffs2文件系统 [打印本页]

作者: piday123    时间: 2020-6-23 17:31
标题: S3C2440使用RAM来挂载jffs2文件系统
开发环境:
) w5 q& i4 ]' S8 O( d: l
3 w9 Y8 z4 s0 Y& H3 lPC主机:Ubuntu 和 redhat 9.0
5 p; |3 E! d) D. N' G' u6 _/ F) g, R
目标板:TQ2440开发板,linux内核2.6.30,根文件系统为YAFFS。& `4 O2 l% L5 a8 J9 }4 s5 b* f- a: }
/ H8 V5 u1 e6 c$ `
0. 引言# ~4 ~, M2 x5 U
8 X0 |8 d& S3 U5 k' v" m6 X
    在yaffs2,jffs2和cramfs这3个文件系统中,只有cramfs可以作为loop device使用mount命令来挂载,而其他两个则不行。3 U$ R8 m+ X7 E" Q1 p% ^* E7 ?
- s7 ]9 u; H: D; ^' n9 Q  m) B
    不过内核可以使用RAM来模拟一个块设备,从而可以让jffs2文件系统使用mount命令来挂载文件系统。3 P8 W+ P# d7 B) m6 `
2 ]) [' I. Z/ `, ?4 T3 _& u( u
    至于yaffs2文件系统的挂载,目前还不知道有什么方法。 # b' y7 ~) r& J, ~

7 i5 O& ]$ t9 O% y    本文将对如何使用RAM来挂载jffs2文件系统做简要说明。
) l6 q# d, N* i" h, l6 {. R5 x9 [4 ?2 N: O8 @# |
1.  配置开发板Linux内核
8 H# I, `6 b  c. v! y  e( N. s4 g" a# Y- G% W
首先,打开test driver using RAM,这里将它编译进内核,而不是采用模块方式。下面的4096可以设的更大一下,这样能够容纳更大的文件系统。这里使用默认的4096。
8 p& N9 K$ Y& l0 B% Q. S
, K+ U" D3 t+ a( M' u% P
; N2 j* G' i$ {' w3 L% M8 b0 @- Z' F- d9 Z& E4 I
2 Z4 Y1 ^$ _& d5 z
其次,让内核支持jffs2文件系统。1 S( D* W5 w6 h/ F+ R9 y

! o* Y4 y/ B+ c ) y, m; x+ E, n3 s

1 U) d7 T$ p0 q( ^* @  l
% |: A$ L$ V" X0 g最后,编译内核。编译完成以后,重新下载内核镜像到开发板中。 7 E2 ^2 Z; o! ~0 G
6 J5 H( x0 [. H+ T- g8 ^" }( t
2. 制作jffs2文件系统
) r; I7 b9 I1 z2 B8 T0 j4 \( E# y6 W+ K  g
在PC机执行:
1 c  {  M$ A: U0 G& o4 v+ H' p/ ?8 O9 f* y9 r# V+ X
yj423@ubuntu:~$ mkfs.jffs2 -r ./jffs-dir-test/ -o jffs2.bin5 Q! n0 j! v8 l
yj423@ubuntu:~$ ll jffs2.bin
) S: A, \: |2 @9 e5 n8 k-rw-r--r-- 1 yj423 yj423 268 2012-07-13 17:22 jffs2.bin
5 @* v  H8 w8 t5 O8 i说明:mkfs.jffs2工具是ubuntu系统自带的。& P* `) S% r; z. v

& X' t6 ?& I% r0 S5 V  {  Y3.修改内核命令行5 P( r7 @; J3 {8 w3 @  v
# {$ P9 G! d& C( S
在没有使用RAM功能时,内核命令行:Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0) k) J6 s0 Z: j& `( ^6 I# ~
$ a, ~# d2 Z) j
分区表为:( f- R6 S+ Z" l; r9 }; S3 a) L
3 g  m5 S6 _7 e" }# l
major minor  #blocks  name& y2 N6 P/ W" S* a) u3 x: U$ v
  31        0        256 mtdblock03 r) @$ q- A6 I- }) @3 k
  31        1       3072 mtdblock1) w  ~3 V! s. m4 {$ u5 N4 _9 e1 d+ x
  31        2     257024 mtdblock2
1 I" {' R. G' J/ o  O1 h+ b
3 @% J+ z; M) I+ o0 |! u8 M+ u; s1 Z新编译的内核启动后,分区表如下:
0 k$ [% D& s$ J) E* c* l9 @3 A8 Z2 m/ Q$ |
major minor  #blocks  name; X+ D* \2 ]! |
  31        0       4096 mtdblock0      //4096是配置时指定的大小" ?; `/ K* p, R. q. l
  31        1        256 mtdblock10 D/ T( f, p8 `  p, z& S: R
  31        2       3072 mtdblock2/ j# y) R7 A! x5 s/ S$ j
  31        3     257024 mtdblock3
  V! `, E/ ~# T, m$ l
- j; s3 Q# Y# f! n我们可以看到,如果开启test driver using RAM后,mtdblock0将成为内存映射的块文件。原先的mtdblock0~1将后移,成为mtdblock1~3。而我们的内核命令行指定了文件系统在mtdblock2分区中,因此需要对内核命令行做出修改:root=/dev/mtdblock3。如果不做修改,内核将会panic,因为内核找不到文件系统。8 h8 h) v0 _8 W* H. N

1 L# `% [5 q# a4 [) W  U# J9 T4 [2 @; k3 r. g# b+ ]* }( V& g
6 n4 k5 L# y4 i6 _6 ?
4. 挂载jffs2
0 A1 n2 G5 J$ c0 k, i- T  h! v/ q8 T
在开发板中执行:' t* ^- K" \3 ~5 [

- S% S4 N+ d  ?% M, W[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0% H+ y( j! Y  x& R7 i! b
0+1 records in- o0 y" G; U9 A3 A# t' Z
0+1 records out" ]7 O+ W3 a. q3 C  Y6 D
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
+ }* {3 Y+ A; X# u  ][root@yj423 nfs]#cd /mnt/jiffs2/
& O+ g9 J" U6 ]5 E& J+ Z9 x9 X[root@yj423 jiffs2]#ls* I1 P; V7 u& a( s3 F
a      hello0 h) u' E5 r+ p: w& {
[root@yj423 jiffs2]#cat hello7 R( F& }7 M  L* l& r6 J
#This is a test for jffs28 r% U' z  u6 g" i- y4 X) C/ b

0 a7 d7 S0 @7 b现在我们修改下hello的内容,并卸除挂载的jffs2。# K$ s' R) O- F/ m! R

. _4 B' I2 F7 t. B: ][root@yj423 jiffs2]#cat hello
& p* K4 O  H) F; M0 g& n#This is a test for jffs25 q7 q, K" z. W$ u. k' t2 ^
#another test4 @8 t4 k$ B" i/ C: d; W8 e( Q

* u2 {" Q6 L3 A* V; U3 X8 ~& F然后,重新挂载,发现刚才修改的内容仍在
  O& _% t1 N# W7 u5 t+ s* s1 h/ A* C! Z) M
[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
; p/ p" O! h  p0+1 records in
  B; K9 L$ ~: J+ X8 P0+1 records out
8 s9 U- w, u9 a+ T$ X+ W3 s3 ^[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
* D+ D$ |5 E# l9 {0 C) K[root@yj423 nfs]#cat /mnt/jiffs2/hello2 J6 E, Q; x0 c" L2 {" h
#This is a test for jffs26 M! J* `  u# y, F% P  g; D- ^
#another test7 A* z- R" p; U0 Q9 m. @8 P

0 ^9 ^: k: K. g$ R4 O' l( u* ?
/ M! i9 m' i( |' n9 L% z但是,当重启开发板之后,之前的修改又没了。这个符合RAM的特性,掉电数据就没了。& d6 v$ w" g" {: |  `8 P
. t% s/ Y: G, |& d6 C- j
[root@yj423 nfs]#cat /mnt/jiffs2/hello
/ `4 R, ^7 e* ?#This is a test for jffs20 ~4 @3 `- R% D9 B0 J  b0 |& d8 R

9 U- q' v4 M! u7 h# Q
5 t# @" L; g5 h6 i: l7 m0 }2 v! r% t0 q

8 N6 `* e  B7 M0 H# V
作者: yin123    时间: 2020-6-23 18:57
S3C2440使用RAM来挂载jffs2文件系统




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2