Step 1:配置內核編譯選項。
make menuconfig
Optional Step :排除編譯結果文件(.o)等之間的依賴性。
make mrproper
Optional Step:清除歷史編譯結果。
make clean
Step 2:編譯內核。
make bzImage #編譯內核
make modules #編譯各內核模塊,如驅動等。
make modules_install #將編譯好的模塊安裝至 /lib/modules/x.xx.x 目錄下。
Step 3:生成初始盤鏡像 initrd.img。
cd linux-source-x.xx.x/.config #復制配置文件至/boot目錄
sudo cp .config /boot/config-x.xx.x
#x.xx.x 對應 /lib/modules/x.xx.x 目錄。
# -o 指示了鏡像的輸出目錄。
sudo mkinitramfs -o /boot/initrd.img-x.xx.x x.xx.x
Step 4:修改Grub配置。
在/boot/grub/grub.cfg中復制一段已有的啟動項條目,將其中的內核相關文件地址修改至新內核相關文件所在位置。
如:
復制下段:
menuentry'Ubuntu,Linux 3.2.0-36-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 7b4e922c-d943-4b84-9c75-4fdc57cf1a3f
linux /boot/vmlinuz-3.2.0-36-generic-pae root=UUID=7b4e922c-d943-4b84-9c75-4fdc57cf1a3f ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.2.0-36-generic-pae
}
修改為:
menuentry 'Test,Linux 3.7.4' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 7b4e922c-d943-4b84-9c75-4fdc57cf1a3f
linux /boot/core/vmlinuz-3.7.4root=UUID=7b4e922c-d943-4b84-9c75-4fdc57cf1a3f ro quiet splash $vt_handoff
initrd /boot/core/initrd.img-3.7.4
}
Step 5:測試
在虛擬機啟動時按Esc,強制進入Grub啟動菜單。
在菜單中選擇’Test,Linux 3.7.4,使用剛編譯的內核初始化系統,查看啟動過程,看是否存在異常,如一切正常,則表明內核編譯正確,反之則需要繼續修改編譯選項。