編譯linux內核

內核編譯實驗環境:Ubuntu 10.04 內核版本 2.6.32-36-generic


過程概述:

下載源碼:下載鏈接:http://www.kernel.org/pub/linux/kernel/v2.6/

配置內核:make menuconfig

編譯內核:make bzImage

編譯內核模塊:make modules

安裝內核模塊:make modules_install

安裝內核:make install

完成最後遺留工作


一、內核編譯的準備工作:

1。使用root用戶,方便以後操作

jb@jb-laptop:~$ su
密碼: 
root@jb-laptop:/home/jb# 

2。查看自己內核版本,以便選擇新編譯版本

root@jb-laptop:/home/jb# uname -r
2.6.32-36-generic
root@jb-laptop:/home/jb# 

3。下載升級版本源碼,供編譯使用

下載鏈接:http://www.kernel.org/pub/linux/kernel/v2.6/

http://www.kernel.org

我下載的是

linux-2.6.38.8.tar.gz 

格式選擇:gz和bz2

都可以,bz2的壓縮程度高一點,只是解壓縮命令不一樣而已

4。解壓縮源碼

root@jb-laptop:/home/jb# tar -zxvf linux-2.6.38.8.tar.gz 

如果是bz2格式的話使用 tar -jxvf  linux.tar.bz2

5。複製源碼到 目錄/usr/src/下

root@jb-laptop:/home/jb# mv linux-2.6.38.8  /usr/src/

二、開始編譯內核:

1。檢查有無不正確的.o文件和依賴關係: make mrproper (其實這一步可以省略,因爲是剛下載好的源碼,一定是乾淨的;如果使用的是已經編譯過的code,則需要做這一步)

2。配置Kernel選項:make menuconfig (這一步很重要,它決定了你可以個人定製化你的Kernel。當你使用menuconfig時,會有一些選擇列出來) 主列表如下:

 

    General Setup: 常規的配置,比如Kernel config, CPU Group,Aduiting等等

    Loadable module support: 定製你要加載哪些modules

    Enable the block layer: 主要是塊設備和大文件的設置

    Processor type and features: 處理器配置和定製化

    Power management options: 電源管理的定製化,比如Hibernate這樣的

    Bus options: PCI總線的定製

    Executable file formats: 主要是設置ELF的配置

    Networking support: 定製網絡選項,包括Wireless,Bluetooth和Network選項

    Device Drivers: 定製你需要加載的設備驅動

    Fireware Drivers: BIOS和EFI這樣的固件驅動設置

    File System: 文件系統的設置,包括EXT3, EXT4, FAT, CD/DVD...等等N種

    Kernel hacking: 主要是設置Kernel debugging的,做內核調試會有用

    Security options: 安全選項

    Cryptographic API: 加密設置,包括MD5, SHA1, CRC等等N種加密算法的配置

    Virtualization: 虛擬化設置

    Library routines: 主要定製CRC校驗的function

 

    上面是16大項,每一項都有N多小項,說真的這個裏面每一項都夠研究一陣子的。不過對內核編譯而言,你可以全部採用默認選項(會延長編譯時間)。設置好了menuconfig,保存退出。


如果出現下面的錯誤:

*** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

解決方案:

apt-get install libncurses5-dev

現在可以 make menuconfig 了

3。編譯源碼生成內核鏡像:

make bzImage 

該命令首先編譯生成vmlinux,然後壓縮生成bzImage(路徑是 /usr/src/kernel-version/arch/i386/boot/ )

可以查看有沒有bzImage生成

4。編譯內核模塊

make modules

5。安裝內核模塊

make modules_install

內核模塊編譯好後需要安裝到Linux系統的相應目錄中纔可以使用,使用“make modules_install”命令安裝內核模塊。“/lib/modules/”目錄用於存放Linux系統中的內核模塊,內核的各個版本都在該目錄下建有子目錄用於存放內核模塊。

該命令首先在/lib/modules/中創建一個以內核發行號爲名稱的目錄,然後根據內核配置生成需要的模塊

6。生成新內核

make install

把編譯好的內核放入/boot中,會把vmlinuz和System.map複製到/boot目錄下,並建立相關的鏈接

7。完成最後的工作

有些linux版本在make install之後會自動生成initd.img和修改引導程序文件grub.cfg,但是ubuntu10.04並不會,所以就得我們自己來搞定啦

首先是生成initrd.img。

mkinitramfs 2.6.38.8  -o  /boot/initrd.img-2.6.38.8

如果系統提示沒有安裝mkinitramfs,那就apt-get install mkinitramfs

接着修改引導程序文件grub.cfg

update-grub2

儘量不要手動去修改grub.cfg文件,搞不好連電腦都啓動不了

8。重啓電腦

reboot

然後在grub引導界面上選擇你的新內核

至此,所有的工作就搞定啦,體驗你的新內核吧

三、參考鏈接:

System.map、vmlinuz、initrd.img的產生和作用 

http://dogking.chinaunix.com/space.php?uid=22896670&do=blog&id=189483

內核編譯之vmlinuz vmlinux system.map initrd

http://hi.baidu.com/masterfoo/blog/item/3cdd88aa312b91bdca130ca4.html

Linux內核編譯步驟(基於Ubuntu10.04+2.6.35.2 Kernel)

http://blog.csdn.net/zufeng_chen/article/details/5824544

ubuntu10.10下內核編譯,解決開機啓動出現Could not load /lib/modules/.../modules.dep的問題

http://blog.csdn.net/renclear/article/details/6461753
發佈了68 篇原創文章 · 獲贊 15 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章