编译驱动及iso镜像替换megaraid_sas驱动

本文档详细记录了在Kylin 4.0.2服务器上安装过程中,由于RAID适配器驱动不兼容导致的磁盘未识别问题。通过下载不同内核版本的megaraid_sas驱动源码,编译测试发现内核4.12的驱动支持设备ID为1000:0014,并能在4.4.58内核上编译成功。接着将新编译的驱动替换ISO镜像中的旧驱动,制作新ISO,最终成功解决了驱动问题。

iso镜像替换megaraid_sas驱动

一、问题分析

服务器ThtinkSystem SR650,RAID适配器为ThinkSystem RAID930-16i 4G。安装Kylin-4.0.2-server-sp2-18011911.J1-x86_64.iso系统失败,显示未探测到磁盘驱动器

Kylin-4.0.2-server-sp2-18011911.J1-x86_64.iso的内核版本为4.4.58-20171113.kylin.5.all-generic

安装centos7.6或者使用具有live的光盘进入系统,执行

$ lspci -knn | grep -i raid -A 10

RAID bus controller [0104]: LSI Logic / Symbios Logic MegaRAID SAS-3 3106 [Invader] [1000:0014] (rev 02)
	Kernel modules: megaraid_sas

可知使用megaraid_sas作为驱动,VendorID为 1000,DeviceID为0014。

而Kylin-4.0.2-server-sp2-18011911.J1-x86_64.iso的内核版本为4.4.58-20171113.kylin.5.all-generic,中的megaraid_sas不支持该设备。

二、驱动编译

2.1 下载内核

从网站https://mirrors.edge.kernel.org/pub/linux/kernel/,下载如下内核

内核版本
linux-4.4.58.tar.gz
linux-4.4.98.tar.xz
linux-4.5.1.tar.xz
linux-4.8.tar.xz
linux-4.9.237.tar.xz
linux-4.10.1.tar.xz
linux-4.12.tar.xz
linux-4.20.tar.xz
linux-5.4.58.tar.xz

2.2 查找各个内核megaraid_sas驱动代码

查找内核中的megaraid驱动代码是否VendorID为 1000,DeviceID为0014的设备

grep -rin "0014" ./linux-4.4.58/drivers/scsi/megaraid查看是否支持设备号。

在这里插入图片描述

说明linux-4.12,linux-4.20,linux-5.4.58中的megaraid代码支持deviceID:0014。

2.3 搭建编译环境

安装Kylin-4.0.2-server-sp2-18011911.J1-x86_64.iso虚拟机,挂载镜像,linux系统安装linux-headers,麒麟系统安装kylin-headers

dpkg -i kylin-headers-all_4.4.58-20171113.kylin.5_all.deb
dpkg -i kylin-headers-all-generic_4.4.58-20171113.kylin.5_amd64.deb

2.4 编译驱动

进入Kylin-4.0.2-server-sp2-18011911虚拟机,将各个内核版本的megaraid代码拷到虚拟机的/opt目录下。

root@Kylin:/opt# scp -r lmz@192.168.2.1:~/download/linux-4.12/drivers/scsi/megaraid megaraid_4.12
root@Kylin:/opt# scp -r lmz@192.168.2.1:~/download/linux-4.20/drivers/scsi/megaraid megaraid_4.20
root@Kylin:/opt# scp -r lmz@192.168.2.1:~/download/linux-5.4.58/drivers/scsi/megaraid megaraid_5.4.58

使用make -C 内核头文件目录 M=驱动源码的makefile目录 modules进行编译。

  • 编译megaraid_4.12:编译成功
root@Kylin:/opt/megaraid_4.12# make -C /usr/src/kylin-headers-all-generic/ M=`pwd` modules
make: Entering directory '/usr/src/kylin-headers-all-generic'
  CC [M]  /opt/megaraid_4.12/megaraid_mm.o
  CC [M]  /opt/megaraid_4.12/megaraid_mbox.o
  CC [M]  /opt/megaraid_4.12/megaraid_sas_base.o
  CC [M]  /opt/megaraid_4.12/megaraid_sas_fusion.o
  CC [M]  /opt/megaraid_4.12/megaraid_sas_fp.o
  LD [M]  /opt/megaraid_4.12/megaraid_sas.o
  Building modules, stage 2.
  MODPOST 3 modules
  CC      /opt/megaraid_4.12/megaraid_mbox.mod.o
  LD [M]  /opt/megaraid_4.12/megaraid_mbox.ko
  CC      /opt/megaraid_4.12/megaraid_mm.mod.o
  LD [M]  /opt/megaraid_4.12/megaraid_mm.ko
  CC      /opt/megaraid_4.12/megaraid_sas.mod.o
  LD [M]  /opt/megaraid_4.12/megaraid_sas.ko
make: Leaving directory '/usr/src/kylin-headers-all-generic'

  • 编译megaraid_4.20:编译失败
root@Kylin:/opt/megaraid_4.20# make -C /usr/src/kylin-headers-all-generic/ M=`pwd` modules
make: Entering directory '/usr/src/kylin-headers-all-generic'
  CC [M]  /opt/megaraid_4.20/megaraid_mm.o
/opt/megaraid_4.20/megaraid_mm.c: In function ‘lld_ioctl’:
/opt/megaraid_4.20/megaraid_mm.c:701:3: error: implicit declaration of function ‘timer_setup_on_stack’ [-Werror=implicit-function-declaration]
   timer_setup_on_stack(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值