找回密码
 注册
关于网站域名变更的通知
查看: 303|回复: 1
打印 上一主题 下一主题

S3C2440使用RAM来挂载jffs2文件系统

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-23 17:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
开发环境:. W7 e6 R" G/ H9 |- J. K/ W
$ ~, ]$ s* g+ R  T) `/ p# N& [+ K
PC主机:Ubuntu 和 redhat 9.0: A( s2 |/ m- t3 K( y* Q
/ x; J3 f( w$ [9 m
目标板:TQ2440开发板,linux内核2.6.30,根文件系统为YAFFS。
9 O8 B) M: F' _; C
7 ~+ J4 P# `3 l: D. l' y0. 引言
1 D" x7 G4 `, h6 s. Z, q
% Z5 c/ J0 W. |6 |9 e% V" A& t    在yaffs2,jffs2和cramfs这3个文件系统中,只有cramfs可以作为loop device使用mount命令来挂载,而其他两个则不行。
& c8 A; a4 U# Q
. Z5 {9 {8 z9 O9 Y    不过内核可以使用RAM来模拟一个块设备,从而可以让jffs2文件系统使用mount命令来挂载文件系统。
- m0 x% R8 G6 U8 Q: P& e4 l7 _+ Q% L
    至于yaffs2文件系统的挂载,目前还不知道有什么方法。 . {; Q$ C- r: r+ ]( Q+ A
5 x# O1 q/ \4 I. @5 r$ e
    本文将对如何使用RAM来挂载jffs2文件系统做简要说明。" [# ?$ }- i/ F& P

: E0 K% v5 R8 L% c1.  配置开发板Linux内核9 d2 g  P6 K$ M+ ~9 G! X! R

! A7 F9 b5 Z0 G) u$ z7 h$ f首先,打开test driver using RAM,这里将它编译进内核,而不是采用模块方式。下面的4096可以设的更大一下,这样能够容纳更大的文件系统。这里使用默认的4096。
0 b! N8 c) Q0 R, a; u7 D3 L4 [% m3 s

* d+ o9 r0 j/ U9 s  R, W: M# a3 {, ?
' ], b7 r1 n' ]) c2 R! R+ O: c+ |& v7 |; j8 J
其次,让内核支持jffs2文件系统。! X7 P* a7 s7 ?3 ?8 p4 M
9 p2 f; D1 C4 Q

: `- x' s( l" a0 S3 J; f0 V: e
6 m4 v- P1 D+ _% U( M( ]4 ^
6 v% C1 Y% D2 _+ p6 L5 W  m最后,编译内核。编译完成以后,重新下载内核镜像到开发板中。 ( m% c' C! F+ I! d! g

$ r2 y+ A- E/ r/ G, c9 e" l2. 制作jffs2文件系统* m% F  j. x5 [, H5 F

. m" J7 q6 I) l在PC机执行:/ c+ }$ |3 B4 D/ C5 Q& ^
. C0 A, l  t' v2 Z! }2 }
yj423@ubuntu:~$ mkfs.jffs2 -r ./jffs-dir-test/ -o jffs2.bin' O( L: F! n- p- a; [! B$ z3 }: n
yj423@ubuntu:~$ ll jffs2.bin
8 n$ }. ]& |- e! U5 v-rw-r--r-- 1 yj423 yj423 268 2012-07-13 17:22 jffs2.bin
5 E1 q$ Y  p6 r说明:mkfs.jffs2工具是ubuntu系统自带的。( y0 u6 i, N3 k+ M
" L$ r- \) G, L
3.修改内核命令行
1 A% N5 @& d0 [0 X
: G& z' r) Q( q: J: T& S在没有使用RAM功能时,内核命令行:Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
$ @( D& a+ s: @$ q
/ v- ^5 z" n2 k! n分区表为:
+ n7 T: Z6 O8 r% f% {) P$ m. \: l* D7 {8 |1 R& R  q: Q# W
major minor  #blocks  name, `' j6 |5 p! \' E! d7 E4 |/ L
  31        0        256 mtdblock0. w0 I1 ?3 S2 k& }
  31        1       3072 mtdblock1
# z( I" R% s, L6 x0 f+ u4 Z, a  31        2     257024 mtdblock2
8 B% `3 V4 N9 j! Z/ m7 E; X7 d+ I3 _
新编译的内核启动后,分区表如下:6 T" f2 L  z" a+ L
4 E2 z3 f: Y" T7 I& C# h
major minor  #blocks  name8 p" v! k( `0 n9 e/ X  |. H% x
  31        0       4096 mtdblock0      //4096是配置时指定的大小
* U6 j" Z- P7 |5 C  31        1        256 mtdblock1
! T1 t: w$ @2 w0 O+ D  31        2       3072 mtdblock2
' K- m0 F" x$ e8 w" d0 p; c  31        3     257024 mtdblock3' N( @; j+ ~6 ~) M2 _3 k0 ?5 U4 ~

4 I; a7 V! P6 `0 B; Q, n我们可以看到,如果开启test driver using RAM后,mtdblock0将成为内存映射的块文件。原先的mtdblock0~1将后移,成为mtdblock1~3。而我们的内核命令行指定了文件系统在mtdblock2分区中,因此需要对内核命令行做出修改:root=/dev/mtdblock3。如果不做修改,内核将会panic,因为内核找不到文件系统。+ D" e' }# O$ D. t8 K. j( b  f
4 [9 k' [2 S$ @2 @0 {- Z7 I9 p5 t

3 K) S( g8 X; r1 r, s& t, I' W
5 U# X) _$ A2 d! A! G4. 挂载jffs2- z' r2 G% ?* J# E3 N9 m6 m& u, p0 d

4 n7 `4 `6 M/ z* a/ l9 r- Y2 @2 m在开发板中执行:9 w8 j0 i2 k1 v, E& Y( u
* T0 n+ _3 O: Q3 h8 {4 A
[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
7 R/ V% R# P. f, H3 c0+1 records in
: _7 R! R9 j$ f5 t0+1 records out7 i$ k; x" u" M
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/- ~2 v+ j# K) V& R. M7 h
[root@yj423 nfs]#cd /mnt/jiffs2/
0 F1 `8 `7 g  K3 d[root@yj423 jiffs2]#ls4 J/ o; v/ _! `3 p( W
a      hello) g+ v: Y8 y5 k' x+ z* q2 S
[root@yj423 jiffs2]#cat hello% L! _( x9 t' p7 z: z
#This is a test for jffs2
7 {. R, H6 y8 F
& H) }) C( w3 o) M% ^4 E2 {现在我们修改下hello的内容,并卸除挂载的jffs2。+ Z) F5 ^7 g" j( S5 }2 J

+ ~8 Y$ D2 b. H; i0 o( i, L[root@yj423 jiffs2]#cat hello
% {; j. U% M+ O#This is a test for jffs2
9 K  l& C7 @% v  Z1 M) H#another test
2 L5 L' \# j; ?) W( ]4 O, @# A1 h: m" ~, ?- z, O
然后,重新挂载,发现刚才修改的内容仍在
/ x6 m7 D6 z, h
7 ?) I, b4 L7 ]* [7 [  A. m[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
1 M/ Z' F1 @% {4 y2 B5 K0+1 records in
/ T" _6 R( l6 M+ S0+1 records out! m% |" F  S. @+ x* l5 Y+ |
[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/
  }- b2 x. e3 z1 N7 c[root@yj423 nfs]#cat /mnt/jiffs2/hello1 w8 i# _; g4 A# F( {
#This is a test for jffs2& R6 ~" R3 e8 p% o
#another test3 {2 o8 ~9 @' ?& _) }7 F- X

" {' f4 H* K( e- U5 n2 o2 l1 e) R& B1 l6 R0 V7 q
但是,当重启开发板之后,之前的修改又没了。这个符合RAM的特性,掉电数据就没了。
5 M/ J8 y6 ?6 J0 b' N
# b7 L) Y! S6 B/ X; \+ a& \[root@yj423 nfs]#cat /mnt/jiffs2/hello
5 X- u4 M  P0 V8 I  _$ ~7 k#This is a test for jffs2
7 L( ~0 v3 @6 `5 h. M/ f! O
: w) @# L$ Q3 B6 M; Z5 n1 M, P4 Y  r  ]6 _+ O) H% Z. }
* \% r+ O( l+ E# c( g" ]

- l* K- Z9 ]) D2 `! J, u, ?. |
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-6-23 18:57 | 只看该作者
    S3C2440使用RAM来挂载jffs2文件系统
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-25 20:06 , Processed in 0.171875 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表