CentOS 7.2编译安装rr2340驱动
RocketRAID2340RAID卡,默认支持在CentOS 5.3版本使用,在CentOS6.x和7.x系统中,Linux内核中缺少该版本的驱动模块,需要下载驱动源码编译安装驱动模块。
而rr2340源码对linux系统内核的支持只更新到2.6,所以在CentOS 7.2下安装该驱动程序,需要对源码进行部分修改。
以下是我在CentOS 7.2系统中编译安装rr2340驱动的过程中遇到的问题及解决办法:
Rr2340驱动源码下载地址:
http://www.highpoint-tech.com/BIOS_Driver/rr2340/Linux/rr2340-linux-src-v1.7-090925-0900.tar.gz
参考文档:
1)、http://blog.unclesniper.org/archives/3-HighPoint-RocketRAID-230x-on-Linux-3.0.html
2)、https://help.ubuntu.com/community/RocketRaid/
1、下载源码包,并上传到/opt目录下,解压缩
# tar -xvf rr2340-linux-src-v1.7-090925-0900.tar.gz
2、进入解压缩目录,并尝试编译
# cd /opt/rr2340-linux-src-v1.7/product/rr2340/linux/
# make
编译过程中,报错信息如上图所示
1)缺少version.h文件,报错显示仅仅支持2.4或2.6的内核。
打开Makefile.def文件查看
# vim /opt/rr2340-linux-src-v1.7/inc/linux/Makefile.def
可以看到代码中只判断内核版本是否为2.6和2.4,所以我们在CentOS6.6中去对应的位置中找到version.h文件,上传到系统指定的位置,让程序按照2.6内核的编译过程进行编译。
# cp /root/version.h /lib/modules/3.10.0-327.el7.x86_64/build/include/linux/
3、保存并退出,再次执行编译命令
# cd /opt/rr2340-linux-src-v1.7/product/rr2340/linux/
# make
可以看见,编译过程可以开始了,但是此时又出现了新的问题,在osm_linux.h文件中有一行错误,找不到linux/config.h这个文件,在CentOS7.2内核中,没有linux/config.h这个文件,所以我们注释这一行,如下所示
# vim /opt/rr2340-linux-src-v1.7/osm/linux/osm_linux.h
4、保存退出,再次回到原路径,执行编译命令
# make
打开os_linux.c文件,找到第263行,修改以下内容
# vim /opt/rr2340-linux-src-v1.7/osm/linux/os_linux.c
5、保存退出,再次回到原路径,执行编译命令
# make
这次报错信息较多,主要有这么几个
1):‘KM_BIO_SRC_IRQ’未声明(在此函数内第一次使用)
打开osm/linux/osm_linux.h文件,删除或注释以下内容
# vim /opt/rr2340-linux-src-v1.7/osm/linux/osm_linux.h
2):提供给函数‘kmap_atomic’的实参太多
打开osm / linux / os_linux.c和osm / linux / osm_linux.c这两个文件,对于每个kmap_atomic和kunmap_atomic注释掉HPT_KMAP_TYPE参数,例如:
注意:这两个文件中的所有含有kmap_atomic和kunmap_atomic都要修改
3):错误:宏“kunmap_atomic”传递了 2 个参数,但只需要 1 个
解决方法与上一个问题解决方法相同
4):‘kunmap_atomic’未声明(在此函数内第一次使用)
5):初始值设定项里有未知的字段‘proc_info’
打开osm_linux.c文件,注释以下内容
# vim /opt/rr2340-linux-src-v1.7/osm/linux/osm_linux.c
6、再次执行编译过程,发现虽然产生了驱动文件rr2340.ko,但仍有下图报错信息,如果使用此时编译的文件安装驱动,安装过程中虽无明显报错,但是加载模块之后,系统会出现严重错误(加载模块后系统无响应,无奈之下只能重做系统)
打开osm_linux.c文件,修改或添加以下内容:
7、保存并退出,再次执行编译命令
# make
可以看见只有一条警告信息,这条信息可以忽略,到这一步,编译工作完成,接下来对编译好的驱动进行安装
# make install
可以看到驱动模块已经成功安装
8、加载驱动模块并查看(注意:加载模块的前提是在raid卡中将RAID分区已经制作完成,否则模块加载可能会失败)
# modprob rr2340
# lsmod | grep rr2340 <<<查看驱动模块是否成功加载
# lsblk <<<查看raid阵列是否被识别(在raid阵列已经创建完成的前提下)