本文是将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