Advertisement

编译2.6.31 内核编译 以及 遇到的问题和错误

阅读量:

内核的编译流程

1.到官方网站下载内核

2、解压

通过.tar.xz解压工具解压linux-2.6.31.tar.bz2文件后,
随后将解压后的文件移动至指定目录/usr/src。
然后切换到模块目录,
将此内核镜像移动至目标目录/usr/src/linux-2.6.31。
为了避免已有核心影响编译过程,
建议先运行命令#. make mrproper以删除旧的目标文件。
完成上述操作后,
会提示删除相关目标档案。
如果希望对同一版本内核进行重新编译,
请执行以下步骤:
首先切换到模块目录,
复制当前内核镜像至备份文件:
#cd /lib/modules #mv 2.4.18 2.4.18.old
设置编译参数时,
需注意以下几点:
#. make config是一种基于文本编辑器的配置工具,
它允许逐行设置必要的选项,
但无法回头修改先前设置的内容,
因此在实际应用中较少被采用。
另一种方式是使用#. make xconfig,
这是一种基于X窗口系统界面的配置工具;
然而在没有X窗口支持的情况下无法使用它。
最后推荐采用#. make menuconfig作为默认配置管理工具,
因为它提供菜单式界面操作简单易学,
并且可以在纯文字界面下完成编辑工作,
目前是最常用的方式。

configure menu

这里默认设置为最下方保存并退出。作为一个新手不太清楚该怎么设置,
希望能得到指导。

make dep

清理旧文件:删除不再需要的旧文件

启动核心编译:压缩后的核心文件将在约30分钟内完成编译

启动模块编译:根据您当前编译的模块数量进行操作(1小时左右)

安装系统组件:将刚编译完成的核心安装到 /lib/modules/uname -r 位置

装饰系统安装:将之前建立好的系统组件安装到指定位置!请确保这一步骤正确无误

5、配置启动引导:
打开 /boot/grub/menu.lst 文件:
如果启动成功会自动添加 title Fedora (2.6.31) 是您新内核版本
请设置默认值:
default=0
设置超时时间:
timeout=0
设置splashimage路径:
splashimage=(hd0,0)/grub/splash.xpm.gz
隐藏菜单项:
hiddenmenu
设置标题为 Fedora (2.6.31):
title Fedora (2.6.31)
设置根目录位置:
root (hd0,0)
加载内核:
kernel /vmlinuz-2.6.31 ro root=UUID=b75809ed-8353-4679-bfe4-e5686f3d6b18 rhgb quiet
加载启动引导图像:
initrd /initrd-2.6.31.img

在内核编译过程中出现了一些错误,下面是引用的别人的错误处理方法

在安装内核之后启动编译流程;随后按照官方指南或教程中的指导进行;遇到三个明显的错误信息

引用:http://blog.chinaunix.net/u/12207/showart_2061214.html

错误提示1****

drivers/built-in.o(.init.text+0x3bad): In function `con_init':

include/trace/events/kmem.h:47: undefined reference to `.L1452'

解决:****

vi /usr/src/linux/drivers/char/vt.c

删除以下行(第2875行)

vc_cons[currcons].d = vc = kzalloc(sizeof(struct vc_data), GFP_NOWAIT);

在相同位置添加:

vc_cons[currcons].d = vc = alloc_bootmem(sizeof(struct vc_data));


错误提示2****

drivers/char/vt.c: In function `con_init':

drivers/char/vt.c:2875: error: implicit declaration of function `alloc_bootmem'

在源文件drivers/char/vt.c的第2875行处出现了一个警告:赋值操作可能导致将整数转换为指针而未进行显式转换

原因: 在vt.c源文件中调用了alloc_bootmem函数时发现缺少对应的.h头文件定义;此外,在所有相关的.h头文件中也未找到该函数的声明

解决:****

vi /usr/src/linux/drivers/char/vt.c,添加以下这行:

#include <linux/bootmem.h>


错误提示3****

drivers/message/fusion/mptsas.c: In function `mptsas_port_delete':

该函数尚未实现:在调用'mptsas_set_rphy'时发生内线失败错误:函数体未被获取

drivers/message/fusion/mptsas.c:467: sorry, unimplemented: called from here

原因:****

mptsas_port_delete中引用了mptsas_set_rphy;然而其定义却位于该方法之前

解决:****

vi /usr/src/linuxdriversmessagefusionmptsas.c 将mptsas_set_rphy 的定义从第 483 行开始 移动到 mptsas_port_delete 的定义前边 即可完成

同时,在制作modules的过程中遇到了无法仅通过serial_usb解决的问题。解决方案是删除了配置文件中的相关选项。

编译好之后出现了不能进入系统的问题,启动时出现

Enforcing mode requested but no policy loaded 的错误

解决办法:

这个SELINUX配置文件存在缺陷,只需将SELINUX设置为disabled mode即可解决问题。

引用:http://www.kernelchina.org/?q=node/103

启动成功后发现不能远程登陆,错误提示

Server refused to allocate pty

解决办法:

mknod -m 666 /dev/ptmx c 5 2

mkdir /dev/pts

引用: http://www.lihaixin.com/2009/08/server-refused-to-allocate-pty-1166.html

全部评论 (0)

还没有任何评论哟~