本文是將ubuntu12.04版本下低版本內核升級到高版本(3.2.0-23-generic-pae ---> 4.0.4)
一、www.linux.org下載內核版本
下載鏈接:https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/
下載完成後開始進行解壓
sudo tar -zxf linux-4.0.4.tar.gz -C /usr/src
二、安裝必要的軟件包。在正式替換之前先安裝幾個必要的軟件包
sudo apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
各個包的主要作用如下:
build-essential: 基本的編程庫(gcc, make等)
kernel-package: Debian 系統裏生成 kernel-image 的一些配置文件和工具
libncurses5-dev: make menuconfig要調用的
libqt3-headers: make xconfig要調用的
其他的工具在升級過程中可以根據提示安裝。
三、編譯內核
1、拷貝原有配置文件。把正在使用中的內核配置文件/usr/src/linux-headers-3.2.0-23-generic-pae/.config 拷到/usr/src/linux-4.0.4目錄下
sudo cp /usr/src/linux-headers-3.2.0-23-generic-pae/.config /usr/src/linux-4.0.4
2、導入配置文件。運行以下命令
sudo cd /usr/src/linux-4.0.4
sudo make menuconfig
3、編譯配置時可能遇到的問題(執行make menuconfig可能出現的問題)
scripts/kconfig/lxdialog/dialog.h:38:20: 致命錯誤: curses.h:沒有那個文件或目錄
解決辦法:
sudo apt-get install libncurses5-dev
4、編譯
sudo make mrproper //清除以前曾經編譯過的舊文件,如果你是第一次編譯,可不執行。
sudo make //編譯,此過程需要較長時間。
sudo make install
sudo make modules //編譯模塊
sudo make modules_install //安裝模塊
四、最後創建initrd文件
mkinitramfs -o /boot/initrd.img-4.0.4
五、更新grub引導列表
sudo update-grub
sudo gedit /boot/grub/grub.cfg
將Code3拷貝至Code1和Code2之間,即將Ubuntu, with Linux4.0.4啓動項拷貝至最前面,這樣在重啓時系統會自動選擇第一個作爲默認啓動,於是就能進入內核爲Linux4.0.4的系統。
Code1:
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
Code2:
menuentry 'Ubuntu,Linux 3.2.0-23-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 5f8170e2-c901-43b3-ac5c-64602cabdd99
linux /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=5f8170e2-c901-43b3-ac5c-64602cabdd99 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.2.0-23-generic-pae
}
Code3:
menuentry 'Ubuntu,Linux 4.0.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 5f8170e2-c901-43b3-ac5c-64602cabdd99
linux /boot/vmlinuz-4.0.4 root=UUID=5f8170e2-c901-43b3-ac5c-64602cabdd99 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.0.4
}
六、重啓系統
七、可能出現的問題
在重啓後可能會出現如下問題:
warning: can't open directory /lib/modules/4.04/modules.dep, no such files or directory
解決方案:
這時,可以先從舊內核中進入系統,然後執行以下命令:
$ su root //獲得root權限
# cd /boot
# cp initrd.img-4.0.4 initrd-4.0.4.old //備份原有文件
# depmod –a //檢查所有模塊
# update-initramfs –k 4.0.4 –c
# cd /tmp
# gzip –dc /boot/initrd.img-4.0.4| cpio –id
# touch lib/modules/4.0.4/modules.dep
# find ./ | cpio –H newc –o > /boot/initrd.img-4.0.4.new
# gzip /boot/initrd.img-4.0.4.new
# cd /boot
# mv initrd.img-4.0.4.new.gz initrd.img-4.0.4