本试验纯属测试。
原环境:ubuntu 10.04,内核版本2.6.32
目标升级内核到3.2.68。
步骤如下:
1. 下载一个3.x的linux内核:https://www.kernel.org
我下载的是3.2.68版本
2. 解压到/usr/src下面:
$xz -d ***.tar.xz
$tar -xvf ***.tar
查看下目前该目录都有什么:
3.进入解压后的文件:cd /usr/src/linux-3.2.68
4. 输入命令:
$ make mrproper
该命令的功能在于清除当前目录下残留的.config和.o文件,这些文件一般是以前编译时未清理而残留的。而对于第一次编译的代码来说,不存在这些残留文件,所以可以略过此步,但是如果该源代码以前被编译过,那么强烈建议执行此命令,否则后面可能会出现未知的问题。
5. 配置编译选项:
利用当前的内核配置详单来设置将要编译的内核:
$cd /usr/src
$cp /usr/src/linux-headers-2.6.32-21-generic/.config .config
使用$make menuconfig命令,如果缺少ncurse,请输入以下命令:
$sudo apt-get install libncurses5-dev
Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。
然后选save这一项保存,起名还叫.config,最后退出配置界面
6. 清除编译中间文件:$sudo make clean
7. 编译生成新内核:$sudo make
8. 生成modules
和上步差不多,就是把配置过程中,我们选中编成modules的程序编译链接成modules,输入命令:
$sudo make modules
9. 安装modules
就是把刚才编译生产的modules拷到系统文件夹下,以供新内核调用。输入命令:
$make modules_install
10. 安装内核,输入命令:
$make install
此时系统会把linux内核的镜像文件还有System.map考入到/boot下。
11. 产生的文件名尽量保持当前操作系统的命名规则,输入命令:
$sudo mkinitramfs -o initrd.img-3.2.68 3.2.68
12. 配置grub引导程序
既然新的内核编译并安装好了,那么我们要配置系统的引导程序用新内核正确引导,这一步是手动的,对象是/boot/grub/grub.cfg,首先用chmod更改该文件的只读属性。然后参照里面的已有内容添加一个新启动项,我的新启动项是:
menuentry 'Ubuntu, with Linux 3.2.68-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 140c9813-9b08-4f92-bc5f-93b2050ecca1
linux /boot/vmlinuz-3.2.68 root=UUID=140c9813-9b08-4f92-bc5f-93b2050ecca1 ro quiet splash
initrd /boot/initrd.img-3.2.68
}
上面红字可以换成自己想要的引导信息。
上面粗体字,linux 后面指明了新内核映像文件的路径,initrd后面指明了ramdisk映像文件的路径。
13. 修改引导项设置:默认启动第二个内核,即3.2.68的新内核,输入命令:
$sudo gedit /etc/grub/grub.cfg
找到 set default="x"语句进行修改:0代表你所选择的内核顺序,这里我们改成1。
14. 重启输入命令:sudo reboot
15. OK,查看内核版本:
$cat /proc/version
Game Over!