- 论坛徽章:
- 0
|
原发于:【整理】为何要把文件夹形式的rootfs制作成单个rootfs镜像文件
【背景】
之前折腾嵌入式linux,有个事情,一直没注意,那就是:
对于rootfs的话,已经有了,已经
(通过buildroot或者通过busybox:【记录】Ubuntu下为QEMU建立一个arm平台的可用的根文件系统rootfs)
制作好了对应的rootfs,已经包含了对应各种文件(bin下面各种工具等等)和文件夹(/bin,/include,/dev,等等):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART
$ ls -lha
total 18M
drwxr-xr-x+ 1 Administrators Domänen-Benutzer 0 Aug 22 09:53 ./
drwxr-xr-x+ 1 Administrators Domänen-Benutzer 0 Aug 22 09:53 ../
-rwxr-xr-x 1 Administrators Domänen-Benutzer 119K Jun 4 21:50 mkfs.jffs2*
-rwxr-xr-x 1 Administrators Domänen-Benutzer 17M Jun 4 21:50 rootfilesystem.tar.bz2*
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 Aug 18 2012 rootfs/
CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART
$ file mkfs.jffs2
mkfs.jffs2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART
$ cd rootfs/
CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART/rootfs
$ ls -lha
total 93K
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 Aug 18 2012 ./
drwxr-xr-x+ 1 Administrators Domänen-Benutzer 0 Aug 22 09:53 ../
-rw------- 1 CLi Domänen-Benutzer 1.2K May 11 2011 .bash_history
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 bin/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 dev/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 Aug 11 2011 etc/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 heartbeat/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 home/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 Aug 18 2012 html/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 lib/
lrwxrwxrwx 1 CLi Domänen-Benutzer 11 Aug 18 2012 linuxrc -> bin/busybox*
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 20manman/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 mnt/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 proc/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 root/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 sbin/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 sys/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 tmp/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 usr/
drwxr-xr-x+ 1 CLi Domänen-Benutzer 0 May 11 2011 var/
CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART/rootfsls ls bin/
addgroup@ catv@ cutcut@ echocho@ gunzip@ ipcalc@ linux64@ lsb* mountunt* pinging@ rpm@ slogin* stty@ unameame@
adduser@ chattr@ dateate@ ed@ gzipzip@ iplink@ ln ln@ lsx* mountpoint@ ping6@ run-partssshssh* su su@ uncompress@
ash@ chgrpgrp@ dd dd@ egreprep@ headead@ iproute@ login@ lsz* msh@ pipe_progressscpscp* sshssh-add* syncync@ usleeawkawk@ chmodmod@ delgroupfalselse@ hostnameame@ iptunnel@ lrb* makeweb* mt@ printenvenv@ sedsed@ sshssh-agent* tartar@ vi vbashash* chownown@ deluser@ fdflush@ hush@ killill@ lrx* mkdirdir@ mv mv@ ps ps* setarch@ sshd* thttpdwatchtch@
bbconfig@ configure-ssldf df@ fgreprep@ hwclock* lash@ lrz* mknodnod@ netstattat@ pwdpwd@ sftpftp* sshssh-keygen*touchuch@ zcat@
busybox*cp cp@ dmesg@ getopt@ ip@ ldconfigls ls@ mktemp@niceice@ rm rm@ sh@ sshssh-keyscantruerucatcat@ cpio@ dumpkmapgreprep@ ipaddr@ linux32@ lsattr@moreore@ pidof@ rmdirdir@ sleepeep@ stat@ umountunt*
CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART/rootfs
$
|
如图:
![]()
为何,还要再去(用各种文件系统制作工具,比如mkfs.jffs2,mkfs.ext2,mkfs.ext3等等)把文件夹形式的rootfs,制作成,对应的单个的rootfs的文件,即rootfs的镜像文件。
【为何要把文件夹形式的rootfs制作成单个rootfs镜像文件】
那是因为,此处,虽然你已经有了rootfs,是文件夹形式的,可以浏览的rootfs。
但是,我们的目的是:
把此rootfs,弄到嵌入式开发板上。
而嵌入式开发板上的rootfs所存放到的物理设备,往往都是nand flash。
此时,没法,直接把此rootfs,放到该nand flash上去,所以需要弄成,对应的格式的文件系统的镜像,比如用mk.jffs2制作成jffs2的镜像,用mkyaffs2image制作成yaffs2的镜像等等。
做个类似对比:
加入你的普通PC电脑,装的是Win7系统,你在你的E盘已经有了,如上所述的rootfs文件夹(包含对应的文件和文件夹),想要拷贝到F盘。
那么,在正常的Win7系统内,相对还是很简单的,直接从E盘拷贝,到F盘粘贴,即可。
但是,当你的电脑的硬盘,没有安装(Win7)操作系统的时候:
如果硬盘也没格式化,那么就根本不存在,很方便的拷贝rootfs从E盘到F盘;
如果硬盘已经格式化好了,有了E盘和F盘,那从E盘拷贝rootf到F盘,也相对比较麻烦,因为你需要把应该挂载到别的电脑下,当做移动硬盘,然后在别人的系统里面执行此操作;
与此类似的:
嵌入式开发板上的nand flash,就是你的电脑的硬盘:
一般来说,在你已有了rootfs的时候,你的开发板上的nand flash,并没有格式化->所以就不存在,很方便的把你电脑上的rootfs,拷贝到你的nand flash上(的对应的位置)
即使你的nand flash已经(通过uboot)格式化好了,一般也都是对应的jffs2或者yaffs2(或者是UBI) 等格式的文件系统,而你电脑上的rootfs(是基于windows的NTFS或者是FAT32),也没法直接拷贝到(jffs2/yaffs2/ubi/…)的nand flash上去;
所以,为了,将你的,电脑上的rootfs(文件夹),能完整的,拷贝复制到,你的开发板上面的nand flash上去,那么就只有:
1.先将你电脑上(NFTS/FAT32)的rootfs文件夹,弄成对应的格式的rootfs镜像文件,比如jffs2或者yaffs2的单个文件
2. 然后再通过uboot直接用nand命令(nand write/nand read等),把此文件,写入到对应的nand flash中。
才能实现我们要的效果:
把电脑上的(NTFS/FAT32格式的)rootfs(文件夹中的所有内容)
完整的拷贝到(jffs2/yaffs2/ubi等格式的)nand flash上面去。
最后,再将PC电脑,和其硬盘,和嵌入式开发板,和其nand flash,做个类比,就更容易明白了:
普通PC电脑和嵌入式开发板之间的rootfs的比较 | |
| | | | | |
| | | | | | |
【总结】
之所以要把PC上的rootfs文件夹,制作成对应的某种嵌入式文件系统的镜像文件,的原因是:
嵌入式Linux中,针对Nand Flash的嵌入式文件系统(合适的,常用的有:jffs2,yaffs,UBI等),和普通PC电脑中的文件系统不同(Win7下常用NTFS/TAF32等)
且嵌入式Linux系统中,不方便直接以文件(或文件夹)的形式,直接拷贝文件(从PC端到嵌入式开发板上)
所以:
1.不仅要把PC端的rootfs文件夹打包成一个单一的文件;
2.还要把此单一的文件,制作成,和目标的嵌入式开发板上(的nand flash)所用的文件系统的格式相匹配,即弄成jffs2,yaffs2,UBI等格式。
然后:
才能把此rootfs镜像文件,通过Uboot,烧录到nand flash上
-> 才能支持后续的嵌入式Linux kernel启动后,从对应的位置,读取nand flash上的rootfs,然后正常启动和运行嵌入式Linux。
搞懂原因了,再去制作: 【记录】用mkfs.jffs2制作jffs2格式的rootfs镜像文件
|
|