纯属娱乐:Ubuntu下编译Linux内核

时间:2008-08-05 17:16:37  类别: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。


特别推荐

广而告之