Linux編譯內核
-
准備工作
通常要運行的第一個命令是:
#cd /usr/src/linux;make mrproper
該命令確保源代碼目錄下沒有不正確的.o文件以及文件的互相依賴
配置
接下來的內核配置過程比較煩瑣,但是配置的適當與否與日後Linux的運行直接相關,有必要了解一下一些主要的且經常用到的選項的設置。
配置內核可以根據需要與愛好使用下面命令中的一個:
#make config(基於文本的最為傳統的配置界面,不推薦使用)
#make menuconfig(基於文本選單的配置界面,字符終端下推薦使用)
#make xconfig(基於圖形窗口模式的配置界面,Xwindow下推薦使用)
#make oldconfig(如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩)
這三個命令中,make xconfig的界面最為友好,如果你可以使用Xwindow,那麼就推薦你使用這個命令.
在繁雜的配置工作完成以後,下面你就可以自己到杯茶耐心等候了。與編譯有關的命令有如下幾個:
#make dep
#make clean
#make zImage
#make bzImage
#make modules
#make modules_install
#depmod -a
第一個命令make dep實際上讀取配置過程生成的配置文件,來創建對應於配置的依賴關系樹,從而決定哪些需要編譯而那些不需要;
第二命令make clean完成刪除前面步驟留下的文件,以避免出現一些錯誤;
第三個命令make zImage和第四個命令make bzImage實現完全編譯內核,二者生成的內核都是使用gzip壓縮的,只要使用一個就夠了,
它們的區別在於使用make bzImage可以生成大一點的內核,比如在編譯2.4.0版本的內核時如果使用make zImage命令,那麼就會出現system too big的錯誤提示。
建議大家使用make bzImage命令。
後面三個命令只有在你進行配置的過程中,在回答Enable loadable module support (CONFIG_MODULES)時選了"Yes"才是必要的,
make modules和make modules_install分別生成相應的模塊和把模塊拷貝到需要的目錄中。
嚴格說來,第七個命令和編譯過程並沒有關系,它是生成模塊間的依賴關系,這樣你啟動新內核之後,使用modprobe命令加載模塊時就能正確地定位模塊。
更新
經過以上的步驟,我們終於得到了新版本的內核。為了能夠使用新版本的內核,我們還需要做一些改動:
#cp /usr/src/linux/System.map /boot/System.map-2.4.0test8
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.0test8
以上這兩個文件是我們剛才編譯時新生成的。下面修改/boot下的兩個鏈接System.map和vmlinuz,使其指向新內核的文件:
#cd /boot;rm -f System.map vmlinuz
#ln -s vmlinuz-2.4.0test8 vmlinuz
#ln -s System.map-2.4.0test8 System.map
#shutdown -r now
正常啟動.您的機器現在就使用你的新內核了.
下面是RH 推薦的編譯方式. 注意edit Makefile
老話新說,RedHat 公司 推薦編譯內核方法
本文部分取自於RH300(RHCE Rapid Track Course)課本.
本文假定你用的是Redhat 7.2,用grub 管理啟動.准備編譯7.2 自帶的內核
cd /usr/src/linux-2.4
make mrproper
edit Makefile 文件
把EXTRAVERSION= 改成有你特色的文字, 比如:
EXTRAVERSION=-10me
make menuconfig or make xconfig
make dep
make bzImage
make modules
make modules_install
cp System.map /boot/System.map-2.4.7-10me
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.7-10me
new-kernel-pkg --install --mkinitrd --depmod 2.4.7-10me