Ubuntu Linux内核编译(linux-2.6.24)

乱七八糟 , , ,

文章声明:本文是写给那些没有内核编译经验的新人看的,高手老鸟也欢迎留下您的意见。

近来一直很忙,都没有怎么更新。3月以来,总共就更新了3篇。
今天早上突然感觉无所事事,刚好在CCF看到有关于内核编绎的帖子,说有多么多么麻烦
我以前没有做过,刚好今天可以试下

于是先到www.kernel.org上下载了2.6.24的内核包

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.gz

解压

$ tar -zxvf linux-2.6.24.tar.gz

移动到/usr/src

$ sudo mv linux-2.6.24 /usr/src

保源代码目录下没有不正确的.o文件以及文件的相互依赖

$sudo make mrproper

配置内核选项, menuconfig方式是一种很直观的配置界面,我偏向于这个

$ sudo make o=/home/myhnet/build/kernel menuconfig

这里面参数众多,我也不熟悉,所以只取消了几个肯定不会用到的东西,比如我从来没见过的文件系统,以及无线支持,IPv6等等
我这里建议大家如果不熟悉还是要查了资料再动,不然,可能会导致系统不能正常启动。

有些人的系统可能跟我的一样会提示一些错误,这个时候就需要安装一些开发包。

错误1:
这个是由于没有安装libc6的开发包(这个包不安装,大多数编绎都会报错)

HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c:107:23: error: sys/types.h: No such file or directory
scripts/basic/fixdep.c:108:22: error: sys/stat.h: No such file or directory
......
scripts/basic/fixdep.c:378: warning: incompatible implicit declaration of built-in function ‘fprintf’
scripts/basic/fixdep.c:378: error: ‘stderr’ undeclared (first use in this function)
scripts/basic/fixdep.c:380: warning: incompatible implicit declaration of built-in function ‘exit’
make[1]: *** [scripts/basic/fixdep] Error 1
make: *** [scripts_basic] Error 2

解决办法:

sudo apt-get install libc6-dev

错误2:
只知道这个包编译内核时必装,但不知道有没有中文名

scripts/kconfig/lxdialog/checklist.c:312: error: ‘KEY_RESIZE’ undeclared (first use in this function)
make[1]: *** [scripts/kconfig/lxdialog/checklist.o] Error 1
make: *** [menuconfig] Error 2

解决办法:

sudo apt-get install ncurses-dev

然后,基本上我们就可以手动进行选择了。
经过一系统烦琐的选择后,我们要保存配置文件然后退出
退出之后,我们就可以进行下一步操作了

$ sudo make
$ sudo make modules_install install

我这里做一起写了,但其实,这是两个很漫长的过程,根据内核的内容以及机器配置情况,时间会有不同
但是可以肯定的是,
这个时间肯定是很久的

等这两步结束后,内核就已经装好了
我们到/boot目录下面,应该可以看到下面几个文件

config
System.map
System.map-2.6.24
vmlinuz
vmlinuz-2.6.24

然后,我们再要做的就是生成一个initrd.img文件

网上很多文章都说是用mkinitrd(安装bootcd-mkinitrd),但是不知道为什么,我的apt源里面找不到这个东西,只好改用yaird

$ sudo apt-get install yaird

生成initrd.img文件

mkinitrd.yaird -o /boot/initrd.img-2.6.24 2.6.24

最后是修改/boot/grub/menu.lst文件
这个基本上跟着原来的写,不会出错,我这里就不细说了
四个参数:
title 标题,这个可以随便写,只要你能识别
root 启动盘,跟着原来的写就OK
kernel 指定内核文件,照原来的写,不过把文件改为新生成的vmlinuz-2.6.24
initrd 初始化文件,照原来的写,不过把文件改成新生成的intrd.img-2.6.24文件

然后重启,在grub菜单的时候选择新内核
看看能不能正常启动
然后用uname -r查看一下内核是不是2.6.24吧


4 Responses to “Ubuntu Linux内核编译(linux-2.6.24)”

  1. wanli — April 5, 2009 @ 3:56 pm

    make menuconfig HOSTCC scripts/basic/fixdep
    scripts/basic/fixdep.c: 在函数‘use_config’中:
    scripts/basic/fixdep.c:206: 错误: ‘PATH_MAX’未声明 (在此函数内第一次使用)
    scripts/basic/fixdep.c:206: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
    scripts/basic/fixdep.c:206: 错误: 所在的函数内也只报告一次。)
    scripts/basic/fixdep.c:206: 警告: 未使用的变量‘s’
    scripts/basic/fixdep.c: 在函数‘parse_dep_file’中:
    scripts/basic/fixdep.c:306: 错误: ‘PATH_MAX’未声明 (在此函数内第一次使用)
    scripts/basic/fixdep.c:306: 警告: 未使用的变量‘s’
    make[1]: *** [scripts/basic/fixdep] 错误 1
    make: *** [scripts_basic] 错误 2

  2. hxiang0278 — April 7, 2009 @ 1:15 am

    358984016893136

Leave a Reply