step 1
準備:(1). 所需的內核源碼
step2:
切換到源碼所在的目錄,make distclean 命令:刪除生產的.o 和 .config 文件
編譯內核之前需要壹份配置文件,並在此基礎上修改,故借用本地/boot/config-3.13.0-24-generic?配置文件,命令: cp /boot/config-3.13.0-24-generic /home/yangqi/code/linux/linux-4.2.3/.config
該配置文件.config 即是對內核裁剪的配置,不用直接打開修改,系統提供menu界面修改,命令:make menuconfig (如果此命令報錯,說明需要裝ncurses庫,安裝命令:sudo apt-get install libncurses5-dev) (menu目錄如下:)
配置完,保存即可。
接下來,根據配置文件,編譯內核:? make bzImage V=1 (V=1 會顯示編譯的過程),編譯時間大概1個小時
編譯完內核,得到的bzImage會存放在linux-4.2.3/arch/x86_64 內,(x86_64為妳選擇的系統架構,配置的時候,妳選擇什麽架構,編譯好的內核文件就存放在對應的以架構命名的文件夾下)(下圖為:以架構命名的文件夾)
接下來,編譯模塊: make modules 大約需要2個小時
將編譯後的模塊文件註入到系統的/lib/modules 下,命令: make modules_install (成功如圖:? ,存放在4.2.3文件夾下)
接下來,制作init ramdisk文件 : RedHat 下使用mkinitrd init-4.2.3 4.2.3? + cp init4.2.3 /boot/init4.2.3 (init-4.2.3為自擬,後壹個參數4.2.3 必須與/lib/modules下的文件4.2.3壹致,這是內核的版本號);ubutun下使用mkinitramfs 4.2.3 -o /boot/init-4.2.3
然後,還需要將第6步編譯好的bzImage (linux-4.2.3/arch/x86_64/boot/下)拷貝到/boot/下:cp?/home/yangqi/code/linux/linux-4.2.3/arch/x86_64/boot? /root/vmlinux-4.2.3? (保證bzImage 和 initrd-4.2.3 都放在/boot/下)
最後,修改系統啟動配置文件:(RedHat下修改/etc/grub.conf或者/etc/lilo.conf)
ubuntu下修改/boot/grub/grub.cfg 文件,命令:sudo gedit /boot/grub/grub.cfg (如下圖修改:?menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-cfd7566c-18ef-47bf-9b04-b285d20564ee' {
gfxmode $linux_gfx_mode
insmod gzio
insmod ntfs
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1? FA5CCE605CCE1773
else
search --no-floppy --fs-uuid --set=root FA5CCE605CCE1773
fi
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz-3.13.0-24-generic root=UUID=FA5CCE605CCE1773 loop=/ubuntu/disks/root.disk rw rootflags=sync? quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-24-generic
}
menuentry 'Ubuntu My Linux-4.2.3' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-cfd7566c-18ef-47bf-9b04-b285d20564ee' {
gfxmode $linux_gfx_mode
insmod gzio
insmod ntfs
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1? FA5CCE605CCE1773
else
search --no-floppy --fs-uuid --set=root FA5CCE605CCE1773
fi
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux/boot/vmlinux-4.2.3?root=UUID=FA5CCE605CCE1773 loop=/ubuntu/disks/root.disk rw rootflags=sync? quiet splash $vt_handoff
initrd /boot/initrd-4.2.3
}
修改說明:藍色為壹開始就存在的代碼,紅色是復制藍色的部分,並在此基礎之上加以修改的,修改的地方為綠色部分。(註:menuentry命令為在開機啟動時候,通過enter鍵鍵入那壹刻,觸發的命令)
12.? 最後,還需要將該文件set default="0"(舊)修改 set default="1"(新),應該表示的是系統數目。
13.? 保存完畢,重啟電腦就可以看到新添加的選項。 進入系統後,使用 uname -r 即可查看到新的內核4.2.3