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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
8 n* x& |) l# c9 r' M, N
将rootfs和userdata两个目录分别制作为镜像文件进行烧写:
9 l0 n. ^9 U/ u/ j- }# z+ H) {$ u, @* g
镜像文件对应文件系统类型的选择,采用:& v+ J: H) m% M  E

* L1 k' f& d. crootfs制作为rootfs.img镜像,采用的文件系统类型为cramfs,只读,用于保护根文件系统;& B7 B7 ^" I% ?3 K4 |( x

; t: i7 p1 ]3 W; M0 j: w: w7 ?userdata制作为userdata.img镜像,采用的文件系统类型为yaffs2,可读写;
  x% w6 J! J* m' q: [% I! z; K2 {. z( B3 N7 ]7 ^6 A* P
配置linux内核,支持两种文件系统:- p+ ]  B9 X* W! t6 b

/ y& S3 R, H: c. Y- s1 }cd  /opt/kernel
6 M" o& Z- ]) U; v$ k/ i* p7 n4 U
& t! R$ F5 ]# I$ @6 gmake menuconfig
- ^  R1 D2 N9 S6 e$ T  {' \# V. w' J9 `- D
File Systems->
2 U- h1 ?0 W7 S1 Y7 n! j" T% o2 O; D/ b* u5 w2 Q
Miscellaneous filesystems  --->
/ c9 t3 w( W7 t5 w/ i' S
6 h: r+ Y3 k# N. Z8 e, k4 L<*>Compressed ROM file system support (cramfs) //支持cramfs文件系统" S- Y" Y4 X+ S) |

( P9 f* Y3 {- S  C2 [  z( U  File Systems->/ S: {$ }5 p/ L/ Z7 q4 f& u( C

. j" p! Z% y* Q. |: f$ E9 a        
Miscellaneous filesystems  --->6 \/ ~5 C7 D* F+ J* }6 @
2 [1 `5 W) S7 F3 ]- i: N
<*>   YAFFS2 file system support //已经支持* Z  c5 q' t' h" ]2 e1 k; ?$ K

- r  P' K  B1 E9 ^保存退出
1 b5 P3 y0 P# z  ]# X- Z. _0 a
, X: }. D( O& R; Z1 b! ymake zImage
7 x9 M  j+ ?( _4 j
) X' l5 E5 b$ Y6 }cp arch/ARM/boot/zImage /tftpboot/
  z* c' Y* L/ h% k! z* B2 ]+ \5 S; h3 _
重启开发板6 S, b# D# e$ t$ U: b
5 E) [: A& ]" c
cat /proc/filesystems //查看是否支持cramfs和yaffs2
/ p: H! P$ j% t) B- X1 O$ E% v
. P6 h1 ~3 b3 w将rootfs和userdata分别制作为cramfs和yaffs2文件系统镜像:( s1 K8 R5 u; S

5 d+ ^9 F1 }) b! o8 O; H目录            镜像文件              文件系统类型8 \: o* w) p* v3 m. [$ }

$ @+ ^% G" ], ^; K+ C" z! {3 n1 prootfs        rootfs.img          cramfs
, i+ j1 D) e5 h* a: a% p
9 y9 v% n& L: q( s" W, i* h# tuserdata    userdata.img     yaffs2
  @: _! k; x5 {2 [# R* k+ T) D7 S) z1 }$ g# I# S6 z0 Z1 l
rootfs.img镜像制作步骤:
4 ~7 m4 G7 y- H1 J0 `4 z7 g% _1 P4 I: w# P( n2 e& L& D+ l5 _
cd /opt/; b" P% n4 v' ~9 |' G
6 o( ?7 d, z& R- l" z9 r# {
mkfs.cramfs rootfs   rootfs.img, d8 Q) m' \$ W2 K* Z

  p% |/ Z% O1 U* e- N% ~( ?cp rootfs.img /tftpboot
9 \/ U* E# F* `& o) l
3 @+ s2 a* b  @" a; u  uuserdata.img镜像制作步骤:
% k3 c; S4 l1 \! l  ~
( t8 ]0 P! ~* `- t5 v从ftp下载mkyaffs2image工具到虚拟机中:+ s* _- i: S% s: e6 z  s+ f3 J

/ q* I& `; F. b8 S7 xsudo cp  mkyaffs2image  /usr/sbin3 n1 J# a8 K2 K1 W, r" e$ w; d
3 f. Z% f# o$ j3 W# u
sudo chmod 777 /usr/sbin/mkyaffs2image& J( S: k: u& b* l4 z7 P8 w: K
" T  R2 C! q" B- `+ i; X
cd /opt/project1 t5 O4 z, T' r9 q+ r) A7 k

6 |  ]! o; D7 cmkyaffs2image userdata userdata.img
+ a; o9 M& P( k2 E3 Z$ [3 ~1 o. j6 Y2 g& P9 c
chmod 666 userdata.img: }$ L7 T% W3 E4 c

' N) O' O6 i0 x; f9 N2 mcp userdata.img /tftpboot  E5 n+ X3 p' ~: a0 N# M/ {

$ x. b# F( n; B. o至此四个软件包都准备就绪:
3 R5 C! `% x9 A' o6 H8 D( K
( d! r! o) a' S+ |" Su-boot.bin,zImage,rootfs.img,userdata.img5 i1 Y: ~! f: F$ k8 x+ {  p  S" \& E! j

1 q# \0 N( _& _, E" _/ W0 G存放目录:/tftpboot
% ~# v0 x; M* m, |' X' R8 q" q) f0 w8 {8 i
nandflash分区规划,用于部署镜像文件:
3 N( s5 Y5 `+ h" K+ A0 G2 u. A8 X% V1 @, p
0----------2M----------7M----------17M------------剩余; K' P1 F3 p, \# a5 i
# c, W# R; W& h+ A6 e. P% L; v
  uboot     zImage   rootfs.img  userdata.img: m# F# u/ X7 x, {9 Q
6 Y. h. F6 o  }/ B
注意:镜像文件大小要小于各个分区的大小!请确认!
) @- h# z( U2 V* |) p1 H5 d& b" S* C+ f
修改nandflash的分区表
: K1 `) @* ?( {- o3 n. ~  n6 v- q+ G# k$ A" ~
cd /opt/kernel
4 z1 m% c! U& S& ]0 o1 D
- [0 k- @7 f+ _vim drivers/mtd/nand/s3c_nand.c 找到分区表,修改为如下分区表信息:! e: W9 H1 H) d3 w- ]. F

/ I2 z) m$ V' @# }struct mtd_partition s3c_partition_info[ ] = {
2 y! M( _) Y7 t/ S5 s+ p2 ?6 C: n6 y) }9 ^+ t6 Z
//第一分区信息 0 a3 C5 |/ ^0 B& M. }
0 b; K, g5 t* M* ?
{
8 i+ d; [2 ^1 i  c: X
8 U  u% J4 ~1 o: b/ h* o5 r" _# w2 [       .name           = "uboot", //分区的名称
0 T* m$ \; I0 o/ x0 @. E
1 S6 i7 o% C$ K% d6 g: z6 m3 i       .offset         = (0), //分区的起始地址5 g2 i. j: g& T; o, a

0 g/ ^- _: e* @9 w! Y* _( L7 g       .size           = (SZ_1M*2), //分区的大小
* J7 ?; M6 n% `) P- `, B8 y. g* U- E& l* r9 ?% q- y6 `
},
/ V) j- ]: ~1 l- {) x8 \# @3 O3 s' V- R0 I4 y
//第二分区信息
# b' u" T3 V% I4 g
9 }- |0 T9 V/ R1 z{/ U7 T& k& K, i

3 Q: W/ U3 z4 h* O  e5 ?     .name           = "kernel",
- e# I; f+ D; @6 b
( i7 i2 y5 ^- H2 B; p) g- b     .offset         = MTDPART_OFS_APPEND, //追加7 z  I5 u1 g) G( S* D# S
3 `& B" Q6 p8 j( {
     .size           = (SZ_1M*5),
9 k! x$ F7 u, S8 I" D
) c+ M4 z$ O2 m% P  a5 r},
% H) P. @  o0 Z& D1 i7 J6 Z4 K5 D. ~1 G2 F/ @- E
//第三分区信息
. e2 \& a' d2 M9 {0 H, N# {5 s5 u! G( C+ l$ W
{  R& P: V" }; O/ i3 s$ I1 q' K

2 ^% o7 Y; M' s) R         .name           = "rootfs",     //第一次写成大写了下面图片不对
0 l$ g+ ?. n6 Z4 o( I8 _( q" c, O  M
         .offset         = MTDPART_OFS_APPEND, 5 v* U! q' u. K/ Q6 ]
* [- j1 U: X7 D' }% w' E" Y% r
         .size           = (SZ_1M*10),
# N* S; R! s* x- V, W4 g- M
1 X; ~1 t: _3 ?: Y# I},& W* Q3 o) x# }/ w8 B
6 D1 I  A, C: l" o: z
//第四分区信息 ( ?8 X) i, u) G9 k( J+ h# S2 p$ {8 O
" a" r) ~( i. @8 n" ?. K4 Z
{
# I8 P5 b8 D7 {; t, J4 Y) E# G2 L0 i6 L$ b1 a% E+ G
         .name           = "userdata",1 v" g/ z3 y2 Z1 J4 [0 E

, K4 g1 @9 b( B9 l         .offset         =MTDPART_OFS_APPEND,
* U( i& E3 s# S$ l# `' R9 O
- @- u" x9 n3 H( G2 B         .size           = MTDPART_SIZ_FULL //剩余" p$ }1 \. Q/ W7 r3 g7 r! m6 k
4 j$ W; }/ @3 ]! r* N# F; H% p: P4 ~: t
}
. R5 |. |+ o+ u( L) c1 ^3 H- P
7 b2 b! ?* V; f% C5 r1 l, b% L% l};
# M1 ~% o7 l! \% `' w/ k$ z  F, ^& S4 X7 g
保存退出
! e4 z7 U& r( V% b) ^8 P: t( l# e/ w' m& S7 ]8 x, r# @
make zImage
$ C0 n( s" N! X. Q" ^! M* ]
6 K7 b3 m6 p! Y: f- Bcp arch/arm/boot/zImage /tftpboot
0 U) ^0 ]$ y1 R5 q* g
& R* o2 y: e0 y% A重启开发板
0 u; p; _& x& H; r1 V9 O
, |9 M; u" }3 p; x) Hcat /proc/mtd //查看分区表
( x: h# d% ]% c- k
1 E0 [% q6 X0 L2 ]ls /dev/mtd* -lh //查看字符设备文件和块设备文件
! k3 s* G# s2 ?
: n& W& d; m+ H1 [# }( t. o( ]$ G3 E/dev/mtd0:第一个分区的字符设备文件  X" \9 h+ ^5 _  g0 Y, o4 z

3 _; `& r& q! _/dev/mtdblock0:第一个分区的块设备文件6 z! U2 ^8 D9 ^* b

# r8 ]! k8 ]& h$ g# z& f将zImage,rootfs.img,userdata.img烧写到nand上:
" p1 L4 `: k7 C( M3 v4 a0 r9 X) F8 @8 I: r
烧写方法有两种,一种通过uboot,另一种通过mtd工具
+ J% P; b8 n( `& \; C* A) Z4 E8 a) b9 w+ `$ U4 D0 u9 p
利用uboot来进行烧写的步骤:, t9 u2 i3 _9 N' P% s# P$ ^" R. y
0 G- h, d5 x1 Z& I3 D
烧写zImage:; b4 u2 d; b) o3 ~/ q" j3 k+ K
. ]; y; @; M1 W. ]8 P! k9 J( o" t  d0 W
tftp 50008000 zImage& m; d  S+ U) [: r! J
& H% R* j7 s0 h5 x1 K
nand erase 200000 500000
2 F, a& z; {5 c% _6 k: i3 w$ r, H' L) m  p1 c
nand write 50008000 200000 500000" [7 I* V0 f. o& n  R

) d. }" v5 b" f
2 O$ |7 A) b  e3 ]
3 g& H9 p. S3 t* ?. r烧写rootfs.img5 ~; y8 Q; I* n& V4 S( {
3 [7 M0 W9 ?, A5 C# z8 z2 Z4 O, Y% V
tftp 50008000 rootfs.img1 ]  x7 m3 {0 E# o+ T# M

2 _' o0 p$ V% @% `0 ]/ ]( W1 Dnand erase 700000 a00000
/ l& l  A  j6 H
" h/ r+ U  x7 |+ d9 ?nand write 50008000 700000 a00000
: O, ^: i8 ^: y, u" K$ r3 G) x0 _1 x$ a

1 ?3 T! B$ L1 a2 ~% C5 B5 b- u
6 l- M  s) Q  K; w# D烧写userdata.img
+ l0 z3 X$ L' ^( [
* D! I, G2 ]& S3 ?tftp 50008000 userdata.img3 y0 Y; l! @; @) m

- S/ q9 B6 E9 Ynand erase 1100000   ) X- a$ r8 Q3 ?: _- g
- K& L6 Y% E' p
nand write.yaffs 50008000 1100000 $filesize
. D( i  W6 F: P$ B4 O- X
  T7 G' w: f( g, y或者1 ^( L! M& m5 W5 q* C

1 f( a: u6 {: |7 Z& c" unand write.yaffs 50008000 1100000 $(filesize)
5 g! g: z3 C- S7 X3 E7 }8 ~& V" n0 U" z
设置本地启动的参数信息:
  C* A: f* s+ L
9 _# C! s0 c& |+ U  {( r9 W* o) Zsetenv bootcmd nand read 50008000 200000 500000 \; bootm 50008000; `5 z% }7 `7 ^+ w* k$ v
/ q3 T  \, ~$ T- T; b% {% B
setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs/ ]8 s2 b8 ?) \. g
3 F( C$ q, e% V4 p* @
saveenv
8 B8 o9 q( m9 Y! |- R" f/ V7 I* y
' K$ v& D8 V8 X5 @7 k4 \% y" I重启开发板,看rootfs是否能挂接,所在第三块分区4 K5 f0 q* s$ i, p/ m

: V( U* A' v4 f- |2 I- C
6 [0 ]3 q; ?& {
: ~: e2 K) |- }4 n( A% N5 R6 s验证根文件系统是否为只读:
; ^4 ~: A& y- ~; M1 ^5 {3 R. o; e' S- _+ u( r, W6 k
cd  /
8 L% z! ~8 ?3 p0 Y- ^& Q7 ]: [' j4 X# a! a; M2 i0 r% N0 j
mkdir helloworld //看是否能创建目录  可以创建
4 n# c$ K% Y7 |0 P* L$ v$ A4 g/ ~. X* N2 a! D
手动挂接存放userdata数据的第四块分区到根文件系统home目录:$ X1 l. `" I, J8 C' @9 H& V

- x: J  E' c+ n* u在开发板上执行:
+ G5 m; l: \! c0 z5 A% C$ H; h& D% ?* j( k/ b/ Q, b- `7 }& @
mount -t yaffs2 /dev/mtdblock3 /home
' E( a' o0 }9 h7 i% E& i
$ W2 {, [& o# a8 q& T0 Q; l+ a( ~5 hmount //看是否挂接成功
% K% e! f1 r( ~/ b
4 _' {1 g6 b% ?+ o' p. m% F" Wcd /home //进入第四块分区
3 O9 M6 X+ }5 D3 c) F3 a; N; {) F: \; Y. P! D4 ^
ls //查看第四块分区的内容,是否有之前userdata目录的内容- z- q8 y* h' N$ ?$ w
; ]! K: x; Z6 v
.  /home/scripts/run.sh  //手动运行软件启动脚本,"."后跟一个空格
$ K( ^9 r6 t$ r4 i4 |6 [8 o8 Y& M( J3 T7 @' k
此时   led灯QT启动成功
/ n) ~6 H( g! `% d
% c4 _3 m2 l' d# U, |3 L自动挂接存放userdata数据的第四块分区到根文件系统home目录:1 I2 E9 H$ B/ C

7 }3 N0 U9 D. s2 ]& K( ^' ~4 Ovim /opt/rootfs/etc/init.d/rcS,在文件最后添加:8 V, D: j( _0 p* J- t' L/ g; O6 ^

' }3 V8 r) P7 S% C7 Omount -t yaffs2 /dev/mtdblock3 /home" Y* ^' Y6 i5 o- `+ W; v* A( r. h! Y: O; K
  _+ ^. d# N" M& m4 S: ?. W6 \) y: |. [7 h
ifconfig eth0 192.168.1.110( j3 Y/ _! F3 P5 M) a. R, a

1 t1 u' I  v. u# C8 O3 @ifcofig lo 127.0.0.1
/ C3 V( g) H/ Y1 o. c2 p& M) f; ~& k. C/ h8 `& E1 J
保存退出* ^, W% R; ^5 u2 t' N% @6 J/ S
" Q6 {: C+ e3 B' N' S" I

3 t4 W$ m3 C) y+ d9 `; o
: M& M/ u7 ?9 X" A) t9 h镜像包下载地址:http://linux.linuxidc.com/pub/2011/10/09/制作根文件系统镜像工具mkfs编译/5 ]7 E% V: k$ X1 g4 H- `( K
操作参考:http://www.linuxidc.com/Linux/2011-10/44887.htm
) B' l, |- p6 b: m* G- `5 h! H, L
3 Y3 ]5 m" D2 L2 {% Ihttp://www.embedu.org/Column/Column508.htm
3 z9 u$ m' d3 j3 ]2 `$ a3 h  K! I; t' r  @$ H+ Q8 k# o+ q
启动信息显示:
7 j0 p. N" N' e% t
" n6 H. W8 B4 A* A  a4 p1 DUBIFS: mounted UBI device 0, volume 0, name "rootfs"
% P: F8 Y: }0 \  u3 X3 R& y& s+ u1 a- c0 R* ?
UBIFS: file system size:   126341120 bytes (123380 KiB, 120 MiB, 995 LEBs)
9 q, I+ d$ _" G" x. G% N. y. U% z0 M! I8 B
UBIFS: journal size:       6348800 bytes (6200 KiB, 6 MiB, 50 LEBs). F4 t5 X* n8 J3 a" J0 o
& c, J- n  F2 S
UBIFS: media format:       w4/r0 (latest is w4/r0)* v; s0 F% ?% y9 z8 x* [

, @5 j" l: a& O& ~5 |+ K6 yUBIFS: default compressor: lzo
0 ~% W  A' m5 a4 f7 v) }' ]$ x, S6 j' o! x7 b  u+ k
UBIFS: reserved for root:  4952683 bytes (4836 KiB)! D/ N/ p- S3 j; _% w" ?& v$ i

9 C2 D$ P& E6 x- X% [% KVFS: Mounted root (ubifs filesystem) on device 0:14.
& `; Z$ Y: {  d- g, N5 n
) x+ J9 y- t' f4 xFreeing init memory: 148K
* A2 z0 ]4 Q+ y; _6 |, F
: I3 m1 y% P8 @8 m

' F' N: ]  x% y# L8 @8 b3 e- _9 M+ t9 j
0 Y# W% e& P% U9 n6 U/ p' T( z; c
1 h8 {* s% N5 H! Z. y
1 z: O6 k7 }& m

; m! S) m! \4 Q9 {) [7 n
$ d% A) o; @: }' T& |  I) m! M; K- s

  }. Q: Q% {& L' B0 l
! p/ X' L8 q! j, Z5 c" r

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 11:32 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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