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

ARM平台建立JFFS2根文件系统

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开发板:TQ2440
5 z* T. A; A& y5 S6 z6 x6 ~+ F7 D, W/ ^' T$ h- q( c9 ]9 O" N  }
内核版本:2.6.32, B. [3 `; s0 s3 ]
$ H/ s5 l1 ]8 b) y1 ?' u1 j6 n
Nand flash:K9F2G08U0A' w7 s# B6 Z4 h+ j1 b: Y  a; }( S3 T
3 e7 w7 k1 H9 E- `* z
本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:
; ^; d: f0 Z3 j% R5 F' [; [2 _! p4 u4 `9 L- ~( f$ P
1.  完成使用Busybox编译出所需要的工具。! ^! [6 s; j8 Z. Q6 a6 f7 H2 D* ]$ U
" ~6 `2 g- s1 H9 V0 {/ J
2.  完成添加根文件系统所需的目录和配置文件。9 \  s: @$ o! |

; |3 _. q6 R2 B5 U1 M3.  开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。
% R- Z. Z; |* I4 g! V) Y
  u8 @2 m( |4 t: _' F" ^" Q
( l" T4 N9 [/ o8 @( |% R$ Z
( J$ p; M3 P( l+ ~* f第一步:配置内核
" Z# d- F& h- K& I! R- R* R8 b# f0 T: C3 ?7 x' r2 _5 _; n; `0 ]
选择JFFS2文件系统:
6 S( d$ e# [# W. M6 F$ w( X- u. ?5 F! u% E3 U+ U
% v; a/ D. n1 j, x9 Q

! S0 B0 f' R' B1 p0 T  ^$ [: w, z" E" J% b1 |, Z
- H4 k6 S) v% M+ Z+ H
禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。
6 S" a- F, |2 F, M, v7 t6 v& G/ H3 u8 t0 f; f. q! O

* p* r8 L, Z) j! k& S
$ w  E& A& m: r- w) w3 w/ R+ [& b1 Q2 a
第二步:编译文件系统! H+ K# n* P" v; L  s

6 H6 j: l0 F  E* U, d. G5 h+ q使用如下命令:& e, s/ `' l8 q: A7 \* y+ N4 n

  l/ h! }+ y! a  b# ]3 ]mkfs.jffs2  -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin( ?7 R- t& ]& S/ h4 U/ i$ D

, p! t4 }0 ?# Z其中,/ U+ x# D: y( S6 y* R" P, h( G
& _) F# F, w! L$ j6 }/ A% V5 \
  -s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
9 P( K/ j1 w. I4 Z: r5 ^2 {6 h. v5 R& J3 \4 h6 C; T: [; i
  查看手册可知其大小,
2 H. M' x: f1 j% z% p3 Q% k
4 m9 @3 Q- F- e* U% Y" a* r, Z $ K9 l% l. v9 b/ o

8 Y/ s" G" s1 A+ i. k3 i& B7 B$ S4 i, K' S8 j& o1 I: H" U
  页大小=0x800 = 2048Byte = 2KB,
, q" k. Q9 a2 s; A9 j7 q- `
/ }) H% y: a- D6 F/ p* B  块大小=0x20000=131072Byte = 128KB。# s* K/ _7 L( [) `* b5 r
  U  X2 C' i6 S" V+ K
  -l 表示使用小端模式..2 _7 e+ [6 `& w6 |: }- q. d5 z

0 B$ R  A' p8 D* b  -n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:0 u- p- `  V2 H4 u  \+ g0 d
. l0 r, L, r1 m% y+ n
  CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x00 Z5 L+ j7 p( \9 j

4 h: g+ h/ T$ u, ]( @  w  --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。2 B# t: \& u, a

1 L3 i" j7 V) z: N  -d 表示文件系统所在的位置。
$ }7 @( A6 D. F1 A. f( L3 x5 N. d/ \& R( I( d; l9 M
  -o 表示生成的目标文件的名字。. N: V; G0 `6 Z! j: {

. Q. T0 U0 U+ N6 k; V% g执行上述命令后,我们将得到编译好的JFFS2根文件系统。9 D) s" D" g5 N6 \$ }5 t2 p, ?
9 W, y) I! T3 \4 J
1 w1 a( O* f# I# z- r

3 j! q6 Y# u( b6 {9 V第三步:修改Uboot的内核命令行
4 A' `; q1 |8 T+ i0 L' S: F& q! k5 i; F; l. X& |6 t
此步的目的是告诉内核根文件系统的类型为jffs2。. p0 o: N$ c0 q5 ?
, }& Y+ M, T. e) w
setenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 ! _0 ~+ s/ W, b, M
. g! P/ ^0 X: f; b2 L  |& Q

8 `; t0 X4 {6 f% y, p2 ~0 V5 C
第四步: 烧写JFFS2文件系统至nand flash 中. p" w* \3 A! d' {
0 n5 O4 ]7 w1 J' K. j* P
首先,看下我的分区表:& @/ q- B7 M! R9 d
& @  k2 ?! ?6 B: K7 S
[root@yj423 /root]#cat /proc/mtd% T( w- I" o  w
dev:    size   erasesize  name  U$ a2 w: i6 T  P. d
mtd0: 00800000 00020000 "mtdram test device"; S0 E) N4 }. O7 V0 G" m! i
mtd1: 00040000 00020000 "Uboot": U9 G' f/ |) {5 `9 l
mtd2: 00300000 00020000 "Kernel") J- g% |! a! E+ g% Z$ k! q
mtd3: 0fb00000 00020000 "filesystem"6 d6 D. j: n' U- P
[root@yj423 /root]#cat /proc/partitions
" s2 m) H2 ~3 p- }7 Amajor minor  #blocks  name4 a1 Q8 t6 @. u, S! A4 T9 o0 y, R
4 |7 x, l  N( D) L! v$ P' Q
  31        0       8192 mtdblock0
" D# l. v) ~  ]6 d  31        1        256 mtdblock1" V( O$ G( k4 H. M4 w" d. I6 e
  31        2       3072 mtdblock2( I" v$ m+ j) I2 x$ a) I
  31        3     257024 mtdblock3
. c1 g/ L" @5 O( i0 O) z. w: @: S7 V3 ~/ ^8 G' H2 P
$ ~# A+ m! @4 C5 M
7 b* ^, J, ?3 f9 u) r
mtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。/ Q- h3 `7 `! K0 N5 a* Q: k& ]
3 g2 V4 @$ i1 F! L* ^
所以第三步的root参数为mtdblock3,请留意!4 J* h4 o* r# W# [3 O( w, _! M
3 `# O+ o% w5 {- C' |4 I: G6 }
开始烧写,请注意烧写的起始地址和长度。- l" `) g) a' \: p  E! e

. d5 h  u& \2 L+ g6 t' Q: X  Stftp 0x31000000 jffs2.bin/ M( H, F4 T' p* a) k
nand erase 0x500000 0x0FB000006 m( ^! _$ @& h* P
nand write.jffs2 0x31000000 0x500000 0x800000
5 K% H8 Z, ^& ]) q
  l7 s9 {4 ^5 g- m! P8 j0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。
% z" X* n7 O' k% \
! @6 f/ {& S0 j$ b# U% [4 d* P. o) @

2 c) y) h4 l/ p( E* S最后,来看下内核成功挂载JFFS2文件系统时的输出:
1 i& I5 j" r( I, B5 J' Z
) P5 C: ^+ T2 \& C......
; j) l- d. i2 G( y3 ?1 \
) e7 @  S0 g. V% OVFS: Mounted root (jffs2 filesystem) on device 31:3.7 P  a8 g$ f) g$ e5 g( K
Freeing init memory: 156K
5 F4 T, m6 y7 u- peth0: link down
% w$ d, `2 _4 \# b6 w% Feth0: link up, 100Mbps, full-duplex, lpa 0x45E1: n6 a* s0 n5 l; x% b- g" G
[root@yj423 /root]#; K5 `, k" R/ F) S& U
2 j7 v& q' }( J$ G5 s% h7 z# k
* J" F3 Z% s+ y6 l) A

3 S; E% ~; y- t5 J4 b  p+ r
" ]! t% y" H7 M% N- c

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-27 03:14 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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