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(

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

被折叠的 条评论
为什么被折叠?



