編譯內核

寫在前面的話:

一般的情況下,編譯內核對初學者來說的確是有點難度,對於象我這樣剛入門的來說,也是一個考驗。畢竟時間和精力有限,我沒有時間把內核的所有文檔看完,也沒有辦法完全弄懂。如果您的現實情況和我差不多,並且對內核編譯不是太懂,或者說沒有編譯過。那不妨您看一下我寫的這篇;


其實編譯內核最花時間不是編譯過程,而是配置和排錯的過程;所以咱們用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的內容是這樣的;
代碼:
# 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


我們要把老內核的啓動保留下來,以防不測,我們只加入新的內核的啓動;所以我加上這樣一段;

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



咱們再來看一下改過後的配置文件;

代碼:
# 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


然後重新啓動機器,如果出現VFS錯誤,可能就是我寫重要的那個地方出了錯誤;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章