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

ARM平台建立JFFS2根文件系统

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开发板:TQ2440
* o( b6 d! c. `4 ^) O6 @  s
6 }8 g+ Y3 G/ I- ?, D" D$ _) M内核版本:2.6.32  R( C+ K. j. N7 g
1 h) W, H  j7 k% i  v( z
Nand flash:K9F2G08U0A
  g0 ^# E2 W2 @8 _
) a. d" K, S( Y$ c* Q% J3 I本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:. o3 j0 O$ T# [$ I1 S6 ?" {

5 d  c) e9 j8 L; G* \+ Z# o8 a1.  完成使用Busybox编译出所需要的工具。
. _) I& E5 O; r8 m5 k0 A  h5 j/ W
: Z) d+ H, G1 F- K. _/ c2.  完成添加根文件系统所需的目录和配置文件。
( e* ]7 A% d* N7 S% V) t0 Z
! x8 f/ q8 f; o% u7 ]0 X/ Z3.  开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。
( c, X5 ?/ i9 N. n, s
( z% _4 ~' j# b6 H- K, G9 Q3 w
( q4 f3 t9 x# L2 u
+ y; i2 j6 |+ d( b0 ^* \3 s% r8 X7 P第一步:配置内核
$ N. ?+ D* ~+ o1 C+ }& B- ]' I. R" X$ S* e
选择JFFS2文件系统:
! t% m  Q' V8 H+ s% @
( B; Y$ m* u2 ~4 D : Q0 y' i8 z5 X

3 }2 I; x9 K) F; m. l% k3 _* S1 c" ?: v  T- W- Y9 l
' O' z1 X. K* w' I/ q
禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。& C4 j* u% w' b* e/ i0 w: P
2 b# y' b+ u/ z+ k

7 I# r7 P, b1 z0 ?$ j( R
$ Z! n* F$ I- |9 K4 A% Q% B7 B; v9 b
第二步:编译文件系统4 K; B7 p9 Y1 d! @; }! l

8 j, Q" j8 k# Y& j) @使用如下命令:
! t/ ~4 D1 x: [2 Y
& w3 `- J/ R% `2 R# p! A. G1 Q9 Vmkfs.jffs2  -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin
& S/ H5 o8 U) C4 N4 l- g  I4 _- F+ a. f8 ]/ k9 S( y
其中,2 P+ z( y2 A7 |& N: u
: s. L0 d4 L  T/ _: a8 j
  -s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
# h* s' d: |+ c2 [% V8 N7 K2 t5 ]8 J6 x9 f; \, R5 b
  查看手册可知其大小,: M* q: W1 A9 D. x
6 C/ h9 F8 F/ Q' A$ J( q
+ x% m3 k8 }2 `+ N% |% e

0 i3 K7 W0 g! Y3 b! @
  R. A2 L; N: }4 L  页大小=0x800 = 2048Byte = 2KB,& H$ e# y( d5 k9 s2 K( ^$ M

  q7 D- J! u& J, D3 t  块大小=0x20000=131072Byte = 128KB。
" O0 a, [* x, ]3 L5 N) @3 t/ |2 H3 Y  X3 S
  -l 表示使用小端模式..
, D: t. y2 A2 X+ {+ `7 M4 ^$ O) O% x
0 L% C0 H" f3 M. `$ v: T  -n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:
: v4 S! b5 f6 b) R+ v; B
( E8 P% o+ P1 s: [  CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0, _3 r! O2 E4 a' R

! B- R  _) y; E8 Y, F3 ^  --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。
" V) l$ R' k5 z1 t. V# X/ T
1 Q$ H! a. H- z; b- t! H  -d 表示文件系统所在的位置。
2 \# N& u: Q( G+ b. }. O5 U
; h/ |2 \; L% @( L  O# [  -o 表示生成的目标文件的名字。+ \' F! p$ ^  l3 Z& Z5 q. H( a# h1 C
4 q3 s3 k9 ?7 u& s
执行上述命令后,我们将得到编译好的JFFS2根文件系统。
+ i3 x' z! D4 d8 `  [: A* {* ]. ]8 W. U7 b% Q  p

$ u* W! o& X/ ]) ]% T- F2 ^. @, n; n$ X: n! p) [. b3 F
第三步:修改Uboot的内核命令行
/ V( P+ }  i* A( q, Y
2 x! C8 K4 [, Z$ {8 N& n2 H+ U此步的目的是告诉内核根文件系统的类型为jffs2。
7 h8 y; D9 B8 N$ a4 M1 }! p, M( l
. Q3 p# @- x) J% v, B" Tsetenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 , F! Z& r& t, P4 i2 L
# Z# c( b- o5 o% [$ t0 c; x0 `5 b- u

3 J) C! k( j$ v# B" Y0 z: v/ a! E
第四步: 烧写JFFS2文件系统至nand flash 中
. ~' X% j/ y2 n8 z+ P' l
/ E0 l4 @9 F% T$ y) S6 [首先,看下我的分区表:
1 f( J  Q2 ~( F- ]% F
, [% E5 x# r% E* H[root@yj423 /root]#cat /proc/mtd2 w  d' K9 ^/ p
dev:    size   erasesize  name9 d7 |0 i% P% @
mtd0: 00800000 00020000 "mtdram test device"
$ c& {  d1 v- b6 ymtd1: 00040000 00020000 "Uboot"& Z2 W8 s$ i# A5 V* [# q. z
mtd2: 00300000 00020000 "Kernel"
5 |. l- @6 R- H- m: P/ E  x5 Ymtd3: 0fb00000 00020000 "filesystem"; e5 p5 m/ r& C+ Z* w* [
[root@yj423 /root]#cat /proc/partitions
/ e; s2 ?: t% \% k! nmajor minor  #blocks  name
4 }1 E! e$ s  \
/ u3 L2 C  J! ?& G6 k9 f" K  31        0       8192 mtdblock0
$ t" V  w$ o  p9 e7 W- j0 [2 U  31        1        256 mtdblock1* x2 g1 {" @& _7 ~  n
  31        2       3072 mtdblock27 p; }& |* D# Z/ _
  31        3     257024 mtdblock3, K1 M. l$ `: c- }$ y' I

- f/ c2 k8 a( A# a" i1 {
" W0 B% L6 l# S! \
& }5 h# E- u6 L& ?/ zmtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。
) ~- X# U2 K* U0 o) E, Y
! }# @1 x* j9 m7 s0 x  T, s所以第三步的root参数为mtdblock3,请留意!, f, B7 U7 B* ]
- i. O& ^) n* T% B
开始烧写,请注意烧写的起始地址和长度。# ~% M  h1 Q* J( y

+ u% {5 M( l. a+ H) b( G0 {tftp 0x31000000 jffs2.bin% m2 K& k- u) I: s8 r" f
nand erase 0x500000 0x0FB00000
/ }* a, w: Z* q9 m& Vnand write.jffs2 0x31000000 0x500000 0x800000
9 L( V* Z- F1 Y: {" E$ \4 {7 `5 o8 B; O' z+ I/ \
0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。# G$ ^* J* A$ y

* L7 O" j7 m/ H# _; Q
' F; U4 Y8 E1 H) l  [* B9 x8 }
* c  I. x( v! n7 C% @最后,来看下内核成功挂载JFFS2文件系统时的输出:9 s. r2 U; ^2 ?6 q; h8 M; N

7 G$ ?( f( Y! u  }6 M( r) z( i......
: d# \+ A" [/ r8 b: p# Q
8 m+ p% g3 q/ `1 N5 ?4 U( ^VFS: Mounted root (jffs2 filesystem) on device 31:3.& @4 h6 G) @, X0 {- G
Freeing init memory: 156K; b8 d0 E  ?9 G4 V- U" t
eth0: link down4 L5 `" K* i' I( t
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1) Z9 f. u. Q& R" o
[root@yj423 /root]#
: @5 ?$ X" A) q: {. z+ G
1 e' v* r& Y+ c" X8 P9 w0 k7 X4 E- U

/ ?$ `# j# N2 _( b' X6 Y) R, a6 Q8 {& }9 L7 h4 Z

该用户从未签到

2#
发表于 2020-6-9 15:25 | 只看该作者
ARM平台建立JFFS2根文件系统
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-26 01:30 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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