Welcome 微信登录

首页 / 操作系统 / Linux / RedHat as4 gcc 3.4编译2.6.31 内核编译以及遇到的问题和错误

gcc4.4.1版本编译linux 2.6.31版本没有错误,但是gcc3.4编译会有若干问题,步骤、问题和解决方案,汇总如下:内核的编译流程1.到官方网站下载内核2、解压

#tar -jxvf linux-2.6.31.tar.bz2
然后移动解压后的文件到 /usr/src
#mv linux-2.6.31 /usr/src
#cd /usr/src/linux-2.6.31
如果怕之前已经有人编译过核心,会产生一些.o的目的档案,所以先执行:
#make mrproper
会显示RM去除档案的讯息
3、如果对同一版本内核编译,要修改一下:
#cd /lib/modules
#mv 2.4.18 2.4.18.old
4、设定编译模式:
make config :这种模式需要逐行输入所需要设定的项目,无法往前修改设定,所以目前很少使用这种方式来设定 Kernel 的项目了;
make xconfig :这种模式则是使用 X-Window 为主要环境的设定模式!除非你有 X-Window 在执行,否则没有办法使用这种模式;
make menuconfig :这种模式有点像是文字界面的选单模式,较为简便,而且可以在纯文字界面下面执行编辑动作!是目前最常使用的模式。

#make menuconfig :这里我默认 就是最下面的保存然后退出 由于本人菜蛋 不知道怎么设置 希望高手指点。 # make clean <==将旧的资料去除掉!#make
# make bzImage <==开始编译核心!这个核心是经过压缩的 (30分钟左右)
# make modules <==开始编译模块!这个动作视您刚刚编译的模块数量!(1小时左右)
# make modules_install <==将资料给他安装在 /lib/modules/`uname -r` 里面
# make install <==将刚刚 bzImage 建立完成的核心给他安装上来! 别忘了这步第一次我忘了又重新编了一遍浪费了2个多小时 #sudo mkinitramfs -o /boot/initrd.img-2.6.31 /lib/modules/2.6.31 生成initrd.img,关于mkinitramfs的其他参数,请参考man mkinitramfs。
5、修改grub:(两种方法)1) #sduo update-grub
2) #vi /boot/grub/menu.lst
如果编译成功会自动添加 title Fedora (2.6.31)是我新内核 修改default 如果你要用第一个内核就改 default=0 第二个是 1 依次类推。。。
default=0
timeout=0
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
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在内核编译过程中出现了一些错误,下面是引用的别人的错误处理方法1. 下载内核后开始编译,开始按照网络上的步骤来编译,编译问题出现3个错误。   错误提示 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: warning: assignment makes pointer from integer without a cast原因: 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":drivers/message/fusion/mptsas.c:105: sorry, unimplemented: inlining failed in call to "mptsas_set_rphy": function body not availabledrivers/message/fusion/mptsas.c:467: sorry, unimplemented: called from here原因: mptsas_port_delete 中引用了 mptsas_set_rphy ,但 mptsas_set_rphy 的定义却在 mptsas_port_delete 之后。 解决: vi /usr/src/linux/drivers/message/fusion/mptsas.c ,将 mptsas_set_rphy 的定义(第 483 行起)移动到mptsas_port_delete 的定义(第 446 行)前面即可。 另外在make modules 时,出现了不能只是serial_usb 的问题,解决办法是在配置文件中删除了改选项编译好之后出现了不能进入系统的问题,启动时出现 Enforcing mode requested but no policy loaded 的错误 解决办法: 是/etc/selinux/config的配置有问题,只要把SELINUX的值改成disabled就好了.启动成功后发现不能远程登陆,错误提示Server refused to allocate pty解决办法:# mknod -m 666 /dev/ptmx c 5 2
      # mkdir /dev/pts注:我在RedHat as4上用以上方法编译2.6.33.3内核编译是成功了,但是不能进入系统。只得安装gcc4.5.0,然后再编译内核,编译过程很顺利,编译完成后成功进入2.6.33.3内核系统。升级RedHat as4内核到2.6.33.3Linux:Clock skew detected. Your build may be incomplete.解决办法相关资讯      redhat  gcc 
  • gcc: error trying to exec "  (今 06:25)
  • GCC 6.1带来新的C++17特性、完全支  (05月06日)
  • Linux环境下使用GCC编译,GDB反汇  (03月30日)
  • 用GCC进行程序的编译  (06月14日)
  • GNU编译器套件GCC 6.1发布 默认使  (04月28日)
  • 让GCC支持成员函数模板的trick  (03月10日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数