纯属娱乐:Ubuntu下编译Linux内核
操作系统环境:
Ubuntu8.04 Server Edit @ VMWare
本实验使用的Linux内核源码版本:2.6.26.1,如使用其它版本请自行替换。
前期准备:
1. 安装编译器(这其实是一个开发工具包)
sudo apt-get install build-essential
2. 安装nurse(运行 menuconfig 必需)
sudo apt-get install ncurses-dev
3. 下载 Linux 内核源码
sudo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.1.tar.bz2
开工:
编译需要使用管理员权限,所以使用命令:
sudo -i
切换至管理员模式下。
1. 解压Linux内核源码:
tar xvjf linux-2.6.26.1.tar.bz2
解压的文件在 linux-2.6.26.1 目录下。
2. 配置选项
进入解压生成的目录:linux-2.6.26.1
make menuconfig
关于配置项的一些信息:
配置选项其实有很多种方式可以选择,包括基于文本的 make config,基于X11的 make xconfig,基于 gtk+ 的 make gconfig。
配置项要么是二选一,要么是三选一。二选一就是 yes 或 no,代表是否开启某项功能。三选一一般是 yes、no 或 module,module 意味着该配置项被选定了,但编译的时候这部分功能的实现代码是以模块的形式生成。
如果你只是想体验一下Linux内核的编译过程,你可以使用命令:
make defconfig
创建一个默认配置。
3. 编译
1)编译内核
make -j<n> bzImage
<n>替换成数字,代表需要将编译过程拆分成多少个作业。如需要衍生出2个编译作业,则命令为:make -j2 bzImage。在实际中,每个处理器上一般衍生出一个或者两个作业,如果你的机器是双核的,可以将 n 设置成 4 试下。
2)编译模块
make -j<n> modules
4. 安装
1)模块的安装是自动的,只需运行命令:
make -j<n> modules_install
即可。
2)内核的安装稍比较麻烦,首先拷贝编译的文件,依次执行以下命令:
cp .config /boot/config-2.6.26.1
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.26.1
cp System.map /boot/System.map-2.6.26.1
mkinitramfs -o /boot/initrd.img-2.6.26-1 2.6.26.1
其中“x.y.z”为Linux内核的版本号。可能为:2.6.26.1。mkinitrd 命令代表建立要载入RAM Disk 的映像文件。
5. 配置启动引导工具(boot loader)
Linux的引导工具有两种,一种为LILO,另一种为GRUB。Ubuntu使用的是后者。
1)Ubuntu的GRUB配置文件为 /boot/grub/ 目录下的menu.lst,所以先打开这个文件:
nano /boot/grub/menu.lst
2)打开文件后,在文件的最后,应该可以看到类似如下的代码:
title Ubuntu 8.04.1, kernel 2.6.24-19-server
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-19-server root=UUID=aca959de-5904-4c5a-83ff-16c3baa5a71e ro quiet s$
initrd /boot/initrd.img-2.6.24-19-server
现在可以依葫芦画飘,加一段类似的代码在文件的最后,title是可以自定义,随便写的。kernel要注意vmlinuz的文件名是我们新生成的那个文件,不要写错了。initrd也一样。然后保存文退出(ctrl+o, ctrl+x)。其实就是把上面这段复制一下,然后修改一下title和版本号。
关于GRUB更加详细的介绍,可以参考这里:http://blog.csdn.net/jiangxinyu/archive/2007/07/19/1698636.aspx
到这里,就可以重起一下机器,试试用自己编译的内核运行吧。
PS:在启动的过程中,需要按"ESC"键进入GRUB的选择界面。查看当前运行的内核版本可以使用命令:uname -a。