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

ARM平台建立JFFS2根文件系统

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开发板:TQ2440/ ]; X/ B; U( q- H9 }% H
. R: _) B- k$ w$ H
内核版本:2.6.32
# q; ~! O3 V  `% G# n$ Y- E% k; p" K
Nand flash:K9F2G08U0A1 v9 _# G4 N. Y6 n0 S6 [+ D  f
# Q% o; _4 O" p, d$ q2 f1 G+ j
本文将对JFFS2文件系统的编译和烧写做简单记录,本文的内容建立在如下三个基础上:
" h; M! `7 w* ^5 P* W" g
$ r; o* ~/ z2 y  ^9 H1.  完成使用Busybox编译出所需要的工具。, A8 x' r5 q' q# V* a; Y
& j+ ?- F; h, s0 R1 W0 ~
2.  完成添加根文件系统所需的目录和配置文件。
. F& F4 G+ z5 q8 j$ Y/ p/ W- V
5 l% M, |4 |/ v: L3.  开发平台上有mkfs.jffs2工具(ubuntu自带该工具)。
/ l9 K$ \  S9 x6 V; G4 _8 `6 {2 f8 A$ u& ~7 Y: q/ b; g
3 d) O7 [1 G8 H6 \% b5 R" s) p4 {

( K3 k! z7 s8 X7 l  ]' G0 o第一步:配置内核) G: `$ w' a6 g& T  g

( k: x2 I( e4 I; R& L选择JFFS2文件系统:& \% B( c. F3 b3 x! H$ [

6 b% E3 i8 U+ ]- b
7 e9 `: F, w5 \3 Y7 C6 ~, r$ v$ s0 [. i1 N9 x0 ~
4 I$ d! W9 a, h, m# U7 e+ S! T/ d

- y* X0 x) q; \! E禁止ECC功能,根据参考资料2,JFFS2会采用自己的ECC算法,因此无需开启硬件ECC功能。8 V% i" C) s' h3 y8 E7 g
& \' V) X6 d& a

( P) z2 l' D9 K1 r! q( e) U$ a7 D4 d% [/ i
: |# ]  c0 E% i7 l, V
第二步:编译文件系统% z9 ]  c% S4 F( w  Z
9 t8 a# O, W2 V+ _7 z; [, s
使用如下命令:
( M' W5 y! Q9 V( @9 A  x% x( B3 K2 e0 |3 J# H
mkfs.jffs2  -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin
" _- p8 M% U. u4 l' h
' m. }+ x9 a2 q/ X$ W其中,
! f. N' L( x% Q
' v* c9 N2 I, \1 b/ }* G  -s 和 -e 分别为nand flash的页大小和块大小,开发板所使用的nandflash为K9F2G08U0A。
+ Y& [7 B" O0 F2 u4 C& W# y7 b$ Y( @5 O% w6 k
  查看手册可知其大小,0 p9 V2 X- A6 Y1 \$ `( i
4 x) U# ^$ m6 I. o3 ^1 ~) |6 k) i

3 k7 \) A- {: z; a) \
* d4 C* Z' `% k7 R4 u. @* V: v& C+ Y) x' i. D, D: A
  页大小=0x800 = 2048Byte = 2KB,
$ i. w" X. d( w5 I6 [/ x1 A$ {7 t9 R4 j; Y5 m( u
  块大小=0x20000=131072Byte = 128KB。5 j# Y8 ^* C5 a( F4 R
  H9 B7 |5 s$ W4 m- t: h8 Z
  -l 表示使用小端模式..
' z- |. b5 J4 L  S; q+ m8 I* j5 r) n- y2 c3 a0 |- f' E) @; x9 K
  -n 表示不实用cleanmarkers,如果不添加该参数会有如下类似的警告:$ Q( V' ]1 A) h+ n' @% {/ G

7 f& i( H* c* b0 o9 B( s4 B  CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0$ @4 Q$ E3 O2 w& i! T/ v

( J% h& j. w/ A$ G$ m  --pad 用于填充空白区,填充内容为0XFF,如果产生的文件小于0x800000,将填满至0x800000。也可以直接使用-p参数。0 {9 {5 B$ H$ S7 B: ]" v4 R" ^! d

9 V# u( d* J: m5 E8 m  -d 表示文件系统所在的位置。7 d& [% H3 J* U' y
( @: x# c* o7 a! Q5 w, C
  -o 表示生成的目标文件的名字。" v& G1 T, ?2 U% p! {

+ t/ O% `+ Z  W! A: ]9 c  r6 K执行上述命令后,我们将得到编译好的JFFS2根文件系统。
6 [8 k; K  O) [# n
  u$ p2 a4 O3 I- V: y! N3 k$ f* j8 }! A- w; a9 k1 p1 ?
+ E; L; I. R/ m1 F- c& T# f
第三步:修改Uboot的内核命令行* f# H* z( R* J- a
' G& ^+ R) H. f0 M5 h9 O
此步的目的是告诉内核根文件系统的类型为jffs2。
$ w, l. c# N; B0 C! G  P4 @# m" k1 Z& K0 B! L: @" J
setenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2
8 h3 {1 Y) G! h) O( k+ y  N  P! F9 {* ~% Z3 Y
4 ]% z$ K  x: J( c' C' t
' y: }3 |9 u( l1 N
第四步: 烧写JFFS2文件系统至nand flash 中
% B: d( p0 o. S) `1 ~. X3 S% f2 h( V" r" w2 d+ S/ _
首先,看下我的分区表:5 m- f! u4 B# f2 u9 F$ n

( B; Q. X$ w; X2 @[root@yj423 /root]#cat /proc/mtd
. n9 A8 ^; v  L) F, l4 h9 N- [dev:    size   erasesize  name
* S9 M( @" O7 C" c# f) h$ cmtd0: 00800000 00020000 "mtdram test device"
7 ?$ b& a" B( cmtd1: 00040000 00020000 "Uboot"- U7 P, Z1 G7 E# D/ J. X1 ~
mtd2: 00300000 00020000 "Kernel"
' C2 u& N8 C6 S+ ]! w- Mmtd3: 0fb00000 00020000 "filesystem"" K, J; F' X8 B$ Z/ C, x: ^1 @
[root@yj423 /root]#cat /proc/partitions. B: j9 v  Z. ?2 I- U0 Q* N9 V
major minor  #blocks  name2 w8 H- O1 F5 [
. K2 s! n& E& [# O/ E$ w
  31        0       8192 mtdblock0
) a; h. I$ L" \% J) n  31        1        256 mtdblock1- Y# p" b& z9 a6 U3 H! D3 a
  31        2       3072 mtdblock24 C7 m0 z- m: j  c4 D2 M+ |
  31        3     257024 mtdblock3
2 l  c8 R( s4 ~! R8 w$ r- d
* Q, K' s0 s9 x: V
; T% ?8 w% @' q
2 a, j. e: ~+ ~4 dmtdblock3 为文件系统所在的分区,起始地址为0x500000,长度为0xfb00000。
" D$ K; V/ \" V; H
( i' D! f! X, I' J  @+ [所以第三步的root参数为mtdblock3,请留意!5 H5 d+ Y) \8 E
" ]8 T1 E% H" x  n0 D
开始烧写,请注意烧写的起始地址和长度。
0 r, Z! W: r# ?
8 }; x/ @2 M" S( D6 [3 rtftp 0x31000000 jffs2.bin
0 H  ^, q, X& ]8 g6 Knand erase 0x500000 0x0FB00000
/ Z& u! q: J! w. r- l+ K+ Unand write.jffs2 0x31000000 0x500000 0x800000. y2 w1 V, \; C

" P+ N5 A8 x% Y! x0x500000 为mtdblock3分区的起始地址,0x800000为jffs2.bin的文件大小,该值在tftp传送成功时会显示出来。
# u  n  v# U6 R$ u( q& \  \' ]9 k2 t8 L9 M: \3 F9 X5 R6 Y
0 x) a5 n7 I% y4 }/ e3 T

% J0 t; w) J( X2 _& M+ ?9 l, w: ?- ]最后,来看下内核成功挂载JFFS2文件系统时的输出:
. l0 j5 X) _: c1 r& T+ n' i% t( Y! W* }) M1 }
......
* B+ i3 T9 U5 \9 s7 `$ e8 x- _. e5 o9 B. z5 {6 `
VFS: Mounted root (jffs2 filesystem) on device 31:3.
7 D, j$ f; l# {) W* p/ @Freeing init memory: 156K
( {. L6 i2 ]9 R. Meth0: link down" ~' {# Y, p  \' P* w- K# s
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
; @# _5 Q0 F  p) Q[root@yj423 /root]#
( \( G6 M3 p" s/ Q1 j8 [
" {0 P. Y, Z. O* _4 ^
4 k; b8 j1 E  s( @8 P# w* S. H- Q# {: }2 X. ^$ _, G5 j
8 x, t& |; _7 l- w  a

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-3 05:35 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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