嵌入式开发过程中的文件系统制作,往往是使用已经定制好的目录及文件进行制作,下面以实际的例子进行说明:
假设当前目录为rootdir,目录结构如下:
- root@debian:~# tree -L 2 rootdir
- rootdir
- |-- dev
- |-- drv
- | |-- drv1
- | `-- drv2
- |-- etc
- `-- proc
- 4 directories, 2 files
现在我们想把rootdir的内容制作成一个文件系统,但是又不是使用rootdir的全部内容,而只有drv内容,操作如下:
- cd rootdir
- find . −path"./dev"−o−path"./etc" -prune -o -print | cpio -o -O ../rootimg.cpio
可以看到生成了一个rootimg.cpio文件,现在我们创建一个文件系统:
- #创建一块32MB大小的数据空间
- dd if=/dev/zero of=root.img bs=1024 count=32000
- #把数据空间制作成文件系统
- mkfs.ext4 -F root.img >/dev/null
- #创建临时目录
- mkdir tmpdir
- #挂载文件系统
- mount -o loop root.img tmpdir
- #把需要使用的文件和目录解压到目录
- cd tmpdir
- cpio -id -I ../root.cpio
可以看到tmpdir的目录结构如下:
- root@debian:~# tree -L 2 tmpdir/
- tmpdir/
- |-- drv
- | |-- drv1
- | `-- drv2
- |-- lost+found
- `-- proc
- 3 directories, 2 files
基本上已经达到我们文件系统制作的目的了,当然除了这些工作之外还需要做其他的工作。
- 补充一
很多情况下我们遇到的可能是这种情况,文件系统是已经给定的xxx.cpio.gz,我们只是需要解压操作,不过个人比较推荐下面的方法:- zcat xxx.cpio.gz | cpio -idmv
不过如果涉及到设备文件的话,可能需要root权限,在这种情况下,个人比较推荐使用fakeroot命令,而不是使用sudo命令,这主要涉及到最后的文件归属问题:- zcat xxx.cpio.gz | fakeroot cpio -idmv
- 补充二
上述的说明可能权限上没有问题,但是如果涉及到设备文件的话,可能fakeroot存在问题,使用fakeroot创建的dev目录如下:- f30@debian:~/workspace/exdroid/lichee/linux-2.6.36/rootfs/skel$ ll dev/
- total 0
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 console
- -rw-r----- 1 f30 f30 0 Jun 16 00:52 kmem
- -rw-r----- 1 f30 f30 0 Jun 16 00:52 loop0
- -rw-r----- 1 f30 f30 0 Jun 16 00:52 loop1
- -rw-r----- 1 f30 f30 0 Jun 16 00:52 mem
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 null
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 random
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 tty
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 tty0
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 tty7
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 ttyS0
- -rw-rw-rw- 1 f30 f30 0 Jun 16 00:52 zero
- f30@debian:~/workspace/exdroid/lichee/linux-2.6.36/rootfs/skel$ ll dev/
- total 0
- crw-rw-rw- 1 root root 5, 1 Nov 25 03:48 console
- crw-r----- 1 root root 1, 2 Nov 25 03:48 kmem
- brw-r----- 1 root root 7, 0 Nov 25 03:48 loop0
- brw-r----- 1 root root 7, 1 Nov 25 03:48 loop1
- crw-r----- 1 root root 1, 1 Nov 25 03:48 mem
- crw-rw-rw- 1 root root 1, 3 Nov 25 03:48 null
- crw-rw-rw- 1 root root 1, 8 Nov 25 03:48 random
- crw-rw-rw- 1 root root 5, 0 Nov 25 03:48 tty
- crw-rw-rw- 1 root root 4, 0 Nov 25 03:48 tty0
- crw-rw-rw- 1 root root 4, 7 Nov 25 03:48 tty7
- crw-rw-rw- 1 root root 4, 64 Nov 25 03:48 ttyS0
- crw-rw-rw- 1 root root 1, 5 Nov 25 03:48 zero