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

ARM平台建立JFFS2根文件系统

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开发板:TQ2440
  g# M; G3 L) S% A, ?! ]
- r! i" L9 o( S9 R内核版本:2.6.32" Y2 f% `8 [( z5 z# a6 y% V

7 c* A& K& k  [6 V. y2 p/ l9 R$ b: vNand flash:K9F2G08U0A
2 h% L% h5 k/ N4 v
( v1 }) `6 ?( n6 p7 d3 E本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:
6 F3 S; b. R3 Z- S+ a
1 M( e9 P4 b# Y1 m- Z1.  完成使用Busybox编译出所需要的工具。2 P7 G" c4 N: G# P
! r' R1 L) o0 p: E8 ?+ q
2.  完成添加根文件系统所需的目录和配置文件。) C0 N) Z0 L4 D2 T' f7 _7 C
! Q, f" Y/ K  u& D$ C& _! k
3.  开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。( [* U2 a* n& \

1 F* Y4 X6 ?& {" N( U) B2 n+ W: q4 j0 H. ?+ r

6 K/ t5 X( y: e: |( \) _第一步:配置内核- |4 t+ k' c. O. N7 ]
0 k; u, Q3 h* z+ a
选择JFFS2文件系统:
7 A& l) q( d, X$ q4 Z4 G
- P4 ]& l* f. d5 ^! a, J4 m 1 s# k+ ?, Y) M9 r
% S8 L+ C# I+ }
1 ~+ i1 D( I" e0 O- _, X% v7 f' \! m
9 ?4 s# ]3 O% X* q7 @
禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。
' Z2 ~- R. b" K4 O2 D9 W* ^5 w7 m/ L! h5 j# [
. D9 l7 }* v- T

( s4 @  B+ `  T/ J6 w8 Z/ F1 h. _7 a( J' i/ }. D, C3 f
第二步:编译文件系统
5 O& ]3 `9 `+ i
3 y2 e3 c/ j# S7 q" r6 I+ T使用如下命令:
4 V: |9 ]! |0 A& V9 j6 Z$ j. G" `
mkfs.jffs2  -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin% s) W, H$ v2 u& P: ]- a$ C

( W2 H! T) i7 H  A/ s7 g其中,
8 d( c8 s. ?4 u! U7 q( M  g+ N. y* l# Q" l8 w/ p& Y: A- N2 A
  -s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
5 S/ D2 \. i; F5 [6 V# A- n" I: d& e! G: D2 y) _6 X
  查看手册可知其大小,9 |6 Y+ _8 q1 T! [8 P4 T

& }- z" V3 s5 y
& t1 H' O% |& w' u, D& Y
* }/ U# V% G6 D6 {! y% _8 i6 |
" t$ \/ w& s5 K6 ^! @% n( x7 I  页大小=0x800 = 2048Byte = 2KB,
" n8 s1 O# M- n% ]1 p3 N4 a$ j" I# Z! M9 G* j: {" N
  块大小=0x20000=131072Byte = 128KB。3 I( B/ f. _& K4 s9 [

. @! m8 v7 l- s- v/ g0 {0 M  -l 表示使用小端模式..
$ d7 A1 c3 u1 }7 A% h1 M- s8 c+ J( i+ m2 R8 j2 y7 J
  -n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:
' i' q* S' l: E9 H
; ]" @0 p& ?' E# z* r  CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0' M$ ?. r/ b4 `" v- J; u

3 X7 E, q8 {3 y  --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。
9 F4 c# V1 p1 \9 C+ i* ?% \5 k9 s7 B$ D. U8 q: O
  -d 表示文件系统所在的位置。
3 J: p8 y7 ]- ^( D
  s% h0 v( i2 |: p/ t  -o 表示生成的目标文件的名字。) f# q  w: z+ o$ E' k! P0 [% z+ K
- K. T# @3 S. b/ ?! m
执行上述命令后,我们将得到编译好的JFFS2根文件系统。# t5 U/ `3 n7 V. \
- z1 o/ X9 m; c: H; e" r: P/ B
8 I( A, j: {9 n: j

; d- }. m/ |# H. K3 N5 F& o. i第三步:修改Uboot的内核命令行8 _: {8 K( e- f# h

5 y5 H+ b- I5 `5 d7 e4 L$ m' D此步的目的是告诉内核根文件系统的类型为jffs2。5 ?- d" O2 p  W" M  B7 }, n+ ^

- N/ m) r) X1 u4 J: G. O% vsetenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2
3 g+ l& M6 w, Z$ g$ Z5 J8 N
( c& A3 f  T! ~& X( X3 w4 S5 K# O+ Q4 L5 d" {

8 k; s% L& x# P- X8 b& S第四步: 烧写JFFS2文件系统至nand flash 中
+ T0 a; s( M2 a% A0 ?! D: @
- X  ]' W3 V& z  R0 R4 L首先,看下我的分区表:
2 A& f. |7 x) i( z* C: ~5 a" w, n* |9 t& M- s8 |4 U
[root@yj423 /root]#cat /proc/mtd! M; p" G1 @6 q* N/ E
dev:    size   erasesize  name
7 Q7 M- z2 o. b; F/ l3 Cmtd0: 00800000 00020000 "mtdram test device"% b& m3 B: U5 J* G
mtd1: 00040000 00020000 "Uboot"
' r0 A4 ]; p% N9 o/ f( w- b3 Hmtd2: 00300000 00020000 "Kernel"
# N# T: ]& S8 Tmtd3: 0fb00000 00020000 "filesystem"
5 u1 m5 h9 p* s% v[root@yj423 /root]#cat /proc/partitions, p4 i1 |3 r, k& N9 C
major minor  #blocks  name  ]3 j# _6 R4 a: _5 V( z1 t
" }1 m) j! Z" `- P9 X' b7 E! J7 p
  31        0       8192 mtdblock04 z6 C" o% [/ O3 s" X/ ]7 N/ [
  31        1        256 mtdblock1! j( U- i8 y8 k9 q
  31        2       3072 mtdblock2" ?- P* Y- N( F+ y6 h6 Y
  31        3     257024 mtdblock3
( I( Y6 T, C: U. {0 e% I6 x& o( Z6 Q' u( a

6 b* F3 A0 G" Y- l' Z1 l7 N
. g0 A. p9 ?- [: t  O2 Mmtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。
+ g5 f9 n: N0 D; x  q6 m; @3 O
+ o9 U( ~" {6 ?2 p所以第三步的root参数为mtdblock3,请留意!
4 Q& v% N" [3 `) D; Z& p' Y
1 D% i# g# ^; T4 V; @* g开始烧写,请注意烧写的起始地址和长度。! l/ a5 w: J5 E7 v" Q
/ U' b5 m; L% L* k6 g
tftp 0x31000000 jffs2.bin+ ]( y: O1 s, _7 h# E' k
nand erase 0x500000 0x0FB00000
' C' G( \$ T, j: Dnand write.jffs2 0x31000000 0x500000 0x800000
% E, C" Z) j2 F3 b
$ c- U. C7 C7 X6 ?9 p0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。% G. `4 j9 {, h8 v

, j, d( O4 v" v6 P5 f: S1 ^. m  _4 U5 }* R+ K" j  S
8 i; u3 `% Z/ N% r- b% \
最后,来看下内核成功挂载JFFS2文件系统时的输出:
4 I/ v& H! W+ B# R
9 R9 x  L  J- v) j......
+ ^; I+ m! _, y# {; o- m7 ?0 ]6 I9 a& ~4 O$ L5 Y0 X4 y
VFS: Mounted root (jffs2 filesystem) on device 31:3.- H* N9 {3 V; H
Freeing init memory: 156K
& ?3 s) V1 p2 _& a+ R/ S9 geth0: link down
' Q! d! l$ \4 D0 e, ?& xeth0: link up, 100Mbps, full-duplex, lpa 0x45E1  T6 @& |- C5 k* A/ d
[root@yj423 /root]#
$ c. t9 r* e  {  e0 E: L$ T
1 U+ _5 o( ?& z8 Z& h# T$ u8 q9 c! j0 L9 y; @
- B. k# j0 y/ o& P  f7 p+ |" @

* ]1 u0 k; n* I0 B/ ]; P6 ?. `8 J1 x% F

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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