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

ARM平台建立JFFS2根文件系统

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开发板:TQ2440
- T! o% ]( T1 Z% p5 s# Q, l1 ]% h9 m' H3 N# H* o, E( N
内核版本:2.6.32; c2 s9 V6 r" x/ ?3 A/ D6 y3 Q

1 }" T: R% N+ U. B+ A. DNand flash:K9F2G08U0A( m* {4 q5 z/ Q4 l2 J

$ x- {+ z, y5 S/ c  V本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:* E" e! `5 e# h& W
0 ^7 I0 ?5 l6 h* U
1.  完成使用Busybox编译出所需要的工具。
$ x5 q) O4 A4 N+ R/ C1 p# G  v4 G1 \& v' A
2.  完成添加根文件系统所需的目录和配置文件。
$ r0 O7 W; `) W4 r% x5 I
9 }: c6 w- |3 _/ n0 R  N3.  开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。
7 E. C+ ^* Z+ E+ n# [# `# u+ T
/ c5 D; o  N  M, I' J
' x2 X2 n% k# j
# T, x, g4 z) ]* h3 I1 ]6 d第一步:配置内核
* ?! @4 X/ f" F, D1 z/ C0 f: k, X% d% T1 M* J, ^3 e* f& l
选择JFFS2文件系统:1 B" T0 k3 i; @, M, P$ o% v
: b( O  Q0 M1 ?$ l+ m. n3 \
/ E; [" g4 _. L$ U4 O3 ~
# S0 H6 z+ @+ c6 h8 _0 L. A8 u

% m0 @8 x8 |' w. H4 d  {, ]2 p! J# l( F: _: i
禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。
. B2 P2 [2 K2 U" m' [/ A0 E. ?4 n- Z1 y- @" N% ]0 b7 M9 n
& z. g) g' s, d8 o: v* @1 O4 Y
( I5 ^  x1 |2 ]0 l, x4 b- f
8 f1 G& E% c9 Z
第二步:编译文件系统
& H- E  h, w' @4 |0 i. F
6 `/ x# B- a7 s. Q使用如下命令:/ I' f. r: S1 ~* e( s
5 b3 v" p* z& q; ^" k6 R
mkfs.jffs2  -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin) C! x: g* E' o0 x( Q

7 U' b- i1 ?$ }3 i* g  `7 E其中,
3 {) [7 q8 T7 Z2 Z; G7 P* j8 L$ f: f+ F. C2 p' \
  -s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
* A" @& [9 E# ^4 j0 r1 {- I- s: I8 O8 [1 e0 O; K" E  J8 U
  查看手册可知其大小,! s& \3 ~1 q6 l. c& k: J

* x' W# {! V) B! D2 F# U# O# v0 ]1 J 7 G9 t" S/ j4 u: g+ Y5 S. ^: o3 O( a) s

, P! g' i8 `1 U" k' C- S. \0 V8 g7 H% y/ ~9 o! n& @
  页大小=0x800 = 2048Byte = 2KB,) g7 j- A/ z1 D+ [
( h; M! Y% y6 n0 m; D- [4 m
  块大小=0x20000=131072Byte = 128KB。8 Z5 m8 O& V( j5 @9 ^) I5 e
0 b8 X1 Z  `0 e: T) B1 \) Z
  -l 表示使用小端模式..
$ K3 P: a. p* k7 p; N7 r0 k8 X. s+ O( R
  -n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:+ l; X. H& w5 h. Y" x+ R- u
; ^, p2 R, I/ f& W4 P( i
  CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0
0 Z* z4 l" t, R) x! i: B' C! H$ b# l) J( y- y1 d! y; b4 q1 u
  --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。
, x0 L/ G% i  w, {1 E$ o9 w6 X, M- y* ~- b# k
  -d 表示文件系统所在的位置。* f  {% s# i; v" `  O

' A2 x: X5 n) Z1 [# r1 U  -o 表示生成的目标文件的名字。
% z2 K( G) B+ O8 b; v& ]* ?9 p9 v' G% s, J- A% Z
执行上述命令后,我们将得到编译好的JFFS2根文件系统。$ B" Z% r' V; W5 Z' @

& ]# n. }7 T  x& T0 b
$ b; X! s9 A6 R* Y0 i5 d
9 d% R0 b; }% v4 ~0 q1 f第三步:修改Uboot的内核命令行
, t; W  _7 i  U6 _9 h! @5 W& n/ t* Y7 q8 c7 W+ P
此步的目的是告诉内核根文件系统的类型为jffs2。
2 M8 q/ K. F+ n. ]2 {
: ]9 _' s0 U4 Ysetenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 8 Q# ~$ Z/ @" z6 Z, a# X* w- [
- c  d- S+ Q: K' G1 t
/ i( [# A1 A/ @& y7 l" q; D& @

- N# H& A) ?: P' X第四步: 烧写JFFS2文件系统至nand flash 中& H) c& x4 U. ^! f4 Q
( v1 L: Z2 G1 T: p3 t2 D& K# G
首先,看下我的分区表:
& I2 E. L* |( |) I
: f8 Y5 J+ J; Q! b" y2 S[root@yj423 /root]#cat /proc/mtd7 J) H; B: K  w& Z4 \
dev:    size   erasesize  name
& g0 k8 ^& \  q, Vmtd0: 00800000 00020000 "mtdram test device"1 l9 g3 A+ Z$ {3 q; |7 c1 ^3 A8 f
mtd1: 00040000 00020000 "Uboot"
1 d6 V) c! W9 v; rmtd2: 00300000 00020000 "Kernel"/ I* z8 Y0 P' x* X. V0 i! h$ U
mtd3: 0fb00000 00020000 "filesystem") j9 e; n/ G+ h" i0 r
[root@yj423 /root]#cat /proc/partitions4 `7 R9 ~6 Y' E
major minor  #blocks  name( ?$ [, [* F5 |- f, x9 d! l
( x# S& K# _) d; b7 c
  31        0       8192 mtdblock06 `' K% q0 Z( i( ?, G  c
  31        1        256 mtdblock1: H# @% x+ I  B/ }( v7 S
  31        2       3072 mtdblock22 }) J, v( P( r- }/ j* s
  31        3     257024 mtdblock3
" m" P* y5 x' |! u5 m
0 _/ [- z$ ]6 o6 q4 z3 H  ], C- d4 I* {3 @" P' |/ w5 |

$ F: m7 h: \- y& p& \. qmtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。/ P, B' r% _  ?
& r' m% }# n, T+ k  o
所以第三步的root参数为mtdblock3,请留意!
) Q) W* v, b% l4 w6 R  H0 `
/ f% X* q$ o* ~4 T9 u开始烧写,请注意烧写的起始地址和长度。$ K7 r3 }/ T( Y' [, t) y

) g+ M5 D5 k2 V( btftp 0x31000000 jffs2.bin
7 j2 A$ |- h1 p+ w, b) @' t' w; Knand erase 0x500000 0x0FB000002 {7 U, ]2 ~! C, b
nand write.jffs2 0x31000000 0x500000 0x800000/ ]2 l! u, {7 E& l6 X0 E
2 h: ~, g' q$ I0 z. l1 R. q
0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。
% A. `% ?3 U( ^
1 s. N# \2 K3 y% t4 e% H! L& \+ {9 w5 T/ [: @+ F

8 K- k% f  L: {0 N, s/ b9 Z4 g最后,来看下内核成功挂载JFFS2文件系统时的输出:( Y6 g# l( H# r" Q- K8 b3 b
2 f2 Q3 P. z9 [+ i
......
- u/ [/ @: q0 g7 J9 o: v' x0 k
7 H9 \) I0 V7 n9 Q# WVFS: Mounted root (jffs2 filesystem) on device 31:3.% g% m6 n  |4 F0 r
Freeing init memory: 156K" F  S* I$ W0 E/ l
eth0: link down
8 W% J, ]( ^, R  reth0: link up, 100Mbps, full-duplex, lpa 0x45E1
) y; r* N* {  i" E( D2 M  O  F6 s[root@yj423 /root]#
  W$ P2 a& I  Z# [' t, r5 w; K6 I4 {
2 ^, T/ R5 G) e6 K1 N
9 `0 w3 d' Q! E7 V6 X2 S

3 h, h% G+ v" n

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 23:06 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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