文章声明:本文是写给那些没有内核编译经验的新人看的,高手老鸟也欢迎留下您的意见。
近来一直很忙,都没有怎么更新。3月以来,总共就更新了3篇。
今天早上突然感觉无所事事,刚好在CCF看到有关于内核编绎的帖子,说有多么多么麻烦
我以前没有做过,刚好今天可以试下
于是先到www.kernel.org上下载了2.6.24的内核包
解压
移动到/usr/src
保源代码目录下没有不正确的.o文件以及文件的相互依赖
配置内核选项, menuconfig方式是一种很直观的配置界面,我偏向于这个
这里面参数众多,我也不熟悉,所以只取消了几个肯定不会用到的东西,比如我从来没见过的文件系统,以及无线支持,IPv6等等
我这里建议大家如果不熟悉还是要查了资料再动,不然,可能会导致系统不能正常启动。
有些人的系统可能跟我的一样会提示一些错误,这个时候就需要安装一些开发包。
错误1:
这个是由于没有安装libc6的开发包(这个包不安装,大多数编绎都会报错)
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
解决办法:
错误2:
只知道这个包编译内核时必装,但不知道有没有中文名
make[1]: *** [scripts/kconfig/lxdialog/checklist.o] Error 1
make: *** [menuconfig] Error 2
解决办法:
然后,基本上我们就可以手动进行选择了。
经过一系统烦琐的选择后,我们要保存配置文件然后退出
退出之后,我们就可以进行下一步操作了
$ sudo make modules_install install
我这里做一起写了,但其实,这是两个很漫长的过程,根据内核的内容以及机器配置情况,时间会有不同
但是可以肯定的是,
这个时间肯定是很久的
等这两步结束后,内核就已经装好了
我们到/boot目录下面,应该可以看到下面几个文件
System.map
System.map-2.6.24
vmlinuz
vmlinuz-2.6.24
然后,我们再要做的就是生成一个initrd.img文件
网上很多文章都说是用mkinitrd(安装bootcd-mkinitrd),但是不知道为什么,我的apt源里面找不到这个东西,只好改用yaird
生成initrd.img文件
最后是修改/boot/grub/menu.lst文件
这个基本上跟着原来的写,不会出错,我这里就不细说了
四个参数:
title 标题,这个可以随便写,只要你能识别
root 启动盘,跟着原来的写就OK
kernel 指定内核文件,照原来的写,不过把文件改为新生成的vmlinuz-2.6.24
initrd 初始化文件,照原来的写,不过把文件改成新生成的intrd.img-2.6.24文件
然后重启,在grub菜单的时候选择新内核
看看能不能正常启动
然后用uname -r查看一下内核是不是2.6.24吧
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
最好说明一下你现在用的发行版本以及内核版本号
看看这两个:
http://forum.soft32.com/linux/cross-compilation-error-ftopict336085.html
http://www.linuxforums.org/forum/linux-kernel/22858-make-xconfig-error.html
358984016893136
发错地方了吧