為什么重新編譯內(nèi)核及編譯準(zhǔn)備
為什么重新編譯內(nèi)核
Linux作為一個(gè)自由軟件,在廣大愛好者的支持下,內(nèi)核版本不斷更新。
新的內(nèi)核修訂了舊內(nèi)核的bug,并增加了許多新的特性。如果用戶想要使用這些新特性,或想根據(jù)自己的系統(tǒng)度身定制一個(gè)更高效,更穩(wěn)定的內(nèi)核,就需要重新編譯內(nèi)核。
通常,更新的內(nèi)核會(huì)支持更多的硬件,具備更好的進(jìn)程管理能力,運(yùn)行速度更快、 更穩(wěn)定,并且一般會(huì)修復(fù)老版本中發(fā)現(xiàn)的許多漏洞等,經(jīng)常性地選擇升級(jí)更新的系統(tǒng)內(nèi)核是Linux使用者的必要操作內(nèi)容。
為了正確的合理地設(shè)置內(nèi)核編譯配置選項(xiàng),從而只編譯系統(tǒng)需要的功能的代碼,一般主要有下面四個(gè)考慮:
自己定制編譯的內(nèi)核運(yùn)行更快(具有更少的代碼)
系統(tǒng)將擁有更多的內(nèi)存(內(nèi)核部分將不會(huì)被交換到虛擬內(nèi)存中)
不需要的功能編譯進(jìn)入內(nèi)核可能會(huì)增加被系統(tǒng)攻擊者利用的漏洞
將某種功能編譯為模塊方式會(huì)比編譯到內(nèi)核內(nèi)的方式速度要慢一些。
下載源代碼和編譯軟件的準(zhǔn)備
下載內(nèi)核源代碼:http://www.kernel.org/
注意,點(diǎn)擊2.6.25內(nèi)核的F版,即完整版。
如果你懶得去網(wǎng)站點(diǎn)聯(lián)接,運(yùn)行下列命令:
$cd ~
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.10.tar.bz2
安裝有關(guān)編譯程序。安裝make ,gcc, make-kpkg,運(yùn)行menuconfig等等和編譯內(nèi)核相關(guān)的工具。
安裝不了,請(qǐng)檢查/etc/apt/sources.list 文件。
有關(guān)命令:
$sudo apt-get install build-essential kernel-package libncurses5-dev
make-kpkg是一種新的編譯內(nèi)核的方法,后面會(huì)單獨(dú)講。
kernel-package是為了安裝make-kpkg。
libncurses5-dev是menuconfig需要的庫。
解壓源代碼
注意,網(wǎng)上很多教程上說應(yīng)該解壓到 /usr/src,純屬以訛傳訛,linux掌門人linus說解壓到任何目錄上都可以。當(dāng)然,linus的說法是正確的。我放在自己的主目錄下的src目錄。
如果你下載源代碼是放到自己的主目錄下或者運(yùn)行上面的wget下載的,那么運(yùn)行下列命令:
$ cd ~
$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/
現(xiàn)在,源代碼就在 ~/src/linux-2.6.25.10
注意目錄容量要到達(dá)1.5G
進(jìn)入源代碼的目錄,準(zhǔn)備下一步的工作。后面都在這個(gè)目錄里面進(jìn)行。
$ cd ~/src/linux-2.6.25.10
配制內(nèi)核config
首先,清理以前編譯時(shí)留下的臨時(shí)文件。如果是剛剛解開的包,不需要執(zhí)行這步。如果是第二次或者是第n次編譯,那么一定要執(zhí)行。
相關(guān)命令如下:
$ sudo make mrproper
網(wǎng)上很多教程上說把現(xiàn)在使用的內(nèi)核的config拷貝過來參考,據(jù)實(shí)驗(yàn),是不需要的,ubuntu還有debian會(huì)自動(dòng)做這步。不過這條命令倒是可以學(xué)習(xí)一下。當(dāng)然你可以將以前的配置拷貝過來。
命令:
cp /boot/config-`uname -r` ./.config
./.config的意思是拷貝到當(dāng)前目錄并以.config重命名。
注意:在配制內(nèi)核時(shí),修改的文件為linux-2.6.25.10文件夾中的.config文件。這是個(gè)隱藏文件,更改查看方式可以看到。是make mrproper時(shí)自動(dòng)拷貝過來的,下載的源包中沒有。
相關(guān)命令
#make config:基于文本的最為傳統(tǒng)的配置界面,不推薦使用
#make menuconfig:基于文本選單的配置界面,字符終端下推薦使用
#make xconfig:基于圖形窗口模式的配置界面,Xwindow下推薦使用
#make oldconfig:如果只想在原來內(nèi)核配置的基礎(chǔ)上修改一些小地方,會(huì)省去不少麻煩
#make defconfig :按默認(rèn)選項(xiàng)對(duì)內(nèi)核進(jìn)行配置(386的默認(rèn)配置是Linus做的)
#make allnoconfig : 除必須的選項(xiàng)外, 其它選項(xiàng)一律不選. (常用于嵌入式系統(tǒng))
配置2.6.0內(nèi)核時(shí)如果你的主板是Intel芯片的話,你用默認(rèn)配制也許就可以得到一個(gè)滿意的內(nèi)核哦。做法是make menuconfig后離開時(shí)選擇保存。
這里的難點(diǎn)是pci,如果你硬盤是IDE的那一定要選擇好你主板上南橋芯片。SCSI的話就是要選擇上你的SCSI卡型號(hào)。
還有就是網(wǎng)卡,聲卡芯片的型號(hào)了,他們的型號(hào)你都可以用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)文件系統(tǒng)
請(qǐng)務(wù)必要選中ext3文件系統(tǒng),
File systems--->
[*] Ext3 journalling file system support
[*] Ext3 Security Labels
[*] JBD (ext3) debugging support
以上三項(xiàng)一定要選上,而且要內(nèi)建(即標(biāo)*). 這個(gè)非常重要,在配置完后一定要檢查一下.config文件有沒有"CONFIG_EXT3_FS=y"這一項(xiàng).
如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在運(yùn)行內(nèi)核時(shí)就會(huì)遇上以下錯(cuò)誤: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed
2)網(wǎng)卡驅(qū)動(dòng)
務(wù)必把自己網(wǎng)卡對(duì)應(yīng)的驅(qū)動(dòng)編譯進(jìn)內(nèi)核,比較普遍的網(wǎng)卡是realtek 8139,以下就是這種網(wǎng)卡的配置,以供參考
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)聲卡驅(qū)動(dòng)
也要選擇自己聲卡對(duì)應(yīng)的驅(qū)動(dòng)編譯進(jìn)內(nèi)核,比較普遍的聲卡是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)
以上三項(xiàng)配置關(guān)系到新內(nèi)核能否正常運(yùn)行,請(qǐng)備加注意.其他的配置如果不是很了解,大可以按默認(rèn)的選擇.