系統(tǒng)初始化過程驅(qū)動(dòng)程序的安裝
在Linux安裝過程中,系統(tǒng)上的硬件會(huì)被檢測(cè),基于檢測(cè)到的結(jié)果安裝程序會(huì)決定哪些模塊需要在引導(dǎo)時(shí)被載入。Red Hat的安裝程序?yàn)閍naconda,它提供了自動(dòng)檢測(cè)硬件,并且安裝的機(jī)制。
但是,如果計(jì)算機(jī)內(nèi)的某些硬件沒有默認(rèn)的驅(qū)動(dòng)程序,比如一塊SCSI卡,我們可以在啟動(dòng)后的boot提示符下,輸入“l(fā)inux dd”,在加載完內(nèi)核后,系統(tǒng)會(huì)自動(dòng)提示插入驅(qū)動(dòng)盤,這時(shí)就有機(jī)會(huì)把該硬件的Linux驅(qū)動(dòng)程序裝入。
如果在安裝系統(tǒng)時(shí),某種硬件總是因?yàn)橹袛鄾_突(ISA總線的設(shè)備較常見,比如一塊ISA網(wǎng)卡)沒法正常驅(qū)動(dòng),或者是缺少驅(qū)動(dòng)程序,那么可以在boot提示符下輸入“l(fā)inux noprobe”。在這種模式下,安裝程序不會(huì)自動(dòng)配置找到的硬件,可以自己來選擇現(xiàn)有驅(qū)動(dòng),配置驅(qū)動(dòng)程序的參數(shù),或者選擇用光盤或軟盤加載驅(qū)動(dòng)程序。
定制引導(dǎo)盤
系統(tǒng)啟動(dòng)時(shí)是如何加載驅(qū)動(dòng)的?下面讓我們來看一下Red Hat的安裝光盤是怎樣引導(dǎo)的。當(dāng)Linux安裝光盤啟動(dòng)時(shí),加載位于光盤上isolinux中的內(nèi)核文件vmlinuz,內(nèi)核運(yùn)行完畢后,又將initrd.img的虛擬文件系統(tǒng)加載到內(nèi)存中。這個(gè)文件為ext2文件系統(tǒng)的鏡像,經(jīng)過gzip壓縮,可以通過以下步驟查看該鏡像中的內(nèi)容:
|
其中modules.dep為模塊的注冊(cè)文件,同時(shí)有各種模塊的依存關(guān)系。modules.cgz為cpio的打包文件,實(shí)際的各種驅(qū)動(dòng)模塊就在該文件中。我們可以通過以下命令解包:
|
由此可以看到,解包出來的目錄2.4.21-4XXX。進(jìn)入該目錄下的i386目錄,就可以看到當(dāng)前啟動(dòng)盤中支持的所以驅(qū)動(dòng)程序:
|
若希望在系統(tǒng)中加入需要的驅(qū)動(dòng)程序,可以相應(yīng)地修改這些文件,比如在modules.dep中加入該模塊的名字和依存關(guān)系,將編譯好的驅(qū)動(dòng)模塊文件加入modules.cgz中,這樣就可以制定自己的安裝光盤。
硬盤上的系統(tǒng)啟動(dòng)過程與上面類似,但是initrd的鏡像文件要更簡(jiǎn)單些,一般在initrd-2.4.XXX.img的虛擬文件系統(tǒng)中,只會(huì)在/lib目錄下包含ext3.o jbd.o lvm-mod.o等少數(shù)文件,用來驅(qū)動(dòng)硬盤上的ext3的文件系統(tǒng)。加載文件系統(tǒng)后,就可以使用/lib/modules/2.4.XXX/下的modules.dep文件及Kernel目錄中的各種驅(qū)動(dòng)文件。


