編譯核心操作流程 ──為新手指南

來源:互聯網
上載者:User
一、為什麼要編譯核心;

有時我們為了實現某些功能,比如對iptables的防火牆有些需要核心支援;還有實現一些硬體的支援等,這時我們需要重編核心;


二、核心源碼版本的選擇;

如果發行版本提供核心源碼,最好還是用發行版本提供的;比如Fedora 4.0 提供了很多版本的核心源碼;我們安裝好後,他內建的設定檔大多能滿足我們的需要,對於新手來說,根據內建的核心的設定檔.config ,我們也能學到一點如何配置核心。也沒有什麼難的,熟能生巧罷了;

如果從 kernel.org 下載最新穩定版本的核心也是可以的;


三、核心源碼安裝或解壓;

對於Fedora Core 4.0 來說,核心源碼是放在 /usr/src/kernels 目錄中;如果通過線上升級核心,也是放在這個目錄中;如果您的系統中的 /usr/src/kernels/ 中沒有內容,說明您沒有安裝核心的源碼包 kernel-devel 軟體包;

您可以通過軟體包管理器來補裝 ,請參考 《Fedora / Redhat 軟體包管理指南》

如果您用Fedora Core 4.0 ,我建議您在保留老核心的基礎上,線上下載最新版本的核心 kerenl-devel 和對應版本的 kernel 或者從 kernel.org 下載,有時可能新的kerenl 已經解決了您所面對的問題,這時就沒有必要編譯核心了;

如果您是通過線上安裝的核心源碼包 ,比如通過 apt+synaptic 或者yum 安裝的,核心源碼會被放到/usr/src/kernel 下的目錄中,您要進入相對應的目錄進行編譯;

線上更新軟體包,請參考 《Fedora / Redhat 軟體包管理指南》,推薦 apt+synaptic 工具;

如果您是是下載kernel 和kernel-devel 的rpm 包,可以通過來安裝;

[root@localhost beinan]# rpm -ivh kernel*.rpm

 

如果您是從kernel.org 下載的類似 linux-2.6.13.tar.bz2 或者 linux-2.6.13.tar.gz的,您要把下載下來的檔案移到 /usr/src 目錄中解壓; 然後進入解壓的目錄中進行配置和編譯;

[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為例,其實通過發行版的升級版的kernel-devel 和從kernel.org 下載下來的差不多,大同小異;不同的是通過線上升級的rpm格式的核心源碼包,有設定檔.config 可以參考;安裝到的目的地是/usr/src/kernel 對FC 4.0來說;如果您要高編譯和配置核心,


四、核心的配置;


1、進入目錄執行 make mrproper ,對於從 kernel.org 下載而來的tar.bz格式的源碼包;

[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 ,如果您是通過線上安裝的 kernel和kernel-devel 新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直進入 /usr/src/kernel/相應的目錄中直接執行 make menuconfig ;利用發行版本提供的 .config 來配置,這樣方便點。不要make mrproper ,否則.config 就沒有了;這也是為什麼要用發行版本提供的核心源碼升級包的原因;

其它配置和安裝大同小異;模仿總可以吧;


2.簡要的配置核心;

進入配置核心的配置模式後,我們可能一無所知,看下面;

核心配置有兩種方法,一種是直接置入核心 * ;另一種是編成模組 M ;兩種方法各有優點;直接編入核心的,比如裝置的啟動,不再需要載入模組的這一過程了;而編譯成模組,則需要載入裝置的核心支援的模組;但直接把所有的東西都編入核心也不是可行的,核心體積會變大,系統負載也會過重。我們編核心時最好把極為重要的編入核心;其它的如果您不明白的,最好用預設。


1)移動鍵盤上下左右鍵,按Enter 進入一個目錄。把指標移動到Exit就退出目前的目錄到上級目錄;

選擇自己機器的CPU;

2)針對自己機器存在的問題進行修改,比如大記憶體的支援;

移動鍵盤到 Processor type and features ---> ,然後按ENTER進入;
找到 Processor family (Pentium-Pro) ---> 按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]+?的按鍵組合來查看說明。一般的情況下,2.6.x的核心會根據機器的情況自動配出一個檔案,只需要我們來查看一下,把重要的地方改改就行了;

再舉個例子:比如我現在所用的音效卡是intel ac97的,我應該怎麼配置呢?

首先要知道自己的音效卡的晶片集,我們要通過lspci -v 來查看;

[root@localhost beinan]#lspci -v

只查看音效卡的,應該用如下的方法:[root@localhost beinan]# 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改成核心*來支援; 如果您不明白,就按預設進行;SATA的硬碟的支援除了選中SATA的支援、IDE裝置的支援以外,還要選中SCSI的支援;

5)對於咱們所沒有的裝置,可以在核心中不選,熟能生巧罷了;

比如我沒有ISDN裝置 ,所以就把ISDN去掉;

ISDN subsystem --->
< > Linux telephony support

 

如果您沒有1394的裝置 ,當然可以把1394的支援也去掉;等等。。。。。。。

如果您有USB的裝置,要把USB方面好好看看;比如大家常用的移動硬碟;USB貓等,還有掃描器等;

核心配置就說這麼多吧,太多了,我也說不清楚,水平有限啊;

配置好後先要儲存

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儲存起來,可以再複製一份到安全一點的目錄,以備後用;

五、編譯核心;

 

[root@localhost linux-2.6.12.3]# make
[root@localhost linux-2.6.12.3]# make modules_install

 

這樣就編譯好了,並把模組也安裝在了 /lib/modules目錄中了,請看:

[root@localhost linux-2.6.12.3]# ls /lib/modules/
2.6.11-1.1369_FC4 2.6.12.3

 


六、安裝核心及配置grub或lilo ;


1、複製bzImage等相關檔案,並建立initrd檔案;

[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

 

我們把 編譯出來的bzImage,拷入到/boot目錄,拷貝成 vmlinuz-2.6.12.3;
並且用 mkinitrd 來建立imitrd-xxx.img 檔案,其中xxx為核心的版本號碼,是通過 查看 /lib/modules來版本來對應的,我們是編譯出來的是 2.6.12.3,所以就運行上面的命令建立,建立的出來的是initrd-2.6.12.3.img ;不建立這個檔案,有時是啟動不起來的,比如提示VFS錯誤等;


2、查看系統引導管理器grub或者lilo的設定檔。

如果想要讓新核心能讓系統引導管理器grub和lilo的菜單上能看得到,必須改 grub.conf或者lilo.conf,但我們必須保留老核心的在grub和lilo的啟動菜單,畢竟我們編核心不能百分百的成功,對不對??安全第一吧;

我只說grub的,我沒有lilo,也不會用。所以咱們還是GRUB吧,FC 4 系統引導管理器是 GRUB,所以我們談談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錯誤,可能就是我寫重要的那個地方出了錯誤;

注意:如果重新啟用核心後,原來安裝的顯示卡驅動,比如 NVIDIA和ATI的驅動還要重新安裝;

後記:

為寫音效卡及其其它硬體裝置的安裝教程做準備,重寫此文檔;並更正一些錯誤;

附錄:

1、《核心管理概述》
2、 《Fedora / Redhat 軟體包管理指南》
3、核心主站:http://kernel.org

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.