一般的情況下,編譯內核對初學者來說的確是有點難度,對於象我這樣剛入門的來說,也是一個考驗。畢竟時間和精力有限,我沒有時間把內核的所有文檔看完,也沒有辦法完全弄懂。如果您的現實情況和我差不多,並且對內核編譯不是太懂,或者說沒有編譯過。那不妨您看一下我寫的這篇;
其實編譯內核最花時間不是編譯過程,而是配置和排錯的過程;所以咱們用slackware的內核配置文件能把這個過程的時間省下來。省下來的時間做點什麼呢??做點想做的吧;哈哈。
用Slackware內核的配置文件來編譯自己的內核,無論你用的發行版本是什麼的,都可以用這個方法來實踐;
爲什麼要用slackware的內核配置文件來編譯適合自己機器的內核呢??
Slackware的內核配置文件,都是現成的,早已配置好的,而且在Slackware中運行也是極爲穩定。對於不會配置內核的新手弟兄,是一本最好的教材。另外Slackware的配置文件編譯出來的內核不算太大。
其實我寫本文的目的就是讓新手用最短的時間內學會內核配置,別無它意;
本文適合:初初級新手;
注意事項:內核版本必須與Slackware提供的配置內核配置文件相對應;如果不太明白,或者我的表達不太準確,就直接安我說的做就行;
實踐環境:Fedora core 4.0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、下載官方current 的testing內核的源碼;
地址:http://www.slackware.com/getslack/
從上面的地址找鏡像,一般的情況下美國和日本的要快一點;
比如我們通過下面的地址得到 testing的內核 linux-2.6.12.3的源碼目錄;
ftp://slackware.mirrors.tds.net/pub/...inux-2.6.12.3/
我們要下載linux-2.6.12.3目錄下的 linux-2.6.12.3.tar.bz2 ,接着下載 config-2.6.12.3
下載好了,我們進入下一步;
二、利用Slackware官方提供的 config-2.6.12.3文件來簡單配置自己的內核配置文件 .config ;
1.解壓內核及一些基礎工作;
bash-3.00#tar jxvf linux-2.6.12.3.tar.bz2
bash-3.00# mv linux-2.6.12.3 /usr/src 把解壓的內核移到/usr/src目錄中
bash-3.00# cd /usr/src
bash-3.00# ls -lh
drwxr-xr-x 3 root root 4.0K 8月 3 12:49 kernels
drwxr-xr-x 19 root root 4.0K 8月 7 16:33 linux-2.6.12.3
drwxr-xr-x 7 root root 4.0K 8月 3 12:27 redhat
bash-3.00#cd linux-2.6.12.3
bash-3.00# pwd
/usr/src/linux-2.6.12.3
下一步是把下載下來的config-2.6.12.3這個文件複製到 /usr/src/linux-2.6.12.3中,然後接着複製成.config文件。
bash-3.00#cp config-2.6.12.3 .config 把config-2.6.12.3複製爲.config
2.簡要的配置內核;
bash-3.00#make menuconfig 進入配置內核的配置模式 ;
內核配置有兩種方法,一種是直接置入內核[*];另一種是編成模塊[M];兩種方法各有優點;直接編入內核的,比如設備的啓動,不再需要加載模塊的這一過程了;而編譯成模塊,則需要加載設備的內核支持的模塊;但直接把所有的東西都編入內核也不是可行的,內核體積會變大,系統負載也會過重。我們編內核時最好把極爲重要的編入內核;其它的如果您不明白的,最好用默認。slackware的內核配置文件是最好的教程;
1]移動鍵盤,選中 Load an Alternate Configuration File 項,把.config 調進來方便我們配置;因爲這個配置文件是Slackware已經配置好的,我們只是稍加修改就行。
2]針對自己機器存在的問題進行修改;比如我們在前文所提到的大內存支持的問題;
選擇自己機器的CPU;
移動鍵盤到 Processor type and features ---> ,然後按ENTER進入;
找到 Processor family (486) ---> 按ENTER進入;
進入後我們發現有好多CPU的型號可選;一般的情況下要根據
bash-3.00# cat /proc/cpuinfo 輸出的信息來選,比如我們的是Celeron (P4)一代的,應該選如下的,當然默認的 486也是可以正常運行的,既然我們重編一次內核,就得選中對應型號的,也許性能有所提高呢;
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)
對大內存支持;如果內存是1G或者1G以上,但小於4G的,就要選4G支持;如果超過4G的,要選64G的支持;
High Memory Support (4GB) --->
(X) 4GB
( ) 64GB
還有比如聲卡等硬件,需要我們一步一步的查看;如果有不明之處,就要按 [shift]+?的組合鍵來查看說明。一般的情況下,slackware的config文件早都配置好了,只需要我們來查看一下就可以了。
再舉個例子:比如我現在所用的聲卡是intel ac97的,我應該怎麼配置呢?
首先要知道自己的聲卡的芯片組,我們要通過lspci -v 來查看;
bash-3.00# lspci -v
只查看聲卡的,應該用如下的方法:
bash-3.00# lspci -v |grep audio
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
通過上面的輸出,我們知道這臺機器用的是intel AC97聲卡;所以我們要特別注意AC97的配置;
找到 Device Drivers ---> Sound --->
<M> Sound card support 聲卡的支持,這個是一定要選中的吧;
<M> Advanced Linux Sound Architecture 對聲卡支持的ALSA驅動的支持;下面有OSS驅動,只是一部份。如果想用OSS的驅動更全的,可以去買;其它的就看如下的選吧;
<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
然後我們再向下看有
Generic devices ---> 進入裏面
<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聲卡內核支持選項;我有一個這樣的聲卡,但沒有試過;
PCMCIA devices ---> 這是PCMCIA聲卡的選項,我還沒有看過這樣的聲卡呢;如果您有,就在這裏面動動手吧。
因爲我用的是Intel 集成的聲卡,所以要在PCI中選擇,我們在 中可以看到有兩個與INTEL有關的;
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller 這個纔是Intel AC97聲卡的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 這個是機器集成的INTEL貓的蜂鳴器的;
因爲我發現如果把貓的蜂鳴器的驅動也選上,可能造成兩個衝突。所以只能選上面的那個;
我們再回到 Open Sound System ---> 中看看,與我用的聲卡是不是有關的?
<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中也有好多的聲卡驅動,大家根據前面的lspci -v 來選擇吧。
3]對於操作系統所採用的文件系統的支持要編入內核,最好不要編成模塊;(重要)
比如我的Fedora core 4.0 所採用的文件系統用的是ext3 ,所以我要把它直接編入內核;好處是不受模塊丟失或者損壞而不能啓動系統;而有時您把系統所採用的文件系統編譯成模塊,出現VFS錯誤,也有這方面的事,可能是您沒有把ext3加入到相應的加載模塊的配置文件中,所以我們爲了減少麻煩,把風險降到最低,還是要直接置入內模的好;
File systems --->
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
如果您還有其它的硬盤分區要讀取,比如是reiserfs、ext2、fat、fat32、ntfs等,這樣的可以編成模塊來支持;
再舉一例:如果您的的操作系統用的是reiserfs的文件系統,當然就要把reiserfs的直接編入內核,其它的可以編成模塊來支持了;
4]對於硬盤及RAID的支持,要直接編入內核;
比如ATA、SATA、SCSI及RAID的支持直接內核支持;有時編完內核後,啓動時不能識別硬盤和RAID,大多事情出在這裏;Slackware中在這方面有的是模塊支持,我們可以把它由<M>改成<*>來支持; 如果您不明白,就按默認進行;
5]對於咱們所沒有的設備,可以在內核中不選,熟能生巧罷了;
比如我沒有ISDN設備 ,所以就把ISDN去掉;
ISDN subsystem --->
< > Linux telephony support
如果您沒有1394的設備 ,當然可以把1394的支持也去掉;
等等。。。。。。。
內核配置就說這麼多吧,太多了,我也說不清楚,水平有限啊;
配置好後先要保存
Save Configuration to an Alternate File
出來一個
Enter a filename to which this configuration ,should be saved as an alternate. Leave blank to abort.
.config
按回車就行了,這樣就保存住了;
然後退出 < Exit > ,這時也會出現保存 ;
如果你想把.config保存起來,可以再複製一份到安全一點的目錄,以備後用;
3]編譯內核
bash-3.00# make
bash-3.00# make modules_install
這樣就編譯好了,並把模塊也安裝在了 /lib/modules目錄中了,請看:
bash-3.00# ls /lib/modules/
2.6.11-1.1369_FC4 2.6.12.3
4]爲Fedora core 4.0 安裝內核;
bash-3.00# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
bash-3.00# cp System.map /boot/System.map-2.6.12.3
bash-3.00# cd /boot
bash-3.00# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3 這個是用來創新initrd映像的,不創建這個文件,有時是啓動不起來的,比如提示VFS錯誤等;
4.查看系統引導管理器grub或者lilo的配置文件。
如果想要讓新內核能讓系統引導管理器grub和lilo的菜單上能看得到,必須改 grub.conf或者lilo.conf,但我們必須保留老內核的在grub和lilo的啓動菜單,畢竟我們編內核不能百分百的成功,對不對??安全第一吧;
我只說grub的,我沒有lilo,也不會用。所以咱們還是GRUB吧。
查看 /etc/grub.conf;
比如我的grub.conf的內容是這樣的;
我們要把老內核的啓動保留下來,以防不測,我們只加入新的內核的啓動;所以我加上這樣一段;
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
咱們再來看一下改過後的配置文件;
然後重新啓動機器,如果出現VFS錯誤,可能就是我寫重要的那個地方出了錯誤;