linux核心編譯步驟

來源:互聯網
上載者:User

 linux核心編譯步驟     
對於linux新手來說,編譯核心相對有一些難度,甚至不知道如何入手,我通過在網上收集這方面的資料,最終編譯成功.現在
我歸納了一下,寫出這一篇還算比較詳細的步驟,希望能對各位新手有一些
協助。
1、  準備工作
(1)       整理出系統需要支援的硬體、檔案系統類型以及網路通訊協定等內容。
(2)       建議用命令uname –r 查看一下系統的版本號碼,如果你的系統版本與將要編譯的核心版本一致,建議將/lib/modules下的內容備份,否則將來的make modules_install 步驟產生的檔案會覆蓋這個路徑下的內容。
(3)       A:下載並解壓linux核心,建議從http://www.kernel.org/pub/linux/kernel/ 下載核心,因為安裝系統時所安裝的原始碼預設情況下支援很多裝置,這樣給核心裁減增加了難度。以下假設你已經下載了核心的為linux-x-y-z.tar.gz。一般都將linux核心原始碼放在/usr/src下,這裡仍然遵守這個習慣,如果你的這個路徑下已經存在這個版本的核心,建議將已有的改個名稱。

               B:如果核心已經安裝(/usr/src/目錄有linux子目錄),跳過如果沒有安裝,在光碟機中放入linux安裝光碟片,找到kernel-source-2.xx.xx.rpm檔案(xx代表數字,表示核心的版本號碼), 比如RedHat linux的RPMS目錄是/RedHat/RPMS/目錄,然後使用命令rpm -ivh kernel-source-2.xx.xx.rpm安裝核心

2、清除從前編譯核心時殘留的.o 檔案和不必要的關聯 
cd /usr/src/linux
make mrproper
    確保原始碼目錄下沒有不正確的.o檔案和檔案依賴關係,執行該命令後,核心選項會回到預設的狀態下。如果你是下載的核心源碼,而且是第一次編譯,就沒有必要執行這一步操作

3、配置核心,修改相關參數,請參考其他資料
在圖形介面下,make xconfig;字元介面下,make menuconfig
在核心配置菜單中正確設定個核心選項,儲存退出

4、正確設定關聯檔案
make dep
    根據上一步所選擇的選項,建立檔案的依賴關係。
5、make clean
清理一些不必要的檔案,如果你在上次編譯的基礎上,刪去了一些選項,建議你執行這一步操作,否則,就沒有必要了。

6、編譯核心
對於大核心(比如需要SCSI支援),make bzImage
對於小核心,make zImage

7、編譯模組
make modules
編譯可載入模組(即核心選項中選擇為M的選項),編譯時間跟M選項的數量有關。

8、安裝模組
make modules_install
   即將編譯好的modules拷貝到/lib/modules下,這就是為什麼在“準備工作”的第三步提醒你備份的原因了。

9、使用新核心
方法一:
(1)更換核心:A、mv /usr/src/linuxX.X.X/system.map    /boot/system.map
                 B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage   /boot/vmlinuz
(2)然後修改/etc/lilo.conf檔案,加一個啟動選項,使用新核心bzImage/zImage啟動。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new    ### 告訴lilo預設使用新核心啟動linux ###
append="mem=256M"

image=/boot/vmlinuz-2.2.14-5.0
        label=linux
        read-only
        root=/dev/hda5

image=/boot/bzImage(zImage)
        label=linux-new
        read-only
        root=/dev/hda5

保留舊有的啟動選項可以保證新核心不能引導的情況,還可以進入linux進行其他動作。

儲存退出後,不要忘記了最重要的一步,運行/sbin/lilo,使修改生效
方法二:使用GRUB(修改grub.conf檔案)
(1)更換核心:A、mv /usr/src/linuxX.X.X/system.map    /boot/system.map
                 B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage   /boot/vmlinuz
(2)修改引導管理程式Grub,/etc/grub.conf
內容如下:
#boot =/dev/had
default =0
timeout =10
splashimage =(hd0, 0)/grub/splash.xpm.gz
title Red Hat Linux(2.4.20-8)
   root(hd0, 0)
   kernel /vmlinuz -2.4.20-8  ro root =LABEL =/
   initrd /initrd-2.4.20-8.img
方法三:修改啟動設定檔
現在大多數使用的都是grub啟動,需要修改/boot/grub/grub.conf,添加相應的啟動資訊,新增內容的最簡單格式如下:
title 顯示在啟動菜單上的名稱
root 根檔案系統掛載分區
kernel 壓縮過的核心檔案名稱
initrd 根檔案系統檔案名稱
              如:
              title My new kernel
              root (hd0,2)
              kernel /boot/vmlinuz-x.y.z
              initrd /boot/initrd-x.y.z.img
10、重建ram磁碟
如果您的系統中的/etc/lilo.conf沒有使用了ram磁碟選項initrd,略過
如果您的系統中的/etc/lilo.conf使用了ram磁碟選項initrd,
使用mkinitrd initrd-核心版本號碼 核心版本號碼命令重建ram磁碟檔案,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之後把/etc/lilo.conf中的initrd指向新產生的initrd-2.2.14-5.0檔案:
initrd=/boot/initrd-2.2.14-5.0

ram磁碟能使系統效能儘可能的最佳化,具體參考/usr/src/linux/Documents/initrd.txt檔案

11、重新啟動,OK!

===============================================================================

http://www.51cto.com/art/200707/52008.htm

本文是基於2.6的核心,也建議各位可以先看一下《Linux核心設計與實現(第二版)》作為一個基礎知識的鋪墊。當然,從實踐角度來看,只要按著以下的步驟去做也應該可以實現成功編譯核心及載入模組。

個人用的Linux版本為:Debian GNU/Linux,核心版本為:2.6.20-1-686.

◆第一步,下載Linux核心的原始碼,即構建LDD3(Linux Device Drivers 3rd)上面所說的核心樹。

如過安裝的Linux系統中已經內建了原始碼的話,應該在/usr/src目錄下。如果該目錄為空白的話,則需要自己手動下載原始碼。下載代碼的方法和連結很多,也可以在CU上通過http://download.chinaunix.net/search/?key=&q=kernel&frmid=53去下載。不過,下載的核心版本最好和所啟動並執行Linux系統的核心版本一致。當然,也可以比Linux系統核心的版本低,但高的話應該不行(個人尚未實踐)。

Debian下可以很方便的通過Debian源下載:

首先尋找一下可下載的核心原始碼:

# apt-cache search linux-source

其中顯示的有:linux-source-2.6.20,沒有和我的核心版本完全符合,不過也沒關係,直接下載就可以了:

# apt-get install linux-source-2.6.20

下載完成後,安裝在/usr/src下,檔案名稱為:linux-source-2.6.20.tar.bz2,是一個壓縮包,解壓縮既可以得到整個核心的原始碼:

# tar jxvf linux-source-2.6.20.tar.bz2

解壓後產生一個新的目錄/usr/src/linux——source-2.6.20,所有的原始碼都在該目錄下。

註:該目錄會因核心版本的不同而不同,各位動手實踐的朋友只需知道自己的原始碼所在的具體位置即可。

◆第二步:配置及編譯核心。

進入/usr/src/linux——source-2.6.20目錄下,可以看到Makefile檔案,它包含了整個核心樹編譯資訊。該檔案最上面四行是關於核心版本的資訊。對於整個Makefile可以不用做修改,採用預設的就可以了。

一般情況下,需要先用命令諸如"make menuconfig", "make xconfig"或者"make oldcofig"對核心進行配置,這幾個都是對核心進行配置的命令,只是它們啟動並執行環境不一樣,執行一下這幾個命令中的任何一個即可對核心進行配置:

make menuconfig是基於介面的核心配置方法,make xconfig應該是基於QT庫的,還有make gcofig也是基於圖形的配置方法,應該是需要GTK的環境,make oldcofig就是對核心樹原有的.config檔案進行配置一下即可。

其實核心的配置部分,主要是保證核心啟動模組可動態載入的配置,預設配置裡面應該已經包含了這樣的內容,因此,我用的是make oldconfig.

在核心源碼的目錄下執行:

# make

# make bzImage

其中,第一個make也可以不執行,直接make bzImage。這個過程可能要持續一個小時左右,因此是對整個核心重新編譯了。執行結束後,可以看到在目前的目錄下產生了一個新的檔案: vmlinux, 其屬性為-rwxr-xr-x。

然後執行:

# make modules

# make modules_install

對核心的所有模組進行編譯和安裝。

執行結束之後,會在/lib/modules下產生新的目錄/lib/modules/2.6.20/。 在隨後的編譯模組檔案時,要用到這個路徑下的build目錄。至此,核心編譯完成。可以重啟一下系統。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.