上次编译并运行了3.0.4的内核,已经过去两年多了,这次更新了12.04的ubuntu,但是12.04版本的ubuntu内核支持仅停留在3.8系列上面,所以从kernel官网下载了最新的稳定版本3.12.6来进行编译替换。
1.首先还是应该先下载内核,经典的kernel.org,选择最新的长期支持稳定版本3.12.6,linux-3.12.6.tar.xz。
下载后解压 tar xvf linux-3.12.6.tar .xz,然后cd 进入源代码目录
2.配置内核,使用make menuconfig,这个图形化界面需要一些库的支持,详情见http://blog.csdn.net/gexueyuan/article/details/6923938,选择我们需要的配置。一个简单有效的方法就是,使用cp /boot/config-`uname -r` ./.config,这个简单命令把当前使用的内核配置拷贝到源代码目录,并且保存为.config。
3.编译内核,使用make命令,如果电脑具有多线程,可以使用多线程编译,比如四线程:make -j4,这里的make命令其实相当与手工执行了make bzImage和make modules。
make bzImage 会在源代码目录的arch/x86/boot下生成名为bzImage的压缩内核镜像文件
make modules则会在各个目录生成大量的*.ko文件,是模块化的内核驱动
4.安装内核和内核模块,这时候需要使用root权限。
sudo make modules_install 安装内核模块,就是把刚才编译好的内核模块从散落在的各个子目录拷贝到系统文件夹/lib/modules/3.12.6下,以供内核调用
sudo make install 会把生成的内核拷贝到/boot目录下更名为vmlinux-3.12.6,并且把System.map文件也拷贝到/boot目录下,并且更名为System.map-3.12.6,然后自动生成引导菜单,更新grub2
sudo mkinitramfs -o /boot/initrd-linux3.12.6.img 3.12.6 建立ramdisk映像文件,后面的数字3.12.6是指定的内核版本,要和/lib/modules,目录下的对应内核模块文件夹名字相同
以上三个命令,没有一定顺序,可以随意执行,执行完毕。重新启动,在ubuntu的启动菜单就能看见我们的内核选项。
ubuntu这个系统已经帮我门做了很多工作,包括自动更新grub等,所以在ubuntu下更新自制内核还是一件很傻瓜式的事情。