是否曾編譯過Linux的內核,被認為是告別Linux入門階段的標志。那麼什麼是內核,該如何編譯Linux的內核呢?
一、 什麼是Linux的內核
我們經常聽到操作系統的內核這個詞,但是什麼是操作系統的內核呢?
內核這個詞起源於UNIX,在UNIX的設計中首先使用了層次結構的設計,這種結構將操作系統的組成程序按照他們對於系統的重要性和對於具體設備的依賴性劃分為幾個層次,其中作為系統最為核心,獨立於具體硬件設備和軟件資源的部分就稱之為內核。這是操作系統中最穩定,也是最基本的部分。在UNIX後設計的各種主流操作系統也都使用了這種先進的設計。
二、 為什麼要編譯內核
由於采用了分層結構,所以操作系統可以只通過更新外圍程序來適應軟硬件技術的變化,但有時有一些深入系統底層的變化(例如千年蟲就是),此時就需要對內核進行升級。
而對於Linux這樣的操作系統來說,它允許對內核進行定制,通過重配置與重編譯可以從中去掉對於你的計算機來說沒有用處的部分,而不需要像Windows那樣一概保留(Windows98的最小安裝大約有200MB,但是有經驗的高手實際上可以將其減小到不足100MB運行,但那去掉的100多MB非必需的文件Windows並未提供刪除它們的手段)。這些時候都需要更新內核,就要對內核重編譯。
三、 如何編譯內核
以下操作必須以root登錄進行(如果不對內核進行升級,而只是進行重編譯,則直接跳到第三步)
第一步:cd /usr/src/ 進入到目錄 /usr/src/
rm -rf /usr/src/linux 刪除老內核的代碼。
在任何一個子目錄下(但通常是在/usr/src/下)解開新的內核源程序:
tar xvfz linux-x.x.xx.tar.gz (例如linux-2.0.35.tar.gz)
第二步: 在 /usr/src/ 下建立一個符號連接到你的新內核目錄。
ln -s /usr/src/linux.2.x.xx /usr/src/linux
老版本的內核還要做一下操作以刪除頭文件:
cd /usr/include
rm -rf asm linux scsi
創建連接將你的系統指向包含有新內核代碼的新的頭文件
ln -s /usr/src/linux/include/asm-i386 asm
ln -s /usr/src/linux/include/linux linux
ln -s /usr/src/linux/include/scsi scsi
第三步:將當前目錄變成 /usr/src/linux
cd /usr/src/linux
第四步:配置內核
如果你在 X window 下並且希望在圖形界面下配置內核,你就打:
make xconfig (注: 你需要安裝Tk/Tcl包並且X Server的分辨率在800x600以上.)
如果你不在 X Window 下或不想使用圖形界面,你就打:
make config 或 make menuconfig (推薦)
逐個回答完問題後稍等片刻,等提示符出現或圖形界面消失,系統就配置好了。
第五步:創建新內核
在目錄 /usr/src/linux 下:
make dep 確保關鍵文件在正確的位置.
make clean 確保所有東西均保持最新狀態
make zImage 編譯內核(當你的內核很大時,則用make bzImage進一步壓縮內核)
還有make zlilo/make install等可選擇。
對於現在的主流機型,編譯過程大約進行不到5分鐘就可以完成。
第六步:如果你用了模塊,你還需要生成和安裝模塊
make modules
make modules-install
depmod -a
image。例如:image = /boot/vmlinuz (slackware版是/vmlinuz)
將 /usr/src/linux/System.map 復制到 /boot 目錄中,
將 /usr/src/linux/arch/i386/boot/zImage 復制到 /boot 目錄中並改名為 vmlinuz覆蓋掉原來的內核。
也可以這樣做:
用一個新文件名將新內核拷貝到相應的目錄下,如
cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage2
image = /boot/vmlinuz
root = /dev/hda1
label = linux
復制後把image改成/boot/zImage2 把label改成newlinux.
這樣新內核與舊內核可以共存,當新內核不能啟動時,還有備份在那兒呢。
注意復制後放置的位置,如果沒有設置default則誰是第一項誰就是缺省啟動項。
第八步:安裝新內核並重新起動。
lilo 安裝lilo
shutdown -r now 重啟
也可以用cp Image/dev/fd0將新內核拷貝到啟動軟盤上以從軟盤啟動。
注意:要編譯內核,必須在系統中安裝了gcc和g++的C與C++編譯器,否則不能進行編譯。
編譯內核是在Linux下重要的操作之一,很多軟硬件的問題都可以通過重新配置內核來解決。而且編譯Linux內核還是檢驗系統超頻後的穩定性的重要手段之一,Linux對於系統穩定的要求比Windows要高得多,編譯內核的過程中又有大量的運算要進行,所以能夠通過Linux下的內核編譯的機器穩定性就不會太差,對於考機來說,這可比什麼極品飛車、雷神之錘要強得多。