內核編譯實驗環境: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
我下載的是
格式選擇: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