提要: 編譯內核主要是通過(guò)內核實(shí)現某些功能,比如iptables 需要內支持;所有的硬件的支持也是通過(guò)內核實(shí)現的;本文只是簡(jiǎn)單的給初學(xué)者講一下編譯內核的流程;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、為什么要編譯內核;
有時(shí)我們?yōu)榱藢?shí)現某些功能,比如對iptables的防火墻有些需要內核支持;還有實(shí)現一些硬件的支持等,這時(shí)我們需要重編內核;
二、內核源碼版本的選擇;
如果發(fā)行版本提供內核源碼,最好還是用發(fā)行版本提供的;比如Fedora 4.0 提供了很多版本的內核源碼;我們安裝好后,他自帶的配置文件大多能滿(mǎn)足我們的需要,對于新手來(lái)說(shuō),根據自帶的內核的配置文件.config ,我們也能學(xué)到一點(diǎn)如何配置內核。也沒(méi)有什么難的,熟能生巧罷了;
如果從 kernel.org 下載最新穩定版本的內核也是可以的;
三、內核源碼安裝或解壓;
對于Fedora Core 4.0 來(lái)說(shuō),內核源碼是放在 /usr/src/kernels 目錄中;如果通過(guò)在線(xiàn)升級內核,也是放在這個(gè)目錄中;如果您的系統中的 /usr/src/kernels/ 中沒(méi)有內容,說(shuō)明您沒(méi)有安裝內核的源碼包 kernel-devel 軟件包;
您可以通過(guò)軟件包管理器來(lái)補裝 ,請參考 《Fedora / Redhat 軟件包管理指南》
如果您用Fedora Core 4.0 ,我建議您在保留老內核的基礎上,在線(xiàn)下載最新版本的內核 kerenl-devel 和對應版本的 kernel 或者從 kernel.org 下載,有時(shí)可能新的kerenl 已經(jīng)解決了您所面對的問(wèn)題,這時(shí)就沒(méi)有必要編譯內核了;
如果您是通過(guò)在線(xiàn)安裝的內核源碼包 ,比如通過(guò) apt+synaptic 或者yum 安裝的,內核源碼會(huì )被放到/usr/src/kernel 下的目錄中,您要進(jìn)入相對應的目錄進(jìn)行編譯;
在線(xiàn)更新軟件包,請參考 《Fedora / Redhat 軟件包管理指南》,推薦 apt+synaptic 工具;
如果您是是下載kernel 和kernel-devel 的rpm 包,可以通過(guò)來(lái)安裝;
QUOTE:
[root@localhost beinan]# rpm -ivh kernel*.rpm
如果您是從kernel.org 下載的類(lèi)似 linux-2.6.13.tar.bz2 或者 linux-2.6.13.tar.gz的,您要把下載下來(lái)的文件移到 /usr/src 目錄中解壓; 然后進(jìn)入解壓的目錄中進(jìn)行配置和編譯;
QUOTE:
[root@localhost beinan]# mv linux-2.6.13.tar.bz2
[root@localhost beinan]# cd /usr/src/
[root@localhost src]# tar jxvf linux-2.6.12.3.tar.bz2
提示:本文以linux-2.6.12.3為例,其實(shí)通過(guò)發(fā)行版的升級版的kernel-devel 和從kernel.org 下載下來(lái)的差不多,大同小異;不同的是通過(guò)在線(xiàn)升級的rpm格式的內核源碼包,有配置文件.config 可以參考;安裝到的目的地是/usr/src/kernel 對FC 4.0來(lái)說(shuō);如果您要高編譯和配置內核,
四、內核的配置;
1、進(jìn)入目錄執行 make mrproper ,對于從 kernel.org 下載而來(lái)的tar.bz格式的源碼包;
QUOTE:
[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]#
[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]# make mrproper
[root@localhost linux-2.6.12.3]# make menuconfig
對于Fedora Core 4.0 ,如果您是通過(guò)在線(xiàn)安裝的 kernel和kernel-devel 新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直進(jìn)入 /usr/src/kernel/相應的目錄中直接執行 make menuconfig ;利用發(fā)行版本提供的 .config 來(lái)配置,這樣方便點(diǎn)。不要make mrproper ,否則.config 就沒(méi)有了;這也是為什么要用發(fā)行版本提供的內核源碼升級包的原因;
其它配置和安裝大同小異;模仿總可以吧;
2.簡(jiǎn)要的配置內核;
進(jìn)入配置內核的配置模式后,我們可能一無(wú)所知,看下面;
內核配置有兩種方法,一種是直接置入內核 * ;另一種是編成模塊 M ;兩種方法各有優(yōu)點(diǎn);直接編入內核的,比如設備的啟動(dòng),不再需要加載模塊的這一過(guò)程了;而編譯成模塊,則需要加載設備的內核支持的模塊;但直接把所有的東西都編入內核也不是可行的,內核體積會(huì )變大,系統負載也會(huì )過(guò)重。我們編內核時(shí)最好把極為重要的編入內核;其它的如果您不明白的,最好用默認。
1)移動(dòng)鍵盤(pán)上下左右鍵,按Enter 進(jìn)入一個(gè)目錄。把指針移動(dòng)到Exit就退出當前目錄到上級目錄;
2)針對自己機器存在的問(wèn)題進(jìn)行修改,比如大內存的支持;
選擇自己機器的CPU;
移動(dòng)鍵盤(pán)到 Processor type and features ---> ,然后按ENTER進(jìn)入;
找到 Processor family (Pentium-Pro) ---> 按ENTER進(jìn)入;
進(jìn)入后我們發(fā)現有好多CPU的型號可選;一般的情況下要根據
bash-3.00# cat /proc/cpuinfo 輸出的信息來(lái)選,比如我們的是Celeron (P4)一代的,應該選如下的,當然默認的 486也是可以正常運行的,既然我們重編一次內核,就得選中對應型號的,也許性能有所提高呢;
QUOTE:
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)
對大內存支持;如果內存是1G或者1G以上,但小于4G的,就要選4G支持;如果超過(guò)4G的,要選64G的支持;
QUOTE:
High Memory Support (4GB) --->
(X) 4GB
( ) 64GB
還有比如聲卡等硬件,需要我們一步一步的查看;如果有不明之處,就要按 [shift]+?的組合鍵來(lái)查看說(shuō)明。一般的情況下,2.6.x的內核會(huì )根據機器的情況自動(dòng)配出一個(gè)文件,只需要我們來(lái)查看一下,把重要的地方改改就行了;
再舉個(gè)例子:比如我現在所用的聲卡是intel ac97的,我應該怎么配置呢?
首先要知道自己的聲卡的芯片組,我們要通過(guò)lspci -v 來(lái)查看;
QUOTE:
[root@localhost beinan]#lspci -v
只查看聲卡的,應該用如下的方法:
QUOTE:
[root@localhost beinan]# lspci -v |grep audio
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC‘97 Audio Controller (rev 03)
通過(guò)上面的輸出,我們知道這臺機器用的是intel AC97聲卡;所以我們要特別注意AC97的配置;
QUOTE:
找到 Device Drivers ---> Sound --->
<M> Sound card support 聲卡的支持,這個(gè)是一定要選中的吧;
<M> Advanced Linux Sound Architecture 對聲卡支持的ALSA驅動(dòng)的支持;
下面有OSS驅動(dòng),只是一部份。如果想用OSS的驅動(dòng)更全的,可以去買(mǎi);其它的就看如下的選吧;
<M> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
OSS Sequencer API
<M> RTC Timer support
Verbose printk
[ ] Debug
大多是默認的就好,如果您不知道是做什么用的,或者怎么用;
然后我們再向下看有
QUOTE:
Generic devices ---> 進(jìn)入里面
<M> Dummy (/dev/null) soundcard
<M> Virtual MIDI soundcard
<M> MOTU MidiTimePiece AV multiport MIDI
<M> UART16550 serial MIDI driver
<M> Generic MPU-401 UART driver
ISA devices ---> 如果您用ISA聲卡就在這里面選;
PCI devices ---> 如果您用PCI聲卡,就在這里面選,集成聲卡也在這里;
USB devices ---> 這是USB聲卡內核支持選項;我有一個(gè)這樣的聲卡,但沒(méi)有試過(guò);
PCMCIA devices ---> 這是PCMCIA聲卡的選項,我還沒(méi)有看過(guò)這樣的聲卡呢;如果您有,就在這里面動(dòng)動(dòng)手吧。
因為我用的是Intel 集成的聲卡,所以要在PCI中選擇,我們在 中可以看到有兩個(gè)與INTEL有關(guān)的;
QUOTE:
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller 這個(gè)才是Intel AC97聲卡的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 這個(gè)是機器集成的INTEL貓的蜂鳴器的;
因為我發(fā)現如果把貓的蜂鳴器的驅動(dòng)也選上,可能造成兩個(gè)沖突。所以只能選上面的那個(gè);
我們再回到 Open Sound System ---> 中看看,與我用的聲卡是不是有關(guān)的?
QUOTE:
<M> Open Sound System (DEPRECATED)
<M> Intel ICH (i8xx) audio support
<M> OSS sound modules
<M> Loopback MIDI device support
<M> Microsoft Sound System support
我們也可以看到Open Sound System中也有好多的聲卡驅動(dòng),大家根據前面的lspci -v 來(lái)選擇吧。
3)對于操作系統所采用的文件系統的支持要編入內核,最好不要編成模塊;(重要)
比如我的Fedora core 4.0 所采用的文件系統用的是ext3 ,所以我要把它直接編入內核;好處是不受模塊丟失或者損壞而不能啟動(dòng)系統;而有時(shí)您把系統所采用的文件系統編譯成模塊,出現VFS錯誤,也有這方面的事,可能是您沒(méi)有把ext3加入到相應的加載模塊的配置文件中,所以我們?yōu)榱藴p少麻煩,把風(fēng)險降到最低,還是要直接置入內模的好;
QUOTE:
File systems --->
<*> Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
如果您還有其它的硬盤(pán)分區要讀取,比如是reiserfs、ext2、fat、fat32、ntfs等,這樣的可以編成模塊來(lái)支持;
再舉一例:如果您的的操作系統用的是reiserfs的文件系統,當然就要把reiserfs的直接編入內核,其它的可以編成模塊來(lái)支持了;
4)對于硬盤(pán)及RAID的支持,要直接編入內核;
比如ATA、SATA、SCSI及RAID的支持直接內核支持;有時(shí)編完內核后,啟動(dòng)時(shí)不能識別硬盤(pán)和RAID,大多事情出在這里;Slackware中在這方面有的是模塊支持,我們可以把它由模塊M改成內核*來(lái)支持; 如果您不明白,就按默認進(jìn)行;SATA的硬盤(pán)的支持除了選中SATA的支持、IDE設備的支持以外,還要選中SCSI的支持;
5)對于咱們所沒(méi)有的設備,可以在內核中不選,熟能生巧罷了;
比如我沒(méi)有ISDN設備 ,所以就把ISDN去掉;
QUOTE:
ISDN subsystem --->
< > Linux telephony support
如果您沒(méi)有1394的設備 ,當然可以把1394的支持也去掉;等等。。。。。。。
如果您有USB的設備,要把USB方面好好看看;比如大家常用的移動(dòng)硬盤(pán);USB貓等,還有掃描儀等;
內核配置就說(shuō)這么多吧,太多了,我也說(shuō)不清楚,水平有限??;
配置好后先要保存
QUOTE:
Save Configuration to an Alternate File
出來(lái)一個(gè)
QUOTE:
Enter a filename to which this configuration ,should be saved as an alternate. Leave blank to abort.
.config
按回車(chē)就行了,這樣就保存住了;
然后退出 Exit ,這時(shí)也會(huì )出現保存 ;
如果你想把.config保存起來(lái),可以再復制一份到安全一點(diǎn)的目錄,以備后用;
五、編譯內核;
QUOTE:
[root@localhost linux-2.6.12.3]# make
[root@localhost linux-2.6.12.3]# make modules_install
這樣就編譯好了,并把模塊也安裝在了 /lib/modules目錄中了,請看:
QUOTE:
[root@localhost linux-2.6.12.3]# ls /lib/modules/
2.6.11-1.1369_FC4 2.6.12.3
六、安裝內核及配置grub或lilo ;
1、復制bzImage等相關(guān)文件,并創(chuàng )建initrd文件;
QUOTE:
[root@localhost linux-2.6.12.3]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
[root@localhost linux-2.6.12.3]# cp System.map /boot/System.map-2.6.12.3
[root@localhost linux-2.6.12.3]# cd /boot
[root@localhost linux-2.6.12.3]# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3
我們把 編譯出來(lái)的bzImage,拷入到/boot目錄,拷貝成 vmlinuz-2.6.12.3;
并且用 mkinitrd 來(lái)創(chuàng )建imitrd-xxx.img 文件,其中xxx為內核的版本號,是通過(guò) 查看 /lib/modules來(lái)版本來(lái)對應的,我們是編譯出來(lái)的是 2.6.12.3,所以就運行上面的命令創(chuàng )建,創(chuàng )建的出來(lái)的是initrd-2.6.12.3.img ;不創(chuàng )建這個(gè)文件,有時(shí)是啟動(dòng)不起來(lái)的,比如提示VFS錯誤等;
2、查看系統引導管理器grub或者lilo的配置文件。
如果想要讓新內核能讓系統引導管理器grub和lilo的菜單上能看得到,必須改 grub.conf或者lilo.conf,但我們必須保留老內核的在grub和lilo的啟動(dòng)菜單,畢竟我們編內核不能百分百的成功,對不對??安全第一吧;
我只說(shuō)grub的,我沒(méi)有lilo,也不會(huì )用。所以咱們還是GRUB吧,FC 4 系統引導管理器是 GRUB,所以我們談?wù)凣RUB的設置;
查看 /etc/grub.conf;
比如我的grub.conf的內容是這樣的;
QUOTE:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,7)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
rootnoverify (hd0,0)
chainloader +1
我們要把老內核的啟動(dòng)保留下來(lái),以防不測,我們只加入新的內核的啟動(dòng);所以我加上這樣一段;
QUOTE:
title Fedora Core (2.6.12.3)
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img
咱們再來(lái)看一下改過(guò)后的配置文件;
QUOTE:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.12.3)
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,7)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
rootnoverify (hd0,0)
chainloader +1
然后重新啟動(dòng)機器,如果出現VFS錯誤,可能就是我寫(xiě)重要的那個(gè)地方出了錯誤;
注意:如果重新啟用內核后,原來(lái)安裝的顯示卡驅動(dòng),比如 NVIDIA和ATI的驅動(dòng)還要重新安裝;
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。