linux 內核編譯祥解

新內核可以在http://www.kernel.org下載。

先把linux-2.6.18.2.tar.bz2 複製到/usr/src/ 的下面

tar jxvf  linux-2.6.18.2.tar.bz2

cd linux-2.6.18.2

 

make mrproper 把原來編譯產生的垃圾刪除

 

配置內核可以根據需要與愛好使用下面命令中的一個:

make config (基於文本的最爲傳統的配置界面)

make menuconfig (基於文本選單的配置界面)

make xconfig (基於圖形窗口模式的配置界面)

make oldconfig (如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩)

 

進行配置時,大部分選項可以使用其缺省值,只有小部分需要根據用戶不同的需要選擇。例如,如果需要內核支持DOS分區的文件系統,則要在文件系統部分選擇FATDOS系統支持;系統如果配有網卡、PCMCIA卡等,需要在網絡配置中選擇相應卡的類型。

                          

選擇相應的配置時,有三種選擇,它們分別代表的含義如下:

                          

 Y”- 將該功能編譯進內核

                          

 N”- 不將該功能編譯進內核

                          

 M”- 將該功能編譯成可以在需要時動態插入到內核中的模塊。

                          

    將與核心其它部分關係較遠且不經常使用的部分功能代碼編譯成爲可加載模塊,有利於減小內核的長度,減小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響。許多功能都可以這樣處理,例如像上面提到的網卡的支持、對FAT等文件系統的支持。

                          

其實現在編譯內核最關鍵的地方就是配置內核。我一般用make menuconfig配置內核。

配置2.6.0內核時如果你的主板是Intel芯片的話,你用默認配製也許就可以得到一個滿意的內核哦。做法是make  menuconfig後離開時選擇保存。

這裏的難點是pci,如果你硬盤是IDE的那一定要選擇好你主板上南橋芯片。SCSI的話就是要選擇上你的SCSI卡型號。

還有就是網卡,聲卡芯片的型號了,他們的型號你都可以用lspci 查找到比如我的是。

 

[root@leo boot]# 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)

 

編譯配置

在這一部分涉及幾個重要模塊的配置請,特別注意.一般用"make menuconfig"命令來配置內核.

輸入以上命令後出現一個菜單界面,用戶可以對需要的模塊.下面着重講幾個重要的配置

1)文件系統

請務必要選中ext3文件系統,

  File systems--->

  [*] Ext3 journalling file system support

  [*] Ext3 Security Labels

  [*] JBD (ext3) debugging support

  以上三項一定要選上,而且要內建(即標*). 這個非常重要,在配置完後一定要檢查一下.config文件有沒有"CONFIG_EXT3_FS=y"這一項如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在運行內核時就會遇上以下錯誤: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed

  

2)網卡驅動

  請務必把自己網卡對應的驅動編譯進內核,比較普遍的網卡是realtek 8139,以下就是這種網卡的配置,以供參考

  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)聲卡驅動

  也要選擇自己聲卡對應的驅動編譯進內核,比較普遍的聲卡是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)

以上三項配置關係到新內核能否正常運行,請備加註意.其他的配置如果不是很瞭解,大可以按默認的選擇.

 

make dep (確保關鍵文件在正確的位置) 2.5.*-2.6.0都不需要了。其實2.4.*某些內核也不需要了。

                          

make clean (確保所有有關文件都處於最新版本狀態)

                          

make zImage (編譯壓縮形式的內核)

                          

在需要內核支持較多的外設和功能時,內核可能變得很大,此時可以編譯大內核:

                          

make bzImage

                          

編譯的時間與機器的硬件條件及內核的配置等因素有關,所獲得的內核的位置在/usr/src/linux/arch/i386/boot目錄下,當然這裏假設用戶的CPUx86型的。

                          

如果選擇了可加載模塊,編譯完內核後,要對選擇的模塊進行編譯:

                          

make modules (編譯選擇的模塊)

                          

make module_install (將編譯後的模塊轉移到系統標準位置)

 

# make install

 

上面的命令"make install":

 (1)把壓縮內核映象拷貝到/boot目錄下並創建相應的System.map符號鏈接

 (2)修改bootloader的配置文件;

 (3)調用mkinitrd程序創建內核的initrd映象對於GRUB而言將在/boot/grub/grub.conf配置文件增加如下類似的配置行:

 

      title Red Hat Linux (2.***)

      root(hd0, 1)

      kernel /boot/vmlinuz-2.*** ro root=LABEL=/

      initrd /boot/initrd-2.***.img

                          

模塊在系統中的標準目錄位於/lib/modules/x.y.z,後面的x.y.z是版本號,爲安全起見,在運行#make  modules_install之前最好對/lib/modules進行備份。模塊通常是帶有擴展名.o的文件,使用命令lsmod可以對當前內核的模塊進行列表。

                          

我一般是make bzImagemake modulesmake module_install; make install

                          

運行新內核之前,請檢查一下/boot/grub/grub.conf的內容,下面的配置可作參考

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00

#          initrd /initrd-version.img

#boot=/dev/hda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Fedora Core (2.6.18.2)

        root (hd0,0)

        kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

        initrd /initrd-2.6.18.2.img

title Fedora Core (2.6.18-1.2798.fc6)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

        initrd /initrd-2.6.18-1.2798.fc6.img

 

現在重啓機器,即可測試最新的內核。

發佈了0 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章