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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开发环境:  W0 X7 Q. E' b  H
+ [: x0 ?; o# Q* L, h+ D, E
PC主机:Ubuntu 和 redhat 9.0
# P4 n  R6 \% M8 s6 p& f& a
/ h! e' ~+ \  G1 z6 ]( M8 b; \目标板:TQ2440开发板,linux内核2.6.30,根文件系统为YAFFS。
9 e3 f" T! n: z+ w0 [1 i5 b
3 e2 Z( ?+ H/ H! f" l0. 引言
; H6 E  a5 w; c3 u0 V3 }, [
* i+ S3 Z; e1 a9 [$ s/ [    在yaffs2,jffs2和cramfs这3个文件系统中,只有cramfs可以作为loop device使用mount命令来挂载,而其他两个则不行。2 F* O4 @# @0 \* L# D: \2 k
8 e: h" o. B% n7 ~
    不过内核可以使用RAM来模拟一个块设备,从而可以让jffs2文件系统使用mount命令来挂载文件系统。
8 {; J5 Z8 @+ c) N- C. Y+ g3 C5 R0 B. K/ n+ e- E( v7 I
    至于yaffs2文件系统的挂载,目前还不知道有什么方法。
3 ]( K1 E. b; V6 s( n" _% r4 P! }. Q( K2 g3 ]/ X
    本文将对如何使用RAM来挂载jffs2文件系统做简要说明。, `# X1 R: S" F& u5 }

+ o' D" }5 s) v2 R$ z/ Y1.  配置开发板Linux内核
! I! r- R7 k! ~6 l. u/ I- v+ F/ k# x3 ]- G, B* ]% h$ Y
首先,打开test driver using RAM,这里将它编译进内核,而不是采用模块方式。下面的4096可以设的更大一下,这样能够容纳更大的文件系统。这里使用默认的4096。
9 L: B0 m1 A; Z5 A4 {% v  I( z  |4 g% O
, M1 M: |7 V, w# v  _

8 o+ Z+ m9 A7 B+ X2 r" ^; X- U: A7 i; G& P& [& H9 X+ }/ @
其次,让内核支持jffs2文件系统。
" `, n0 R6 [$ k. k* S' }  B9 b' g6 f
$ e* i, u# m- F2 O$ N' h* d# y/ V
1 Q7 v9 @8 ?9 J5 {! E6 @$ @

5 f7 m6 r4 |5 S! ^  h最后,编译内核。编译完成以后,重新下载内核镜像到开发板中。 5 n4 i% a/ j& ~8 c. ?2 Y2 B
" P$ `+ h3 t+ W) A" L
2. 制作jffs2文件系统& v* K3 l. d, e6 r! m& I- E. a8 J

- p# n# J- b+ s$ J5 J- W在PC机执行:+ U1 K5 ~& C3 `0 F2 C- z

, l- @! {+ O$ s# l" ryj423@ubuntu:~$ mkfs.jffs2 -r ./jffs-dir-test/ -o jffs2.bin
$ _  `' r: S8 F  A* w' f& a8 |7 f8 h1 cyj423@ubuntu:~$ ll jffs2.bin & E. q) I% e9 B% V3 Q
-rw-r--r-- 1 yj423 yj423 268 2012-07-13 17:22 jffs2.bin7 l$ x/ `9 x0 \! X* j
说明:mkfs.jffs2工具是ubuntu系统自带的。
6 @; g1 y! R! M1 ]/ c
9 Q- a' p; i; c3 K4 S% _' p/ {2 X  Z3.修改内核命令行
8 q# ?) I; d9 R. U+ [
! T! T6 R" W$ v) N$ s' t在没有使用RAM功能时,内核命令行:Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0. f9 ~* E' }; v# x' y
/ r0 C- u' w( G
分区表为:& P) L' l( \7 Z

3 ?) }1 G6 H5 d# A+ kmajor minor  #blocks  name" S/ X- _# X7 `$ |0 p. e* z' U
  31        0        256 mtdblock0% x: R, Y' H. m/ q2 g. A
  31        1       3072 mtdblock1' b: j6 a8 ?, i: e
  31        2     257024 mtdblock2
* S/ H' D1 a& j! N% \
/ j" L- C2 _) }( W- o新编译的内核启动后,分区表如下:
: D( ]; _; d4 S5 W- v" k8 g' l* A5 ]3 T
major minor  #blocks  name: y; L) p+ \: H8 X5 F& N; E, o
  31        0       4096 mtdblock0      //4096是配置时指定的大小& y$ C6 E! E+ p  }
  31        1        256 mtdblock1, n( _7 {7 F" p" q
  31        2       3072 mtdblock2
4 `3 ]  E) u# e$ W- a: B  31        3     257024 mtdblock3
2 t4 l* L8 C/ K3 C8 d. Y, }
. [$ O, `" M: a. A: g; D# N" g7 B  }我们可以看到,如果开启test driver using RAM后,mtdblock0将成为内存映射的块文件。原先的mtdblock0~1将后移,成为mtdblock1~3。而我们的内核命令行指定了文件系统在mtdblock2分区中,因此需要对内核命令行做出修改:root=/dev/mtdblock3。如果不做修改,内核将会panic,因为内核找不到文件系统。; u" \9 S- m' I, A5 ^$ j: b

* D- D3 G) c( q$ `0 ~% C* I; r" n! e/ |: k& t# t
) R- N- o+ u$ X0 c2 j0 o0 u* a$ y- _
4. 挂载jffs2
. v9 h2 y. C3 d$ G5 I3 \1 r% K' y# v% X4 U+ r; m9 }2 G
在开发板中执行:
4 M- y& l! K( ^$ O8 [. _+ N) A; }* D! a+ D) y
[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0
+ Z8 c3 N1 u* }9 J8 V1 C' y  {( W0+1 records in
4 C, j( j+ K+ g0+1 records out
1 q3 v1 ?9 j+ W# S) J; F8 d[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/- }( J+ g& ^& F
[root@yj423 nfs]#cd /mnt/jiffs2/
" g5 L: U; g0 P2 l, H[root@yj423 jiffs2]#ls& `. _; i0 ~, K( n
a      hello( R2 q- L/ n+ ]* Q+ v" d
[root@yj423 jiffs2]#cat hello
3 F% c: M9 {$ X#This is a test for jffs2; k# h, ?" k7 Z8 E

: L) @3 F1 u. H; X% N现在我们修改下hello的内容,并卸除挂载的jffs2。; N$ ~0 r7 S( ]7 H
2 F6 t$ Z- \& H' N: ]8 R
[root@yj423 jiffs2]#cat hello# G2 x; h& V1 j" a; |$ {3 f, s; B
#This is a test for jffs2
3 `/ h& x7 J9 I- Z! F( p#another test
7 c: ^# n& N- {; r  y( @0 }# ~9 ~2 j
然后,重新挂载,发现刚才修改的内容仍在. K. U+ S5 a, s% q; }
/ J# W4 s9 L2 m* d, H- N' r% u, \
[root@yj423 nfs]#dd if=jffs2.bin of=/dev/mtdblock0) H  i! z2 c+ b5 _
0+1 records in7 _9 r0 }# d& l
0+1 records out
) T# ?2 Q! N% D[root@yj423 nfs]#mount -t jffs2 /dev/mtdblock0 /mnt/jiffs2/$ t9 n2 H$ f# j5 K- s, j5 x
[root@yj423 nfs]#cat /mnt/jiffs2/hello( K$ a  ?2 N# e: E  `4 L* P/ T
#This is a test for jffs2
4 u1 m: i0 R# G0 Y) G#another test& ~% H+ q6 w4 e! n* v0 e6 t2 h

% T- ^1 m* M8 g( Y3 F) @2 i6 ^4 g$ y5 |1 F
但是,当重启开发板之后,之前的修改又没了。这个符合RAM的特性,掉电数据就没了。. |, m7 Y( W8 Y" F% t' w

$ o9 J& x' ]& s6 P  u' s) F[root@yj423 nfs]#cat /mnt/jiffs2/hello2 d! X/ m7 _* _) p% l' A
#This is a test for jffs28 _& |$ s; `" J5 v3 n0 L2 H

8 o6 t* y7 \  S6 n! t9 ?9 K6 a& U
$ @% U# ~6 n; o1 A2 j% t
) S' s: q2 `- s! l( n0 F- H
' ~' b& D3 g! E- c
  • 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 21:22 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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