LINUX內核編譯步驟詳細介紹

www.kernel.org 下載 Linux-2.6.18.2.tar.bz2

tar –jxvf  Linux-2.6.18.2.tar.bz2 -C /usr/src/kernel
make mrproper 把原來編譯產生的垃圾刪除
 
配置內核能夠根據須要與愛好使用下面命令中的一個:
#make config (基於文本的最爲傳統的配置界面)
#make menuconfig (基於文本選單的配置界面)
#make xconfig (基於圖形窗口模式的配置界面)
#make oldconfig (若是隻想在原來內核配置的基礎上修改一些小地方,會省去很多麻煩)
 
進行配置時,大部分選項可使用其缺省值,只有小部分須要根據用戶不一樣的須要選擇。例如,若是須要內核支持DOS分區的文件系統,則要在文件系統部分選擇FAT或DOS系統支持;系統若是配有網卡、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目錄下,固然這裏假設用戶的CPU是x86型的。
                          
若是選擇了可加載模塊,編譯完內核後,要對選擇的模塊進行編譯:
                          
#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 bzImage;make modules;make 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
splashp_w_picpath=(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
 
本文來自CSDN博客,轉載請標明出處: http://blog.csdn.net/do2jiang/archive/2009/05/19/4201203.aspx
相關文章
相關標籤/搜索