1. 程式人生 > >編譯核心步驟詳解

編譯核心步驟詳解

開始就是下載最新的核心,我用的FC5,核心已經很新了, 是2.6.8,在www.kernel.org下載了一個最新的核心,2.6.20的。

  把kernel下載到隨便一個地方,tar:之後把壓縮包放到/usr/src/redhat/SOURCES/下面,其實這麼也可以這樣,把核心解壓到/usr/src/下面就可以了,然後進入/usr/src/就可以發現已經有2.6.20這個檔案夾了,編譯核心是在這個檔案下面進行的。也就是說你要進入到這個資料夾下面才可以進行之後的操作哦。

整體上分為三步:1、配置核心(就是確定哪些功能要保留在編譯好的核心中,哪些功能要從核心中刪除),生成一個編譯配置檔案.config 

2、編譯核心。

3、 安裝核心。

 之後的就是正式的步驟:

進入當前的目錄/usr/src/redhat/SOURCES/linux-2.6.20

清除當前目錄下編譯設定:

步驟1:

$make mrproper

其實這步可以不要的。一般還是要一下吧。

該命令確保目錄下沒有相關的檔案和配置,如果已經編譯過linux核心,建議使用該命令

 步驟2:

配置核心模組的功能,有幾種方式可以進行介面選擇:

$make config(文字的配置方式,需要使用者自己寫配置檔案)

$make menuconfig(文字選單的配置方式,在有字元終端下才能使用)

$make xconfig(圖形視窗模式的配置方式,必須支援Xwindow下才能使用)

$make oldconfig(文字配置方式,在原核心配置的基礎修改時使用)

這裡推薦make xconfig方式,圖形視窗的配置比較直觀,對應每一項相應的配置時,有三種選擇:

Y--該模組編譯進核心

N--該模組不編譯進核心

M--該模組編譯成可載入核心模組

     核心編譯中各項模組功能的選擇請參考我的另外一篇文章。

這裡我選擇的是:menuconfig,進去之後是一個藍色介面.總共有10多個大的條目,按enter進入,前面有[ ]的可以直接輸入大寫的Y/N,Y顯示是一個*,而N是預設的選擇就是[空白],如果你要選擇就按下Y,或者不選N,當然了還有[m].其實條目下面可能還有一個東西就是---->,也是按回車進入設定.好像還有一個X選擇的,進入了就曉得拉.

這裡邊很多東東都要注意選啊,這個要求您對硬體,軟體,網路有一定的認識,實在不知道就按預設的來吧.免得以後啟動不了罵天罵地都沒用哦,我可是好多次啟動不了,最後才摸出竅門的…

這個步驟完成之後,系統會提醒您,next step you should run “make dep”

然後, 核心模組檔案連線    :

步驟3:

#make dep (一到兩分鐘)
在確定要編譯哪些東東之後(make *config),這個要確定依賴性用這條指令就可以完成了,也就不用麻煩您那麼忙著搞了,呵呵,這個確定依賴性以後,然後就要清除一些東東了…

步驟4:

#make clean (少於一分鐘)
清除一些不必要的檔案,那些亂七八糟的東東是可能會導致您在編譯過程中出現錯誤的哦,一定要做哦…
 

步驟5:

#make bzImage(15分鐘左右)-
這個就是生成您的新核心,也就是kernel啦,所有的系統硬體軟體互動都靠它了哦..

其實可以是make zImage的,但是你要確保您所編譯的這個新核心在640K之下,您就可以使用make zImage,如果比640K大,那就要用make bzImage,您要說沒編譯出來咋知道多大呢?我的看法是建議用bzImage,因為我編譯出來的核心一般都是800~900K左右. …我是菜鳥,本帖子也是為我一樣的菜鳥所寫,所以. ..咱們就預設make bzImage…



假如核心現在已經編譯好了,當然越小越好哦,這時候系統會有個提示編譯後的bzImage放到哪裡去了,提示最後幾行,已經告訴了您的新編譯出的核心位置啊,一般都在這裡/usr/src/linux-2.6.20/arch/i386/boot/,這時候您要做的就是把它放到/boot目錄底下去哦,不然系統可沒法啟動的 …
#cp /usr/src/linux-2.6.20/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20 這裡好像可以不手動複製,系統最後也會在boot下面產生一個吧。
(這裡其實已經把bzImage更名為vmlinuz-2.4.22,呆會在/boot/grub/grub.conf裡就指定這個新核心)

步驟6:

#make modules(耗費時間取決於您所選擇編譯為modules的數量)
哇哇,又一個耗費時間的步驟來了,您還是找點什麼做做吧,估計也要好久哦,大概20分鐘吧,這個步驟就是把您在make menuconfig裡邊所選擇為M的東東,全部編譯成模組並放在/usr/src/linux-2.4.22/下…如果你選擇的M比較多的話,還是…去玩會吧,家務沒做啊?功課沒做啊什麼的?不過如果您比較喜歡把所有東東都編進核心的話,那就不需要多長時間,少選一些為M,這樣很快就可以完成,我的只用了一分鐘就完成了,不過如果您有很多不知道而選擇預設的話,那恐怕就要好花時間了. ..

步驟7:


#make modules_install
hoho,這裡可是安裝module的步驟了,您所選擇的模組編譯完成後都放在/usr/src/linux-2.4.22某子目錄下,哪個子目錄您看一下就知道了,make modules之後會有提示的..我也忘記了,呵呵:),這多不好,而insmod以及相關指令都是從/lib/modules/linux- 2.4.22下取module的啊,這個指令就是把編譯好的mod放到/lib/modules下去的哦,如果開始沒有Linux-2.4.22目錄,(也就是說您是第一次編譯2.4.22的核心),那麼這條指令就會自動建立該目錄,如果已經有了。那就會把編譯後的核心放進該目錄 …您以後要把mod調進kernel的時候(insmod,modprobe)都從這裡尋找.o的哦…
注意哦,如果你用的是SCSI硬碟並且採用的是ext3分割槽格式的話,請注意,您一定要製作initrd.img(因為SCSI卡的驅動包括在這個裡邊),如果你使用的是IDE硬碟,您可以跳過這一步,當然,您要是有耐心的話,這裡學習一下也沒什麼壞處哦
mkinitrd可以製作initrd.img,一般是這麼使用的,如果想具體瞭解的話,可以man mkinitrd,如果只想搞個initrd.img出來的話,那就mkinitrd /boot/initrd-custom.img 2.4.22就在/boot目錄下建立了一個initrd-custom.img檔案,也就是初始化映象…(initialed ramdisk)…裡邊主要有一些驅動,因為放在核心中就顯得過大,所以編譯進initrd.img,在啟動中釋放…而這個2.4.22就表示 /lib/modules下面的2.4.22目錄了…

步驟8:

#make install
說到make install我們這裡又有點話要說哦,make install就相當於一個自動化的過程啦,因為其他東東它都會幫您做好的,如果您確實比較懶,或者已經對前邊的步驟已經很沒耐心了,您就直接執行此步驟吧…當然您可以很快做好新系統了,而且可以重新從新核心啟動哦,但是您可能對這中間發生的事情就不明白了哦,小時侯上課的時候老師談什麼要授之以漁,而不要授之以魚,沒辦法。您要是覺得麻煩,俺就省了,俺手還覺得累,呵呵:)
還是談談這個過程吧,這期間,系統會把您的當前release版本號後面加上一個custom然後寫到grub.conf裡邊去,重新啟動後您就可以看到2.4.22custom的選單了 …

至於這個檔名是怎麼決定出來的呢?您可以看一看/usr/src/linux-2.4.22哦,裡邊有個Makefile,您試一下


一般的可以認為到這裡就算完成了核心的編譯和安裝,最後的shell可以告訴你生成了什麼東西就是.config檔案,還有一個zimage檔案,好像還有一個什麼東西我不記得了.

重啟,就會看到還有一個問題,在grub啟動的選擇裡面,有3個鼕鼕,一個是windows一個是最新的版本的核心,還有一個以前的核心版本,我嘗試過了,最新的可以進去,老的版本是不可以進去的,應該是config檔案,還有一個zimage檔案被新的核心給覆蓋了吧.

然後就是解決這裡沒有的啟動選項,記得以前就設定過grub,cd /etc,之後vi ./grub.conf,把第一個2改變成1,或者0,即從windows啟動或者linux,下面有3個title,把老版本的那個title相關的東西全部給刪除了就可以了,重啟了就可以了.呵呵

再看就可以看見grub的啟動選項裡面就只有兩個了,之前千萬不要刪除錯了title就可以了.

我的這一切都很順利沒有遇到error,make的時候有一些警告,都是說什麼沒有初始化,或者說過時了,過時就過時了沒有關係.不要鳥他們.

注意事項:

1.在配置時,在一個項上,按Y就是把一個功能編譯到核心中,按N就是去該功能,按M就是將該功能編譯成模組,
並且,不是所有的功能都能編譯成模組,通常是一些驅動程式可以編譯成模組。


 2.配置時,有幾個項必須被編譯到核心,而不能去掉或是編譯成模組,否則編譯好的核心肯定不能正常啟動。這幾個模組是File System選單下的Ext3 journalling file system support子項下所有的項。注意,Ext3 journalling file system support下面又含有兩個子項:Ext3 extended attributes和JBD(ext3) debugging support,這些項全部選中Y,以便將其編譯進核心。

 3.如果上面的都做過了,開機時,新核心還是不能正常 使用,那麼,就進入舊核心,把/etc/selinux中的config
中的SELINUX項給禁止掉即可。

 4.對於膝上型電腦,帶DVD-光碟機的,注意,還必須選中File System項下的Micellaneous Filesystem support下的
UFS開關的一項,否則有可能啟動不了。