全部博文(31)
分类: LINUX
2009-05-23 21:20:35
下载linux kernel 2.6.x版本,官方网站下载 。我下载的是2.6.18,下载这个版本来编译并没有什么特别的理由,我随机选择的。
将压缩包解压在usr/src目录下新建的linux-2.6.18目录下,然后cd linux-2.6.18进入该目录。
make menuconfig 使用文本方式配置编译选项。使用此命令编译前,需要安装libncurses5-dev,否则会报告
“ In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.h: 没有那个文件或目录”
这个编译错误。
如果一切顺利,make menuconfig这个命令将会调出配置菜单窗口:
可以根据上图中的操作说明在配置菜单中选择编译参数。有比较详细的Linux内核编译选项说明,可以参考。
配置完成后,就可以输入make命令来开始编译了。
我在编译的时候遇到了如下两个错误:
1。 ‘PATH_MAX’ undeclared , 是在编译/scripts/mod目录下的sumversion文件时遇到了未定义的宏PATH_MAX,解决方法: 在/scripts/mod目录下的sumversion.c文件开始部分加入#include 即可,在include/linux目录下的limits.h文件中定义了这个宏。
2。 undefined reference to `__udivdi3′,undefined reference to `__umoddi3′,根据网上查到的资料,是因为gcc4.3的版本较新,编译较老的内核版本时会出现这个问题,其实是GCC的一个bug。参考这两 个文档:,。解决方法:在根目录下的Makefile文件中,找到下面的内容:
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common
增加一行,修改成:
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common \
-fno-tree-scev-cprop
除此两处之外,没遇到其他的error,但是warning还是有一些的,对这些warning没仔细分析和清除。这样,n小时之后,make编译就成功完成了。
然后,make modules编译内核模块;make modules_install安装模块;
make install安装内核。
cd /boot
mkinitramfs -o initrd.img-2.6.18 2.6.18 创建内核镜像。
update-grub 更新grub引导后,reboot重启,就可以在grub中选择新的内核来引导了。
参考资料:
原文链接: