移植mpt3sas驱动

Fullnat的lvs内核在华为的服务器上正常运行,但在浪潮的服务器上却报如下错误,不能正常启动。

[ 103.5652276 ] Kernel panic - not syncing: Attempted to kill init!
而6.5版本的红帽官方内核是能正常启动的。经排查,发现是浪潮服务器主板上用了SAS卡,但Fullnat的lvs内核中因为比较老,没有这个驱动(mpt3sas)

红帽内核中:lsmod | grep mpt3sas 有结果

find /home/lzt/Downloads/lvs_kernels/2/LVS/kernel -name mpt3sas 无结果

所以,需要将红帽内核中的mpt3sas驱动模块移植到lvs内核中

下载红帽内核的SPackages。以.src.rpm结尾的软件包是包含了源代码的rpm包,在安装时需要进行编译。但我们的目的只是为了获取mpt3sas驱动模块的源代码。

wget http://vault.centos.org/6.5/os/Source/SPackages/kernel-2.6.32-431.el6.src.rpm

rpm -ivh kernel-2.6.32-431.el6.src.rpm

cd /root/rpmbuild/SPECS/ (内核包的默认解压目录)

yum install rpm-build

rpmbuild -bp kernel.spec  (生成源代码。这一步可能还要解决依赖问题)

find /root/rpmbuild/ -name mpt3sas

cp /root/rpmbuild/BUILD/kernel-2.6.32-431.el6/linux-2.6.32-431.el7.centos.x86_64/drivers/scsi/mpt3sas kernel/drivers/scsi/ -r (将找到的mpt3sas驱动模块拷贝过去)

修改一些配置文件(对比原来的),将mpt3sas作为模块加入编译过程。

cd drivers/scsi/

emacs Kconfig

1918L: source "drivers/scsi/mpt3sas/Kconfig"


cd kernel/

make menuconfig


emacs  drivers/scsi/Makefile

然后就可以开始编译了。编译过程肯定会报错(如下),因为我们拷贝过来的mpt3sas驱动模块的源代码只是实现部分,它新增了一些变量和函数,在被移植的内核源代码中是没有的。需要按照报错信息,对比新旧内核源代码,将定义声明部分拷贝过来。

drivers/scsi/mpt3sas/mpt3sas_base.c: In function ‘_base_wait_on_iocstate’:

drivers/scsi/mpt3sas/mpt3sas_base.c:3000: error: implicit declaration of function ‘usleep_range’

drivers/scsi/mpt3sas/mpt3sas_base.c: In function ‘_base_reset_handler’:

drivers/scsi/mpt3sas/mpt3sas_base.c:4704: error: ‘USHRT_MAX’ undeclared (first use in this function)

drivers/scsi/mpt3sas/mpt3sas_base.c:4704: error: (Each undeclared identifier is reported only once

drivers/scsi/mpt3sas/mpt3sas_base.c:4704: error: for each function it appears in.)

make[3]: *** [drivers/scsi/mpt3sas/mpt3sas_base.o] Error 1

make[3]: *** Waiting for unfinished jobs....

drivers/scsi/mpt3sas/mpt3sas_config.c: In function ‘mpt3sas_config_done’:

drivers/scsi/mpt3sas/mpt3sas_config.c:260: error: ‘USHRT_MAX’ undeclared (first use in this function)

drivers/scsi/mpt3sas/mpt3sas_config.c:260: error: (Each undeclared identifier is reported only once

drivers/scsi/mpt3sas/mpt3sas_config.c:260: error: for each function it appears in.)

make[3]: *** [drivers/scsi/mpt3sas/mpt3sas_config.o] Error 1

drivers/scsi/mpt3sas/mpt3sas_transport.c: In function ‘_transport_convert_phy_link_rate’:

drivers/scsi/mpt3sas/mpt3sas_transport.c:104: error: ‘SAS_LINK_RATE_12_0_GBPS’ undeclared (first use in this function)

drivers/scsi/mpt3sas/mpt3sas_transport.c:104: error: (Each undeclared identifier is reported only once

drivers/scsi/mpt3sas/mpt3sas_transport.c:104: error: for each function it appears in.)

make[3]: *** [drivers/scsi/mpt3sas/mpt3sas_transport.o] Error 1

make[2]: *** [drivers/scsi/mpt3sas] Error 2

make[1]: *** [drivers/scsi] Error 2

make: *** [drivers] Error 2

可以利用下面的命令来查找声明(头文件)和定义(.c文件)

grep -rnIw usleep_range --include=’*.h’ .

grep -rnlw usleep_range --include=’*.c’ .

最后我们一共修改了如下文件,再次编译,安装,重启机器,选择lvs内核,发现错误已经解决。

./include/linux/delay.h

./kernel/timer.c

./include/linux/kernel.h

./include/scsi/scsi_transport_sas.h

./drivers/scsi/scsi_transport_sas.c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值