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

看一下嵌入式文件系统的镜像制作及烧写方式

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-10-16 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
& J% S" @2 k4 F
将rootfs和userdata两个目录分别制作为镜像文件进行烧写:' {* C, q# D3 @

6 A! p% E) A2 f$ o镜像文件对应文件系统类型的选择,采用:
$ l% h0 r& A2 g9 r, E3 H- K
, U: [4 v) }3 u( Y# Q) ?7 k( y) e& urootfs制作为rootfs.img镜像,采用的文件系统类型为cramfs,只读,用于保护根文件系统;0 g# w' P) D1 t* P
; ?& Y5 D2 |2 b# L
userdata制作为userdata.img镜像,采用的文件系统类型为yaffs2,可读写;
5 ^2 O  ^+ Z$ J' `* T3 n. ]: m& i7 a: e9 ^/ p! V2 S
配置linux内核,支持两种文件系统:
! M! O0 |; ?/ y3 b) X. L, f% y
3 g+ M! \& y5 S$ K8 `$ i/ O1 ncd  /opt/kernel
4 I' p4 S1 t+ P) \( n2 _: r' N1 N
0 j, z# m) p$ v. k) c+ `/ Nmake menuconfig
. A& z0 E$ D6 P1 x
$ U( g  T1 h$ K' S1 F9 a File Systems->
- ~- |, |8 o; x: A( X, A- V9 ?+ I
6 K1 p3 F/ _0 q0 l& k
Miscellaneous filesystems  --->0 L/ g% f- K. ]& ~

% z) z. V: }8 }" Q. z; B<*>Compressed ROM file system support (cramfs) //支持cramfs文件系统) E2 j! }, U+ b1 g, I. ?- u

& q0 r9 l. q( h  File Systems->! r- x4 j# }5 d' A8 D( O( t

3 K- B' V- r7 e; y: \/ a/ d        
Miscellaneous filesystems  --->
2 `+ {6 c& t% x8 m4 P3 v' w
# I1 h8 ^9 `* K" G: t" S<*>   YAFFS2 file system support //已经支持% K6 Q) x1 s7 T4 b5 b& N0 R

$ s1 m+ l+ |& }9 {保存退出6 v: K' X/ ~$ N  {

, |5 x+ h; [. q  n! h, F/ e2 n0 gmake zImage
- z4 e  k3 Y9 l9 |. J
6 B) x3 p6 ^+ N' Ocp arch/ARM/boot/zImage /tftpboot/) ]- z% ?0 B  P- q  J% K

( B; v* X4 y4 M( x重启开发板. d+ L. Y( D5 |1 g) S" g/ Q

8 X$ O$ b/ k: `- E; H  O1 Mcat /proc/filesystems //查看是否支持cramfs和yaffs2' l* \* N; C& o) {2 {( I% y

+ d; j7 d8 S& z3 l9 p0 N0 i. a将rootfs和userdata分别制作为cramfs和yaffs2文件系统镜像:
7 Q; ^) j- ?+ T6 v* {0 ]. k1 i! y4 p& k9 ]
目录            镜像文件              文件系统类型
: F! w1 M, ~( l3 f- x) H& d+ j, t/ v: Q* s/ E, x
rootfs        rootfs.img          cramfs
' k  }* `7 j' Q' k3 T/ \3 [  Y
$ d9 R- [$ j  w$ K3 E# P3 `userdata    userdata.img     yaffs2
2 M8 J, {0 D' j7 K3 x7 V3 R7 l; J# |: ]2 v9 n
rootfs.img镜像制作步骤:
- Q! b- a1 ]5 i" V0 q
' K9 r% u& w" s8 Dcd /opt/: X$ {. F, ]+ H7 Z( r# ]% V# |3 S
; w+ Z1 i1 ]: U  _$ c
mkfs.cramfs rootfs   rootfs.img
* r* C8 M- c( C( v& W8 c) s9 d9 D; _
cp rootfs.img /tftpboot
; T4 }$ C& O, X5 l" |1 b/ Z1 n% p, n! q5 Y+ s! t# N/ P; Z$ R
userdata.img镜像制作步骤:
  X/ j& A/ `3 o
) o! @' ^+ M* V, o7 |2 Z9 W从ftp下载mkyaffs2image工具到虚拟机中:: n  h: P* C$ O) p/ D& ]5 A
2 a2 n9 {( u. ^' ?( F7 a% f* }0 [
sudo cp  mkyaffs2image  /usr/sbin$ V3 K* C# `" _8 p* x; C: q/ R  m, p
/ @  `3 d8 p# i, _2 J3 E7 ?# v
sudo chmod 777 /usr/sbin/mkyaffs2image- D! |/ C/ A* j7 n1 e# D

) N9 A4 F2 G" j+ Ycd /opt/project3 O1 F  b6 w! G! J2 m$ [( f& f# u

# }' `8 i" g1 _3 G2 [: Pmkyaffs2image userdata userdata.img
* L9 H  H8 Z, Z/ H. D& q
9 _7 p+ [+ Y2 J6 g: t/ [chmod 666 userdata.img; `6 o( A1 {" H( z1 n2 B$ [  G

2 E! c" `) I( _5 [4 y5 f, ]+ ycp userdata.img /tftpboot5 P* B; `3 X- x, g6 O8 k+ p

) x5 E; w; {- s# }至此四个软件包都准备就绪:( f8 l: ^1 R" ?
0 e2 }0 X" P& J# F
u-boot.bin,zImage,rootfs.img,userdata.img7 ^& r4 R( P6 e" u
8 ^3 v% A* J% o# F+ [
存放目录:/tftpboot
& ^9 w' P9 m) a: W9 \. g
+ z# u$ F  d+ K6 `* s6 p! v" Qnandflash分区规划,用于部署镜像文件:3 `% L: O. S, @8 P" F

" s3 [. y$ F& z; |% |  o& g0----------2M----------7M----------17M------------剩余# d% b1 ?4 S$ V6 D

; N/ M8 E4 N3 V' O  uboot     zImage   rootfs.img  userdata.img
' ?1 m! z# |* _) I; x$ ^$ y1 E9 q+ v& X$ P6 V. K" [8 @. {
注意:镜像文件大小要小于各个分区的大小!请确认!
/ z% @' W  l7 Q0 |
4 S5 Q$ y1 @8 ^. _6 @* Y5 Y# G5 k修改nandflash的分区表% z4 b! s2 u. H, @+ a
7 ~6 t- C6 ]$ v, f' A
cd /opt/kernel
+ W: L" g" L7 y; O  \3 O; g
& M! g- S* A: {& X+ U0 R$ Ovim drivers/mtd/nand/s3c_nand.c 找到分区表,修改为如下分区表信息:% x4 D! G& K' L# o4 ?; K9 R
0 d8 S! {5 V% ]
struct mtd_partition s3c_partition_info[ ] = {) K/ O$ ~3 p2 p
& n* A$ Q  J3 D1 E$ {- g
//第一分区信息
2 R5 {, Y) c: d; p8 J
" Z5 E, M- j' f7 D  O4 t* d$ ~{
8 @. ^" C5 i( p7 M
$ Y! f% M. H% a( Y       .name           = "uboot", //分区的名称
: m8 {9 Z8 ^# S0 Y( R$ g# P7 \. P$ W6 c) P; |3 D
       .offset         = (0), //分区的起始地址3 b+ |- L9 b! L3 I/ n% |8 _

% E2 l: N; Y7 G* h' Q: n5 ^+ S' K       .size           = (SZ_1M*2), //分区的大小! H1 l% |3 w3 P* ]% |! k  O2 L
5 p9 \: \8 ^2 u
},  M0 U* t$ Z5 n- O- k* i$ ^
$ O  D9 v3 J' h; W, Q
//第二分区信息 1 s& j1 w6 g& {* Q/ F

( q/ A( p& }+ D- P2 Q{
4 q5 n! ]+ F  f" l
) K8 B* ?+ v. G$ p6 s7 `9 @     .name           = "kernel", " M8 t! b( _: w1 ^
( l9 X6 V: ^6 R  E
     .offset         = MTDPART_OFS_APPEND, //追加1 i' b- a1 l" v2 I9 ?% E

4 @; t* C$ X) H) D1 b+ Q4 T' |     .size           = (SZ_1M*5),
: p  H" A+ z: d6 o+ `& l! B2 s! C+ T) i4 W
},; q* I7 ^# }, M5 Z% k
& k2 u6 t1 H$ R( L( S1 F3 k  F
//第三分区信息 4 D- A5 g* |+ I  C4 j1 Y

/ Z7 s5 `% y4 T0 w! g/ ^1 g  K{
( R/ j1 [7 m3 v& ?! R9 P! h. O5 c5 @- v0 q$ s
         .name           = "rootfs",     //第一次写成大写了下面图片不对
0 ~+ G' _3 H: U9 I+ n4 Y* n/ o$ l5 p8 K) P: Y3 i
         .offset         = MTDPART_OFS_APPEND,
: M; y( r! N" r& ?  W, g
' S: _2 J+ d7 B5 F3 ?8 A         .size           = (SZ_1M*10), ' p' x; _# M7 \& m* p

, `# T; [8 o/ Y" j},$ u3 e; k3 E. p9 N# ^; q. ]' x9 Y
8 O  c% k# a6 D7 a
//第四分区信息 8 V3 U4 V( F4 n  q9 r9 i8 \

3 @% Q3 J9 I0 ~2 }{0 M0 [. |% e% V: O3 Q9 `# W: X" ?
9 H% x# o5 p* w6 r8 O0 k
         .name           = "userdata",
" D1 J& P& Q8 m3 h# Y' X" q' c0 u2 D
5 Z. O" D7 n9 v2 g' A         .offset         =MTDPART_OFS_APPEND,
$ b( @0 w' s7 e. G+ K' E9 r) ~( g
5 j7 \6 r6 l4 O+ n" R( A         .size           = MTDPART_SIZ_FULL //剩余. _- P/ l/ S; D+ P

. K* I+ {$ K" o5 P+ H! x/ u2 `1 i}
" q+ x) a& L6 q: x% j' I' E; F2 W+ s, _. b; Y% d
};9 u! k7 C- V  l! G# \
; Z2 `4 \% V+ {/ \# o: d
保存退出$ L& f7 X7 B  ]: N9 B% i9 f

  I6 q7 _( k3 w' m! ]make zImage
- O4 G7 F- D8 s' C/ B7 E: q3 l! H; y9 C2 U
cp arch/arm/boot/zImage /tftpboot4 ?# d8 t8 W% ], @

- w2 ]. Z' `1 _# m9 H9 Z. c重启开发板( M4 ]9 G/ s  i4 M: P9 c

) i# P4 \  n+ D' p0 ?+ dcat /proc/mtd //查看分区表3 ^# ~; b! m* w/ F% n
' Q1 ^6 W( [* u% [
ls /dev/mtd* -lh //查看字符设备文件和块设备文件
0 U1 T+ l, Z7 h; T: z
& X2 e3 a* Y% `& Q/ e/dev/mtd0:第一个分区的字符设备文件4 {9 r! S7 h: |$ k( t! q

& F1 u7 y9 x$ D$ j4 L/dev/mtdblock0:第一个分区的块设备文件% A. Z. ?9 |0 ^9 c: p- j
8 c' c3 r' x2 P/ T/ n
将zImage,rootfs.img,userdata.img烧写到nand上:. H& G, n; B% E8 i, x; t
( x0 h# ?, f* M3 U4 e/ ^3 b
烧写方法有两种,一种通过uboot,另一种通过mtd工具
. Q8 R" h1 h' {5 U5 {2 A; `# v- T! Y7 v, ^; C, l. Q. u
利用uboot来进行烧写的步骤:
6 ?3 f: i9 q( J
+ A7 t2 B  L6 q0 m烧写zImage:" I8 Z. ?" Y& X. J( v* t
- z( G. B1 [; `  W9 Q, S4 v4 J
tftp 50008000 zImage
* F4 E( {2 A3 x8 Y8 O) s: x3 E. r: K( r; M6 P
nand erase 200000 500000" G9 B. D! X' o6 N

; I' C- ]# y' q6 d& e/ ~6 A9 Lnand write 50008000 200000 500000
" o+ s2 y" h' l: J9 Z
  U' j$ @* V; n4 X0 w7 u: l  h
9 W6 P( o" y( g' y3 [) m8 {3 U8 g, ]% Y
烧写rootfs.img" }/ d" D6 g, g( Z: ^
1 y/ T; i2 A0 j! K, R
tftp 50008000 rootfs.img' Z5 X3 e2 x- _# ?
0 J6 B% z3 e1 p- X6 {5 P* G
nand erase 700000 a00000) S/ Z: ^3 Q2 c
9 X4 P* x- e2 @  ~) S' v. `
nand write 50008000 700000 a00000
8 O( a& C8 X, s3 {0 ~# f$ H
5 u, t2 \2 m- o  T- N( }
+ r$ F# O" ^" V1 d. K( e) q5 |  \) \* _$ Z- ^6 B, F6 j2 H! }
烧写userdata.img
0 B/ Q( V- A4 e* N- m: ^, U! |' _$ D0 X9 u; q8 ^/ F- f# q. v  V
tftp 50008000 userdata.img2 m5 D# |6 s) m2 Y: [) X. h

7 L: q. Q9 f8 q; O. {: lnand erase 1100000   
2 b# p3 D' |, i1 }/ A0 g5 p7 p2 e0 h& A$ Y" n9 j
nand write.yaffs 50008000 1100000 $filesize$ X: n* }9 o% v) N  n; s

  ^, ^) i' K3 I6 K/ E5 K1 @或者
0 g: p- r6 K( D$ e& J
# o0 l2 G& T. ~& o. ]9 c& v' qnand write.yaffs 50008000 1100000 $(filesize)
& d# `1 [5 b; _, o4 N) U5 R# q$ n, |! Z  I. L
设置本地启动的参数信息:+ |7 V" P/ t0 b  s: L3 E6 v; Y2 }

3 Z7 v9 M2 K( M# Isetenv bootcmd nand read 50008000 200000 500000 \; bootm 50008000
0 C4 ]3 |9 W0 u3 w- ~: s1 j
  C# h+ h- j& O' C8 y+ w- V9 _setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs
/ ]6 E) j2 W' `5 e/ Z9 R! U
, @$ _% H+ r" i+ ~  j( Ysaveenv9 X7 _$ W! `  F8 H0 r2 x( n& K

7 H3 g8 B7 Y  F! E重启开发板,看rootfs是否能挂接,所在第三块分区
" X9 h) Q) n/ {' [! f* M
! @, V+ I% ]  B" k4 c
5 L2 y' y- a8 G* ~# p' a" U/ g( M: z- n4 q% y/ @! ~0 Y9 l2 h
验证根文件系统是否为只读:- z+ q- O0 `- ?; @) h! e
8 a' N+ s$ K/ |+ m
cd  /' W5 x, L8 r) M3 D6 R+ G
! H' L. h2 Y5 T3 G
mkdir helloworld //看是否能创建目录  可以创建7 j. u' C" ^0 w( f" ]: j( o+ O
1 X6 C4 A4 N+ W% j
手动挂接存放userdata数据的第四块分区到根文件系统home目录:
, I# y6 Q, z' L* G( g$ G
  v+ e6 P0 U2 a! d2 S在开发板上执行:; o) G9 j! C8 S6 L  J
2 ^# }7 f3 b0 P$ q: D8 w0 V* x" E
mount -t yaffs2 /dev/mtdblock3 /home
8 m$ {3 K9 L4 O& {2 u) N# b: _
0 k) z6 r' v6 {8 d' bmount //看是否挂接成功! Y" t: X: s+ m8 d2 V% P

3 p1 e4 y% H6 J/ Jcd /home //进入第四块分区
& k' x. ^4 a: E
' K% s5 U9 ^: ?3 @ls //查看第四块分区的内容,是否有之前userdata目录的内容
4 L/ q4 I" i$ K3 v
1 v! f1 P% D+ m" v- ~6 f  E" Q.  /home/scripts/run.sh  //手动运行软件启动脚本,"."后跟一个空格
9 u6 M4 j+ l: z+ Z; L# L4 @; W( W9 B( G
此时   led灯QT启动成功+ |2 \% {% T9 s
5 T: u3 H) F0 a. L/ w  d* C
自动挂接存放userdata数据的第四块分区到根文件系统home目录:2 o1 T/ Z' V( e4 r$ a0 u
5 x; a( G' y6 c$ S* R1 k
vim /opt/rootfs/etc/init.d/rcS,在文件最后添加:, [- e# |: |8 L5 T# R) F( P! c* m/ q4 P
8 K, v) U: x) G* I' W: c
mount -t yaffs2 /dev/mtdblock3 /home, d' U% A3 [4 ~* E' T# I2 H& @' B
6 z" F7 u4 {2 c! z) S
ifconfig eth0 192.168.1.110+ T& `; i. C6 x3 Z% b" U' }

. Y; X$ u; v5 J- M( n0 Gifcofig lo 127.0.0.1
& P% J+ g3 f5 |( w1 C& v/ Y0 }, s! d5 L
保存退出
9 d% E4 M; k& f) l3 `" t5 F7 U# D3 s" V  ?/ ?* D3 |

. n6 L: r. X/ R9 ?; j6 Q) [- A/ R/ H
镜像包下载地址:http://linux.linuxidc.com/pub/2011/10/09/制作根文件系统镜像工具mkfs编译/
* b9 D' X9 [+ G$ y7 F- p4 z操作参考:http://www.linuxidc.com/Linux/2011-10/44887.htm
0 I. D7 U1 ~) ]( z$ a/ Q" r. ^2 {5 P  h( r+ C: t
http://www.embedu.org/Column/Column508.htm
7 J: T$ v8 W3 [& E  J8 t: b
1 y8 z% ~9 }  |启动信息显示:
2 f* \3 W$ v. j* m* t) u
" k7 O# w$ U9 ~4 k, `1 CUBIFS: mounted UBI device 0, volume 0, name "rootfs"& W7 F0 Y2 L) B# U2 b

$ q: X- n6 H& I9 ^/ r9 vUBIFS: file system size:   126341120 bytes (123380 KiB, 120 MiB, 995 LEBs)
' ~' E1 X  S" K$ P% k2 r
& q! p3 X3 z& Q1 c6 @, R0 xUBIFS: journal size:       6348800 bytes (6200 KiB, 6 MiB, 50 LEBs)" L( p+ J4 C/ ~( t, }, y  I, w

2 _  Q9 A& t8 \& g, |2 v6 K+ D% aUBIFS: media format:       w4/r0 (latest is w4/r0)
' y0 Y/ I* }" o* B- K- E4 K! m
. A! P0 [' i# d$ Y9 @. a% B$ SUBIFS: default compressor: lzo
7 ~/ G2 s7 O% `, s
+ g! r* G, }9 n* B" v- ^$ bUBIFS: reserved for root:  4952683 bytes (4836 KiB)
% c6 n/ f  \! r& f4 o6 |* F' G0 C( F% l! ^% |4 N) t4 V' q9 d
VFS: Mounted root (ubifs filesystem) on device 0:14.
: i  K) L7 }+ `% W, q, E" h- ^7 q. J) T$ E
Freeing init memory: 148K& g: B! j6 @9 X! [9 r( [' M

7 {+ D" Y( Q% g4 Y6 [  W) I/ C2 j7 d) ^/ ^9 n

5 P# `4 ^7 p! |8 V3 y8 u  O) O0 D$ ]0 t0 {

8 [# Z* d8 K  L- @
! z* ^( |% G9 b! ]$ S8 t) {4 D5 e! o5 b+ q/ N) G+ i

  S: p. o# j4 u( T7 F2 Z( m  Q8 ~, o

' x/ H1 x, Z8 O, h) I! g! \/ Z$ n

该用户从未签到

2#
发表于 2019-10-16 23:10 | 只看该作者
看一下嵌入式文件系统的镜像制作及烧写方式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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