下載源代碼
Linux內核總是不斷發(fā)展的,最新的內核Kernel2.6.0對USB2.0予以正式的支持,以及內核模塊文件后綴最顯著(zhù)的一個(gè)變化由*.o到*.ko等等,我們可以從www.kernel.org下載到tarball的源代碼包。
前期準備
大家都知道的要先升級“module-init-tools“軟件包,否則的話(huà),等你安裝內核模塊文件的時(shí)候,系統會(huì )提示你:Warning: you may need to install module-init-tools See http://www.codemonkey.org.uk/post-h...4.21-23.src.rpm。
進(jìn)入下載目錄下并安裝:
#rpm -e --nodeps modutils (強行卸載原有的modutilsRPM包) #rpm -ivh modutils-2.4.21-23.src.rpm (把源代碼包安裝到了 /usr/src/redhat目錄下) #cd /usr/src/redhat/SPECS (進(jìn)入規范文件目錄下) #rpmbuild --bb modutils.spec (生成二進(jìn)制的RPM包) #cd ../RPMS/i386 (轉入剛生成的二進(jìn)制的RPM包所在位置) #rpm -ivh modutils*.rpm (剛生成兩個(gè)[modutils-2.4.21-23.i386.rpm 與modutils-debuginfo-2.4.21.23.i386.rpm]二進(jìn)制的RPM包,一起安裝吧?。?br>
因為是在RedHat9.0的平臺,RedHat的用戶(hù)可能還會(huì )遇到一些麻煩,我會(huì )慢慢說(shuō)的,除了要以上的升級之外,還有個(gè)文件(/etc/rc.d/rc.sysinit)可能有缺陷,因為/proc/ksyms文件在新內核(Kernel2.6.0)中已經(jīng)沒(méi)有了,打開(kāi)文件命令如下:
#vi /etc/rc.d/rc.sysinit 找到: if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then USEMODULES=y fi 替換成: if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null; then USEMODULES=y fi
也就是把“&& [ -f /proc/ksyms ]”去掉,保存文件(操作之前最好做備份以免刪錯,這個(gè)文件是系統初始腳本,重要的很),這樣子內核才能加載模塊,當然能啟動(dòng)iptable防火墻了,否則防火墻在新內核中啟動(dòng)時(shí)紅色的“failed“非常醒目。(請在新內核中核查/proc/sys/kernel/modprobe中的內容是不是: /sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面開(kāi)始構造新內核。
一、準備源代碼
1、下載到tarball包之后,將內核tarball包復制到/usr/src目錄下,假定包在當前目錄中,運行以下命令:
#cp linux-2.6.0.tar.gz /usr/src
2、轉到/usr/src目錄并解開(kāi)tarball包。
#cd /usr/src #tar xvzf linux-2.6.0.tar.gz
3、如果你還下載了補丁包,則打上補丁,你也可以運行scripts/patch-kernel腳本文件自動(dòng)打上補?。蕚浜醚a丁包)或 #zcat patch-2.6.0.gz|patch -p1。
二、定制內核
定制內核是門(mén)很大的學(xué)問(wèn),需要大量的硬件知識,特別是2.6.0的內核,如果你從 2.4.N配置文件裝載進(jìn)去的,的確,很多人遇到過(guò)麻煩。我是重新配置文件(X窗口服務(wù)器進(jìn)行),配制內核之前請清理源代碼樹(shù),如果還沒(méi)有進(jìn)入 /usr/src/linux-2.6.0目錄,請進(jìn)入此目錄,命令如下:
#make mrproper (剛解開(kāi)的tarball包不需此步驟) #make gconfig (需要Gtk開(kāi)發(fā)庫的支持) 或make config 或make xconfig(需要Qt開(kāi)發(fā)庫的支持)
注意:如果你是ext3文件系統,則在定制內核配置文件時(shí)把對Ext3、Ext2文件的支持直接編譯進(jìn)內核,否則,等你啟用新內核時(shí)機器就會(huì )當掉,出錯信息如下:kernel panic : no init found ,try passing init = option to kernel......或者是:kernel panic:VFS:Unable to mount root fs on unknown-block(0,0),我一開(kāi)始不知道,編譯了好幾次,系統總給我冷板凳坐,最后把對Ext3、Ext2文件系統的支持直接編譯進(jìn)內核,才解決此問(wèn)題,還有把對“Module unloading“選項也選上,否則的話(huà),你在新內核環(huán)境下無(wú)法卸載內核模塊(rmmod命令不能用)。
三、編譯內核及模塊
定制好的內核配置文件(/usr/src/linux- 2.6.0/.config)之后,激動(dòng)的時(shí)刻到來(lái)了,編譯內核及模塊,#make (此命令已完成make bzImage及make modules的工作),bzImage內核文件在arch/i386/boot目錄中,你的CPU不同內核文件存放位置也不同,我是Intel的 CPU。
注意:我在RedHat7.2平臺時(shí)曾出現無(wú)法編譯的出錯信息,出錯信息如下:
/tmp/cc2Hu7sH.s:3: Error: Unknown pseudo-op: `.incbin' make[1]: *** [usr/initramfs_data.o] Error 1 make: *** [usr] Error 2,
重新裝了個(gè)9.0的才解決此問(wèn)題。說(shuō)明:make命令在我的1.6GHz,128MB的機器上跑了足足27分鐘。
四、安裝模塊及內核文件
#make modules_install install
以上這個(gè)命令可以分解成make modules_install與make install,make modules_install安裝內核模塊到/lib/modules/2.6.0下。make install完成mkinitrd命令及內核(bzImage)和System.map的拷貝,請查看/boot目錄,文件名是有區別的,如是GRUB 引導器,make install命令已幫你自動(dòng)修改了引導選項,對于LILO則要手工修改,重寫(xiě)引導記錄。
說(shuō)明:make modules_install install這個(gè)命令在我的1.6GHz,128M的機器上只跑了三十幾秒,很快的哦。
五、后記
最后的工作就是重啟系統(#shutdown -r now),檢驗一下你的勞動(dòng)成果吧。差點(diǎn)忘了還有一點(diǎn),可能對你很重要,進(jìn)入新內核之后我發(fā)現rpm命令不能用了,原來(lái)這是RPM的一個(gè)Bug,特別是對于RH9的用戶(hù),請打開(kāi)/etc/profile文件,命令如下:
#vi /etc/profile (在文件的末尾加上幾句如下) if [`uname -r`="2.6.0" ];then export LD_ASSUME_KERNEL=2.2.5 fi
也就是給系統加上一個(gè)全局的環(huán)境變量,也可直接鍵入#export LD_ASSUME_KERNEL=2.2.5。
使用新內核可能出現的問(wèn)題及對策:
1、新內核根本起不來(lái),解決方法:重新配置內核(學(xué)問(wèn)挺大),也許還根引導記錄有關(guān)(很少了)。
2、新內核模塊無(wú)法加載,會(huì )導致很多問(wèn)題,比如了防火墻沒(méi)法工作了,mount不上光盤(pán)和vfat及ntfs文件系統,其解決方法:升級module- init-tools軟件包(我是modutils-2.4.21- 23.src.rpm包),RedHat的用戶(hù)可能還要修改/etc/rc.d/rc.sysinit文件。
3、RedHat用戶(hù)rpm命令不能使用,解決辦法:請把變量在全局配置文件中聲明。
聯(lián)系客服