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

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

[复制链接]

该用户从未签到

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

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
  • 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-10-26 18:40 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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