為什麼重新編譯核心及編譯準備
為什麼重新編譯核心
Linux作為一個自由軟體,在廣大愛好者的支援下,核心版本不斷更新。
新的核心修訂了舊核心的bug,並增加了許多新的特性。如果使用者想要使用這些新特性,或想根據自己的系統度身定製一個更高效,更穩定的核心,就需要重新編譯核心。
通常,更新的核心會支援更多的硬體,具備更好的程序管理能力,執行速度更快、 更穩定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統核心是Linux使用者的必要操作內容。
為了正確的合理地設定核心編譯配置選項,從而只編譯系統需要的功能的程式碼,一般主要有下面四個考慮:
自己定製編譯的核心執行更快***具有更少的程式碼***
系統將擁有更多的記憶體***核心部分將不會被交換到虛擬記憶體中***
不需要的功能編譯進入核心可能會增加被系統攻擊者利用的漏洞
將某種功能編譯為模組方式會比編譯到核心內的方式速度要慢一些。
下載原始碼和編譯軟體的準備
下載核心原始碼:
注意,點選2.6.25核心的F版,即完整版。
如果你懶得去網站點聯接,執行下列命令:
$cd ~
$ wget
安裝有關編譯程式。安裝make ,gcc, make-kpkg,執行menuconfig等等和編譯核心相關的工具。
安裝不了,請檢查/etc/apt/sources.list 檔案。
有關命令:
$sudo apt-get install build-essential kernel-package libncurses5-dev
make-kpkg是一種新的編譯核心的方法,後面會單獨講。
kernel-package是為了安裝make-kpkg。
libncurses5-dev是menuconfig需要的庫。
解壓原始碼
注意,網上很多教程上說應該解壓到 /usr/src,純屬以訛傳訛,linux掌門人linus說解壓到任何目錄上都可以。當然,linus的說法是正確的。我放在自己的主目錄下的src目錄。
如果你下載原始碼是放到自己的主目錄下或者執行上面的wget下載的,那麼執行下列命令:
$ cd ~
$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/
現在,原始碼就在 ~/src/linux-2.6.25.10
注意目錄容量要到達1.5G
進入原始碼的目錄,準備下一步的工作。後面都在這個目錄裡面進行。
$ cd ~/src/linux-2.6.25.10
配製核心config
首先,清理以前編譯時留下的臨時檔案。如果是剛剛解開的包,不需要執行這步。如果是第二次或者是第n次編譯,那麼一定要執行。
相關命令如下:
$ sudo make mrproper
網上很多教程上說把現在使用的核心的config拷貝過來參考,據實驗,是不需要的,ubuntu還有debian會自動做這步。不過這條命令倒是可以學習一下。當然你可以將以前的配置拷貝過來。
命令:
cp /boot/config-`uname -r` ./.config
./.config的意思是拷貝到當前目錄並以.config重新命名。
注意:在配製核心時,修改的檔案為linux-2.6.25.10資料夾中的.config檔案。這是個隱藏檔案,更改檢視方式可以看到。是make mrproper時自動拷貝過來的,下載的源包中沒有。
相關命令
#make config:基於文字的最為傳統的配置介面,不推薦使用
#make menuconfig:基於文字選單的配置介面,字元終端下推薦使用
#make xconfig:基於圖形視窗模式的配置介面,Xwindow下推薦使用
#make oldconfig:如果只想在原來核心配置的基礎上修改一些小地方,會省去不少麻煩
#make defconfig :按預設選項對核心進行配置***386的預設配置是Linus做的***
#make allnoconfig : 除必須的選項外, 其它選項一律不選. ***常用於嵌入式系統***
配置2.6.0核心時如果你的主機板是Intel晶片的話,你用預設配製也許就可以得到一個滿意的核心哦。做法是make menuconfig後離開時選擇儲存。
這裡的難點是pci,如果你硬碟是IDE的那一定要選擇好你主機板上南橋晶片。SCSI的話就是要選擇上你的SCSI卡型號。
還有就是網絡卡,音效卡晶片的型號了,他們的型號你都可以用lspci 查詢到比如我的是。
# lspci
00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge ***rev 01***
00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge ***rev 01***
00:07.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA ***rev 08***
00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE ***rev 01***
00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB
00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI ***rev 08***
00:0f.0 VGA compatible controller: VMware Inc [VMware SVGA II] PCI Display Adapter
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI ***rev 01***
00:11.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] ***rev 10***
00:12.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] ***rev 02***
編譯配置
1***檔案系統
請務必要選中ext3檔案系統,
File systems--->
[*] Ext3 journalling file system support
[*] Ext3 Security Labels
[*] JBD ***ext3*** debugging support
以上三項一定要選上,而且要內建***即標****. 這個非常重要,在配置完後一定要檢查一下.config檔案有沒有"CONFIG_EXT3_FS=y"這一項.
如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在執行核心時就會遇上以下錯誤: pivotroot: pivot_root***/sysroot,/sysroot/initrd*** failed
2***網絡卡驅動
務必把自己網絡卡對應的驅動編譯進核心,比較普遍的網絡卡是realtek 8139,以下就是這種網絡卡的配置,以供參考
Device Drivers--->
Networking support--->
Ethernet ***10 or 100Mbit*** --->
<*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support ***EXPERIMENTAL***
<*> RealTek RTL-8139 PCI Fast Ethernet Adapter support
3***音效卡驅動
也要選擇自己音效卡對應的驅動編譯進核心,比較普遍的音效卡是i810_audio,以下就是這種音效卡的配置,以供參考
Device Drivers --->
Sound --->
<*> Sound card support
Advanced Linux Sound Architecture --->
<*> Advanced Linux Sound Architecture
<*> Sequencer support
< > Sequencer dummy client
<*> OSS Mixer API
<*> OSS PCM ***digital audio*** API[*] OSS Sequencer API
<*> RTC Timer support
PCI devices --->
<*> Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111
Open Sound System --->
< > Open Sound System ***DEPRECATED***
以上三項配置關係到新核心能否正常執行,請備加註意.其他的配置如果不是很瞭解,大可以按預設的選擇.