* 嵌入式系统中主要的存储介质 Flash 是稀有资源,为数不多的 RAM 也是。在嵌入式
系统开发中,开发人员十分珍惜这两种资源,也想出了许多办法解决资源短缺的问题。
* Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(
Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启
动,最简单的方法是将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是 直接从
Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。
* RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到
RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压
缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。
* 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。这也是一种
新方法,在嵌入式系统采用之前,需要经过更多的测试。
* XIP(exece-in-place,就地运行) 是一种不须将应用程序 load 到 RAM 就可以运行
的技术,无疑可以减少 RAM 的使用。不过在嵌入式系统我还没有遇到这种技术的使用