1. 下载内核源代码
http://www.kernel.org/
下载The latest stable version of the Linux kernel is: 2.6.25.7 ,点后面的“F” 按钮下载
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.7.tar.bz2
文件。
2. 在终端 su root命令切换到root权限,然后把linux-2.6.25.7.tar.bz2 文件复制到/usr/src/ 目录下。
在ubuntu中不能以root身份登录界面,很奇怪
3. cd 到/usr/src/ 目录下, 执行 tar -jxvf linux-2.6.25.7.tar.bz2 命令解压源代码包。就会解压到
/usr/src/ linux-2.6.25.7,我又把它复制到 /usr/src/ linux-2.6.25.7-widebrihgt 目录下了,/usr/src/
linux-2.6.25.7-widebrihgt 挂载了一个 8G的盘。
4.root用户,cd到/usr/src/ linux-2.6.25.7-widebright 目录下
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件 .config文件等)
内核配置工具
(1) make config (纯字符提示模式)
(2)
# make menuconfig (配置内核各选项,居于ncurse 的菜单选择模式)
需要ncurse 库的支持, ubuntu中默认没有安装 需要安装一下
# apt-get install libncurses5-dev
(3)
# make xconfig (X窗口的图形界面,配置内核各选项)
xconfig基于X11, 使用qt库, 在Ubuntu中先安装qt库:
# apt-get install libqt3-headers libqt3-mt-dev
我是安装libncurses5-dev 之后用 menuconfig 来配置的, 都是用他默认配置,
除了
General setup --->
() Local version - append to kernel release ()
这个可以在内核版本后面加上个性字符串,我输入了widebrighgt
然后选最后一条,保存配置文件就行了,他会在 /usr/src/ linux-2.6.25.7-widebright 生成 .config 文件
5.编译内核
只需要运行 make就行了
#make
执行之前可以先运行make clean 清空生成的内核文件,或者编译中间有问题了,想重新编译,可以用这
个先清空已经生成的内核文件
我在VirtualBox虚拟机的ubuntu8.04 系统里面执行make 命令, 结果make一次花的编译时间应该在两个
小时以上。注意 /usr/src/ linux-2.6.25.7-widebright的剩余空间要在2.5G以上,我一开始mount到一个
2G的盘,结果编译时候提示没有空间。后来重试了几次,花了很多时间,最后mount了一个8G的盘,终
于编译成功了。 看他完成后,占用的控件大概在1.8G左右。
这个make相当于,手工执行了一下两步:
# make bzImage
# make modules (编译可加载模块)
其中make bzImage 将在 /usr/src/ linux-2.6.25.7-widebrihgt/arch/i386/boot 目录下生成一个名字为
bzImage的内核镜像文件。 make zImage 命令其实可以生成内核镜像的,bzImage 的区别就是它是压
缩的。
make modules 则是生产大量的 *.ko 内核文件,就是模块化的内核驱动等等吧,你不把它编译进去
bzImage里面去的都会另外单独生成的一个ko文件了,以后需要的时候再由内核加载这个ko模块。
6.安装内核
(1)
执行 make install 命令
我运行了这一步后,提示需要在GRUB menu.lst 配置文件中把 入口 点指向 /boot/vmlinuz-
2.6.25.7widebright 文件。 应该是已经把上面一步生成的bzImage复制到系统的 /boot 目录去了, ls
-l看一下 /boot 目录,可以已经把vmlinuz 文件链接到 vmlinuz-2.6.25.7widebright 文件 System.map
文件链接到 System.map-2.6.25.7widebright 文件,config 文件链接到 config-2.6.25.7widebright 文
件。
(2)
没有看到模块的配置信息输出,所以我又执行了一下 make modules_install 命令,这个是安装模块的。
这个会安装很多 ko文件,最后输出 DEPMOD 2.6.25.7widebright。不懂这个流程是什么样子的。不过
在/lib/modules/ 目录下面生成了一个 2.6.25.7widebright的目录,下面 目录就是上面make modules生
成的那些ko内核模块文件。
(3) 我上面的编译过程好像没有生成initrd镜像文件,不知道怎么回事,只好手工来了。什么是initrd镜
像请看最后附的那篇文章
生成initrd镜像文件,redhat系统下面用new-kernel-pkg 命令应该就可以了,后面那篇文章说的mkinitrd
命令不知道是什么系统。 ubuntu系统下面在网上搜索了一下,应该是用 mkinittramfs 命令来生成的。
运行一下 "mkinitramfs -o initrd.img-2.6.25.7widebrihgt 2.6.25.7widebrihgt" ,将在当前目录下生成
一个名字为 initrd.img-2.6.25.7widebrihgt大小7.1M左右的initrd 镜像文件。最后我把它移到 /boot/ 目
录里面去。
注意:最后那个参数“2.6.25.7widebrihgt” 是version,指定 内核版本,就是/lib/modules/ 目录下相应的
文件夹名字。这个一定要指定的,不然他默认使用的是正在运行的系统的版本,最后系统就不能引导成
功。
(4)检查一下 grub的配置文件
cat /boot/grub/menu.lst , 看来make install 命令没有自动把新编译的内核的配置写到grub的配置文
件里面。修改 timeout 属性 为 10,让等待的时间长一点,然后仿造原有的配置新建一项放在最前面,因为一开始的default 的值设置为0的,默认是第一项。增加的内容如下
title Ubuntu 8.04, kernel 2.6.25-7-widebright
root (hd0,0)
kernel /boot/vmlinuz-2.6.25.7widebright root=UUID=a082d103-894e-443a-bf58-8b128c7e5dd1 ro quiet splash locale=zh_CN
initrd /boot/initrd.img-2.6.25.7widebright
quiet
注意其中的 kernel 和initrd 都指向自己的镜像文件。 root的 UUID可能没个人都不一样的,可以参考GRUB的配置文件说明。
Leo.dingwl 于 2009-07-07 08:26:55发表:
在gdmsetup中可以启动root用户登录的。。。
刘冲 于 2009-07-07 01:10:40发表:
用debian,需要编译码,需要到处找快源吗,需要到处找软件包吗?哈哈!小普林斯 于 2009-07-07 00:47:04发表:
也不能这样啊,开发者给的建议是如果有重大安全问题、驱动支持问题、特殊需求都是建议不重新编译内核的,当然练习除外。如果用着挺顺手的就不要重编了~
刘冲 于 2009-07-07 00:29:53发表:
打死不编译!小普林斯 于 2009-07-07 00:28:11发表:
我之前编译过30的内核,性能的确不错,不过没有特殊需要其实也没有必要。微小的差别也很难感受得那么明显~等新版本就好了!
shanot 于 2009-07-07 00:04:01发表:
2.6.25.7时代早过了
wwdfuture 于 2009-07-06 23:29:30发表:
谢谢,还没有这样干过,以后再试吧
末日逐沙 于 2009-07-06 23:29:25发表:
还有一本2.6.28的内核的书,不知道放哪里,各位论坛找找,看又没,刘少侠的
jagub 于 2009-07-06 23:27:32发表:
好麻烦。
我刚刚编译完成,主需要几步就搞定了
末日逐沙 于 2009-07-06 23:27:06发表:
原文又一点出入,但是方法是一样的,编译没那么简单,看着一堆的选项你就知道郁闷了,哈,不过很又成就感,有时间了新内核出来了再玩,现在都是编译30内核怕出错,期待大嘴巴