嵌入式Linux文件系统的定义与制作准备

说到Linux文件系统对于刚刚接触Linux的初学者来说还是有些生疏,其实理解了他的定义并且掌握他的使用方法并不是什么难事。在下文中大家就会详细的了解到什么是Linux文件系统,并且可以学会嵌入式Linux文件系统的制作方法。

一、什么是文件系统 (Filesystem)

文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。

二、主要嵌入式采用的文件系统

Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是 直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。

RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。

ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技术.

initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。

Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。

SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试

三、建一个包含所有文件的目录

1。建一个目录rootfs 用来装文件系统

2。mkdir bin dev etc lib proc sbin tmp usr var

3. ln -fs bin/busybox linuxrc(使用busybox)

4. 到系统 /dev 把所有的device打一个包,拷贝到 dev下面(最省事的做法);或者使用mknod来自己建所需要的device,我自己用的如下:

crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console 
crw-rw-rw- 1 root root 5, 64 2006-02-24 13:12 cua0 
crw-rw-rw- 1 root root 63, 0 2006-02-24 13:12 dk0 
crw-rw-rw- 1 root root 63, 1 2006-02-24 13:12 dk1 
drwxr-xr-x 2 root root 4096 2006-02-24 13:12 flash 
brw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 hda 
crw-rw-rw- 1 root root 36, 10 2006-02-24 13:12 ipsec 
crw-rw-rw- 1 root root 241, 0 2006-02-24 13:12 ixNpe 
crw-rw-rw- 1 root root 1, 2 2006-02-24 13:12 kmem 
crw-rw-rw- 1 root root 126, 0 2006-02-24 13:12 ledman 
lrwxrwxrwx 1 root root 16 2007-09-19 14:08 log -> /tmp/var/log/log 
crw-rw-rw- 1 root root 1, 1 2006-02-24 13:12 mem 
crw-rw-rw- 1 root root 90, 0 2006-02-24 13:12 mtd0 
brw-rw-rw- 1 root root 31, 0 2006-02-24 13:12 mtdblock0 
brw-rw-rw- 1 root root 31, 1 2006-02-24 13:12 mtdblock1 
brw-rw-rw- 1 root root 31, 2 2006-02-24 13:12 mtdblock2 
brw-rw-rw- 1 root root 31, 3 2006-02-24 13:12 mtdblock3 
brw-rw-rw- 1 root root 31, 4 2006-02-24 13:12 mtdblock4 
brw-rw-rw- 1 root root 31, 5 2006-02-24 13:12 mtdblock5 
brw-rw-rw- 1 root root 31, 6 2006-02-24 13:12 mtdblock6 
crw-rw-rw- 1 root root 90, 1 2006-02-24 13:12 mtdr0 
crw-rw-rw- 1 root root 1, 3 2006-02-24 13:12 null 
crw-rw-rw- 1 root root 108, 0 2006-02-24 13:12 ppp 
crw-r--r-- 1 root root 5, 2 2006-03-29 15:56 ptmx 
drwxr-xr-x 2 root root 4096 2006-03-29 15:56 pts 
crw-rw-rw- 1 root root 2, 0 2006-02-24 13:12 ptyp0 
brw-rw-rw- 1 root root 1, 0 2006-02-24 13:12 ram0 
crw-rw-rw- 1 root root 1, 8 2006-02-24 13:12 random 
crw-rw-rw- 1 root root 5, 0 2006-02-24 13:12 tty 
crw-rw-rw- 1 root root 4, 0 2006-02-24 13:12 tty0 
crw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 ttyp0 
crw-rw-rw- 1 root root 4, 64 2006-02-24 13:12 ttyS0 
crw-rw-rw- 1 root root 1, 9 2006-02-24 13:12 urandom 
crw-rw-rw- 1 root root 1, 5 2006-02-24 13:12 zero

举例: mknod console c 5 1 这样 crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console

5。将编译好的busybox拷贝到/bin下面,除了busybox外,所有其他的命令都是他的link

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/26042.html