移植mpt3sas驱动
来源:互联网 发布:质检总局网络党校 编辑:程序博客网 时间:2024/06/15 01:50
Fullnat的lvs内核在华为的服务器上正常运行,但在浪潮的服务器上却报如下错误,不能正常启动。
而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
- 移植mpt3sas驱动
- 驱动移植
- 系统移植-驱动移植
- cs8900a驱动移植笔记
- LCD驱动移植笔记
- 网卡驱动移植成功
- USB 驱动移植心得
- USB 驱动移植心得
- 移植LCD驱动
- 移植SD卡驱动。
- USB驱动移植心得
- 2410移植触摸屏驱动
- camera驱动移植总结
- CS8900A网卡驱动移植
- cs8900驱动的移植
- S3c2410触摸屏驱动移植
- RTC驱动移植
- USB驱动移植心得
- 用Reactor模式构建的Kafka Server网络层和API层---架构和设计
- sqlserver 2008 无法使用特殊主体‘sa’,错误15405
- 在WebView的页面中直接使用res中的图片
- linux使用大全
- leetcode--Maximum Depth of Binary Tree
- 移植mpt3sas驱动
- Linux学习第十三天--配置用户环境
- bootstrap下拉框动态赋值
- iOS版移动和地图与高德地图差异化开发实现
- 4 VPN
- 编写springboot项目jar包工程启动、停止、重启脚本
- 网易校招编程题目之牛牛分苹果
- sql format 格式化数字(前面补0)
- Filter-----全栈压缩