by falcon
2008-04-19
如果自己制作过嵌入式Linux文件系统,那么应该比较了解initrd映像文件是个什么东西了?initrd即initial RAM disk,在内核解压之后,在真正的root filesystem被启动之前,它被加载到内存中,做一些系统初始化的操作,比如加载内核模块,挂载新的root文件系统等[1,2]。
initrd本身是一个文件,内核启动时可以把它展开成一个文件系统。
在2.6版本的内核以前,initrd基于一种特殊的loop设备[4],在展开成一个文件系统前需要通过一种loop设备挂载起来,因为涉及到挂载操 作,所以会涉及到一些操作权限。不过在2.6版本内核之后出现了initramfs,它和initrd实现同样的功能,但是它基于一种cpio档,无须挂 载就可以展开成一个文件系统,因此省去了各种相关的权限,在自动化方面更方便了[2,3]。
initrd的一个特别有趣的应用是Live CD,比如Knoppix[6],它通过initrd启动一个初始化的文件系统,然后再通过一个Cloop设备[5]挂载一个特别的压缩文件,展开为一个 新的Root文件系统,这样一个700M左右的光盘就能够装下几个G的东西,包含大部分的软件和相应的内核模块,进而支持各种各样的功能。
下面简单介绍一下这两种初始化文件系统(initrd和initramfs)的制作过程。
先准备一个测试的目录。
$ cd /tmp
$ mkdir initrd
$ mkdir initrd/loop initrd/cpio
1. initrd (via a loo