RHEL4内核升级过程

  一、下载内核源码

http://www.kernel.org/ 我之前下载的是linux-2.6.36.2.tar.bz2

[root@bogon ~]# uname –r  //查看内核版本

2.6.9-55.ELsmp

二、升级过程

[root@bogon ~]#tar zxvf linux-2.6.36.2..tar.gz -C /usr/src/      //解压到该目录/usr/src/ [root@bogon ~]# cd /usr/src/linux-2.6.36.2

[root@bogon linux-2.6.36.2]# make mrproper     //去除内核的依赖关系以及编译后的垃圾信息

[root@bogon linux-2.6.36.2]#make menuconfig  //进入菜单方式界面配置内核

RHEL4内核升级过程_第1张图片 

[root@bogon linux-2.6.36.2]#make bzImage            //编译内核

[root@bogon linux-2.6.36.2]# make modules         //编译可加载模块

[root@bogon linux-2.6.36.2]#make modules_install   //安装模块

[root@bogon linux-2.6.36.2]#make install          //安装新内核

  错误提示:

 

[root@bogon linux-2.6.36.2]#vi /usr/src/ linux-2.6.36.2/drivers/char/vt.c

解决方法:

删除以下行

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

在相同位置添加:

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

[root@bogon linux-2.6.36.2]#make bzImage   

错误提示

 

[root@bogon linux-2.6.36.2]#vi /usr/src/ linux-2.6.36.2/drivers/char/vt.c

解决方法:

删除以下行

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

在相同位置添加:

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

[root@bogon linux-2.6.36.2]#make bzImage   

错误提示

RHEL4内核升级过程_第2张图片

原因:vt.c中引用了alloc_bootmem,但是找不到相关.h定义文件或没有在相关的头文件.h中定义

解决方法:

[root@bogon linux-2.6.36.2]#vi /usr/src/ linux-2.6.36.2/drivers/char/vt.c

添加以下这行:
#include

[root@bogon linux-2.6.36.2]# make modules      

错误提示:

RHEL4内核升级过程_第3张图片

原因:

mptsas_port_delete中引用了mptsas_set_rphy,但mptsas_set_rphy的定义却在mptsas_port_d之后。

解决方法:

vi /usr/src/linux-2.6.36.2/drivers/message/fusion/mptsas.c,将mptsas_set_rphy的定义移动到mptsas_port_delete的定义前面即可

  static inline void
mptsas_set_rphy(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_rphy *rphy)
{
if (phy_info->port_details) {
   phy_info->port_details->rphy = rphy;
   dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "sas_rphy_add: rphy=%p\n",
      ioc->name, rphy));
}

 

if (rphy) {
   dsaswideprintk(ioc, dev_printk(KERN_DEBUG,
      &rphy->dev, MYIOC_s_FMT "add:", ioc->name));
   dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "rphy=%p release=%p\n",
      ioc->name, rphy, rphy->dev.release));
}
}

RHEL4内核升级过程_第4张图片
 

剪切到

static void
mptsas_port_delete(MPT_ADAPTER *ioc, struct mptsas_portinfo_details * port_details)
{

之前

[root@bogon linux-2.6.36.2]#reboot  //重启

RHEL4内核升级过程_第5张图片
 

进入不了系统,错误提示:

RHEL4内核升级过程_第6张图片

原因:升级最新内核的缘故,解决方法:

进入旧内核,设置.config文件,CONFIG_SYSFS_DEPRECATED_V2=Y,可以在

make menuconfig时使用查找功能

RHEL4内核升级过程_第7张图片

RHEL4内核升级过程_第8张图片

然后重新编译内核、编译模块、安装模块、安装内核,重启系统。

文章参考http://twentyfour.blog.51cto.com/945260/403288