|
发表于 2009-6-1 05:06:08
|
显示全部楼层
Post by grissiom;1992657
咳咳,斗胆在这里放言几句,如有不对,请指出哈~;)
系统的启动第一步是 bootloader 把内核镜像装载到内存里然后运行,内核一开始会自动进行硬件检测和配置,然后要找到根分区,运行上面的启动脚本和一些应用程序,整个系统才能启动起来。而现在内核是可以模块化的,也就是并不编译到内核镜像里,而是放到硬盘上按需调入。这就会遇到几个问题:在找到硬盘和根分区之前,内核并不能访问到那些模块和启动程序,也就无从加载和启动。尤其是,那些文件是写在分区上,“隐藏”在文件系统结构之后的(ext3,ext4...)内核必须要“理解”那些文件系统结构才能读取那些文件。
一个解决方案是把设备驱动和文件系统驱动统统编译进内核里面(这大概就是 huge),不过会造成内核的庞大臃肿;另一个方法就是用 initrd,在 initrd 里放上设备驱动和文件系统驱动模块,启动时由 bootloader 加载到内存,然后当作"根分区"挂载给内核,内核需要什么模块先往那里找,等一切就绪了再把硬盘分区挂上。这样做的好处是内核镜像可以小,不过需要做 initrd。
如果是自己编译内核的话,自己知道自己的机器是什么设备,什么分区,直接编译到内核里面就好了,就不用 initrd 了~ 如果不知道,那还是用官版的吧…… ;)
50/50,想去掉 initrd,也并不一定要将驱动统统编译进内核里面而令它臃肿,只要将在启动时必要的编入就行,其他非必要的依然可以是模块
所谓必要的,就是要令系统启动时能确保系统能够挂载根分区的,所以文件系统支援一定少不了,不能用模块。另外相关的硬件支援如 IDE/SATA 或 SCSI 之类亦如是,如果是移动设备,USB 支援当然也少不了。 |
|