LINUX内核升级 - 更新硬盘驱动
Posted 祁峰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX内核升级 - 更新硬盘驱动相关的知识,希望对你有一定的参考价值。
- 作者:邹祁峰
- 邮箱:Qifeng.zou.job@hotmail.com
- 博客:http://blog.csdn.net/qifengzou
- 日期:2015.03.21 01:45(更新)
- 转载请注明来自"祁峰"的CSDN博客
因项目需要,将当前内核(2.6.32-220.el6.x86_64)升级到目标内核(2.6.33-110.el6.x86_64),但是编译的目标内核(2.6.33-110.el6.x86_64)的对应驱动程序并不一定支持当前系统的对应设备。本篇将详细讲述目标内核驱动无法支持当前硬盘的处理步骤。
01、编译目标内核
请查考相关文档,在此不再赘述!
02、查询硬盘控制芯片厂商和型号 #lspci -nn | grep "SAS" #lspci -nn | grep "SCSI"
#lspci -nn | grep "RAID"
如:03:00.0 RAID bus controller [0104]: LSI Logic / Symbios LogicMegaRAID SAS 1078 [1000:0060] (rev 04) 其中的[1000:0060]就是当前硬盘的型号,MegaRAID为驱动名。
03、查看硬盘驱动程序名 #uname -a #注: 可以查看到当前内核
#cat /lib/modules/2.6.32-220.el6.x86_64/modules.pcimap #注:其中2.6.32-220.el6.x86_64为当前内核
# pci module vendor device subvendor subdevice class class_mask driver_data scx200 0x0000100b 0x00000500 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 scx200 0x0000100b 0x00000510 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 scx200 0x0000100b 0x00000505 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 scx200 0x0000100b 0x00000515 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 cpqphp 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0x00080400 0xffffffff 0x0 ibmphp 0x00001014 0x00000246 0x00001014 0x00000247 0x00080400 0x00000000 0x0 cpcihp_zt5550 0x00001138 0x00005550 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 shpchp 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0x00060400 0xffffffff 0x0 gx1fb 0x00001078 0x00000104 0xffffffff 0xffffffff 0x00030000 0x00ff0000 0x0 gxfb 0x0000100b 0x00000030 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 lxfb 0x00001022 0x00002081 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 cyber2000fb 0x000010ea 0x00002000 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 cyber2000fb 0x000010ea 0x00002010 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 cyber2000fb 0x000010ea 0x00005000 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
并根据(02)的过滤结果进行搜索[ 1000 : 0060 ],便可看到硬盘驱动名为 megaradi_sasmegaraid_sas 0x00001000 0x00000411 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 megaraid_sas 0x00001000 0x00000060 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 megaraid_sas 0x00001000 0x0000007c 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 megaraid_sas 0x00001000 0x00000060 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 megaraid_sas 0x00001000 0x00000079 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 megaraid_sas 0x00001000 0x00000413 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 megaraid_sas 0x00001028 0x00000015 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 advansys 0x000010cd 0x00001100 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 advansys 0x000010cd 0x00001200 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
04、查找硬盘控制芯片驱动对应的驱动程序 根据(03)的搜索结果查找硬盘芯片驱动对应的驱动文件*.ko #lsmod | grep "megaraid_sas"
megaraid_sas 74148 6
scsi_mod 141236 3 sg,sd_mod,megaraid_sas
由以上信息可知,硬盘驱动程序在scsi模块的megaraid下可以找到。
05、查看目标内核硬盘芯片驱动是否支持当前硬盘 可通过modinfo命令查看指定驱动程序支持哪些型号的对应设备,如下所示:
#modinfo/lib/modules/2.6.33-110.el6.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko
filename: /lib/modules/2.6.33-110.el6.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko
description: LSI MegaRAID SAS Driver
author: megaraidlinux@lsi.com
version: 00.00.05.40-rh2
license: GPL
srcversion: 6369B642440E1B1D4319D71
alias: pci:v00001000d0000005Bsv*sd*bc*sc*i*
alias: pci:v00001028d00000015sv*sd*bc*sc*i*
alias: pci:v00001000d00000413sv*sd*bc*sc*i*
alias: pci:v00001000d00000071sv*sd*bc*sc*i*
alias: pci:v00001000d00000073sv*sd*bc*sc*i*
alias: pci:v00001000d00000079sv*sd*bc*sc*i*
alias: pci:v00001000d0000007Csv*sd*bc*sc*i*
alias: pci:v00001000d00000411sv*sd*bc*sc*i*
depends: scsi_mod
vermagic: 2.6.33-110.el6.x86_64 SMP mod_unload modversions
parm: poll_mode_io:Complete cmds from IO path, (default=0) (int)
parm: max_sectors:Maximum number of sectors per IO command (int)
parm: msix_disable:Disable MSI-X interrupt handling. Default: 0 (int)
从显示的结果中,可发现目标内核的硬盘驱动程序信息中并无[1000:0060],因此,目标内核并不支持该型号的硬盘设备。如果此时重启,并选择目标内核启动的话,系统将无法正常启动。那么我们如何才能使目标内核(2.6.33-110.el6.x86_64)的硬盘驱动支持当前硬盘设备呢?
06、下载硬盘驱动源码 可根据硬盘信息到官网下载硬盘驱动程序
07、编译硬盘驱动源码
将源码解压后,按照如下命令进行编译:(注:BUILD_KERNEL指明为哪个内核编译驱动模块 默认为当前内核)
#make BUILD_KERNEL=2.6.33-110.el6.x86_64
执行完以上命令后,将会生成驱动程序megaraid_sas.ko。那么又该如何确认生成的驱动程序是否支持当前硬盘设备呢?
08、新驱动是否支持当前设备
和(05)的操作相似,使用modinfo查看megaraid_sas.ko的具体信息,如:
#modinfo megaraid_sas.ko
filename: /lib/modules/2.6.33-110.el6.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko
description: LSI MegaRAID SAS Driver
author: megaraidlinux@lsi.com
version: 00.00.05.40-rh2
license: GPL
srcversion: 6369B642440E1B1D4319D71
alias: pci:v00001000d0000005Bsv*sd*bc*sc*i*
alias: pci:v00001028d00000015sv*sd*bc*sc*i*
alias: pci:v00001000d00000413sv*sd*bc*sc*i*
alias: pci:v00001000d00000071sv*sd*bc*sc*i*
alias: pci:v00001000d00000073sv*sd*bc*sc*i*
alias: pci:v00001000d00000079sv*sd*bc*sc*i*
alias: pci:v00001000d00000060sv*sd*bc*sc*i*
alias: pci:v00001000d0000007Csv*sd*bc*sc*i*
alias: pci:v00001000d00000411sv*sd*bc*sc*i*
depends: scsi_mod
vermagic: 2.6.33-110.el6.x86_64 SMP mod_unload modversions
parm: poll_mode_io:Complete cmds from IO path, (default=0) (int)
parm: max_sectors:Maximum number of sectors per IO command (int)
parm: msix_disable:Disable MSI-X interrupt handling. Default: 0 (int)
在以上信息中出现了[1000 : 0060]信息,说明生成的驱动程序能够支持当前的硬盘设备,那么如何让目标内核启动的时候自动加载该驱动程序呢?
09、更新目标内核硬盘驱动
首先,将新驱动megaraid_sas.ko拷贝到目标内核/lib/modules/2.6.33-110.el6.x86_64下的指定目录
#cp megaraid_sas.ko /lib/modules/2.6.33-110.el6.x86_64/kernel/drivers/scsi/megaraid/
其次,使用depmod更新目标内核(2.6.33-110.el6.x86_64)模块的依赖关系
#depmod -a 2.6.33-110.el6.x86_64
10、如果目标内核的驱动能满足其他设备的情况下,此时可以重启系统了!
以上是关于LINUX内核升级 - 更新硬盘驱动的主要内容,如果未能解决你的问题,请参考以下文章
请问 我想给自己的android 手机内核升级 mediatek的