星期三, 七月 04, 2007

prev: initrd 的作用

Initrd的作用有三:

(1).提高系统的可移植性
把更多的内核功能条目编译成模块,不仅仅是为了减小内核体积,更重要的是面对各种不同的硬件架构,可以使用initrd中的linuxrc按需进行模块加载以驱动硬件,甚至对于CPU类型或者多处理机也可以进行手工选择内核(配合syslinux这类boot loader)

(2).LIVECD(光盘上的Linux)必备的部件
现在的可启动光盘都沿用1995年制定的El Torito标准,它的启动原理在于模拟软盘启动映像,这个映像的大小一般被限制在2800KB,也就是两张软盘的大小,它包含了syslinux(也可以用 isolinux,它对映像的大小要求更宽松),syslinux的配置文件,initrd.img以及内核。这时候内核的大小就必须要有约束了(当然,也有来自1MB实模式内存空间的约束),把更多的模块压缩进initrd.img中去,可以缩小启动映像的体积。
最重要的是,linuxrc脚本对于硬盘,光驱模块的加载至关重要,因为livecd要适应尽量多的硬件架构,所以它必须能按需加载模块,这时候 initrd就派上用场了。比如说,我们在vmware里运行knoppix,knoppix的linuxrc就自动加载BusLogic.o模块(通过轮换insmod来实现)。

(3).在linuxrc脚本中可以很方便地启用个性化bootsplash

http://www.linuxsir.org/bbs/showpost.php?p=751666&postcount=20

新内核提供的内核模块自动加载不是在内核初始化过程即内核态中使用的,而是在用户态进行的(比如说,你要挂载一个ntfs盘,那么内核自动加载ntfs模块),因为要在内核态加载模块,前提是内核必须确定好根文件系统,而确定根文件系统又必须要支持相应的文件系统如ext2,这就是自举的逻辑哲学问题了,所以一定要把相应的文件系统编译进内核才行!

我个人认为,研究内核一定要有方向才能成功。当今的Linux内核很庞大,源码系统可谓盘根错乱,不容易读懂,当针对某一方面来研究,比如说中断系统,显然能事半功倍。

没有评论: