1. 程式人生 > >用make-kpkg簡化Ubuntu系統的核心編譯過程

用make-kpkg簡化Ubuntu系統的核心編譯過程

本文介紹的make-kpkg可以用於所有Debian系的發行版如Debian、Ubuntu、Linux Mint等。

 

傳統編譯方式

通常,如果我們需要編譯Linux核心,大概要經歷以下幾個步驟:

1、配置核心

最常用的配置核心的方法是“make menuconfig”。“make config”太簡陋,“make xconfig”雖然更加直觀,但需要龐大的qt類庫支援,menuconfig應該是最佳的折中。

2、編譯核心和模組

依次執行“make”、“make modules”、“make modules_install”、“make install”,如果前面的配置沒有問題的話,耐心等待一段時間就可以得到編譯好的核心和模組了。

3、生成initramfs並配置Grub

經過第二個步驟的“make install”,kbuild系統會把生成的核心映象拷貝到INSTALL_PATH路徑下(預設這個路徑是/boot),但這時並不能使用,我們必須配置手動Grub才可以。另外,很多發行版會使用initramfs來做引導之用(還有部分發行版採用initrd),我們還需要為我們的新核心手動生成initramfs映象(請參考製作initramfs/initrd映象)。

 

make-kpkg

如果您是Ubuntu/Debian的使用者,可以使用make-kpkg簡化這個流程,而且還能帶來其他額外的好處。

在Ubuntu下,安裝kernel-package這個包之後,就可以使用make-kpkg了。

 

sudo apt-get install kernel-package

 

使用make-kpkg編譯核心,第一個步驟“配置核心”還是必不可少的,在這裡,我比較建議在發行版預設的config的基礎上再進行配置,這樣配置出的核心和發行版本身才會有更好的相容性。比如Ubuntu 10.10,可以在執行“make menuconfig”之前執行命令“cp /boot/config-2.6.35-24-generic  .config”,或者在menuconfig裡先把/boot/config-2.6.35-24-generic load進來。

這個配置的過程也可以放到make-kpkg裡,在執行make-kpkg命令時,加入引數“--config menuconfig”即可,但這樣做其實並沒有帶來什麼便利之處。

配置完核心之後,接下來要執行真正的編譯過程。通常我們可以這樣下命令:

 

make-kpkg  --initrd --revision wwang.001 --append-to-version -20110107 kernel_image

 

1、--initrd選項會讓make-kpkg自動幫我們生成initramfs;

2、--revision會給生成的deb檔案加上一個版本資訊。這個引數只是影響到檔名,如果不指定,預設會是“10.00.Custom”;

3、--append-to-version也是一種版本資訊,它不僅出現在deb安裝包的檔名裡,也會影響到kernel的名稱,比如本例中,核心更新完成之後,用“uname -r”察看會得到“2.6.36-20110107”;

4、kernel_image表示生成核心和預設模組的安裝包,另外您也可以加上kernel_headers,這樣make-kpkg會再生成一個核心標頭檔案的安裝包。

如果我們用普通使用者來執行make-kpkg,需要加上fakeroot執行。

 

fakeroot make-kpkg  --initrd --revision wwang.001 --append-to-version -20110107 kernel_image

 

編譯過程執行完畢之後,會在上層目錄裡生成一個deb安裝包,本例中生成的安裝包的檔名是“linux-image-2.6.36-20110107_wwang.001_i386.deb”。

之後我們就可以用dpkg命令或者在檔案瀏覽器中雙擊安裝了,安裝完畢之後,直接重啟就可以選擇進入新的核心。

使用make-kpkg來編譯核心,還有其他好處。因為我們是通過包管理器來安裝新的核心,當不再需要這個核心時,就可以簡單的通過dpkg命令、新立得軟體包管理器或者Ubuntu軟體中心來完全解除安裝,而不需要一個個手動刪除修改。

 

對於一般使用來說,知道以上的命令就足夠了,如果需要詳細瞭解make-kpkg的用法,可以查閱manual或者參考這篇教程

 


作者:wwang 
出處:http://www.cnblogs.com/wwang