Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65521
  • 博文数量: 31
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-23 09:13
文章分类
文章存档

2011年(1)

2009年(30)

我的朋友

分类: 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 menuconfig

linux 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中选择新的内核来引导了。

参考资料:

原文链接:
阅读(1182) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~