LINUX内核升级 - 更新硬盘驱动

1660阅读 0评论2018-09-12 可怜的猪头
分类:LINUX

https://blog.csdn.net/qifengzou/article/details/42748907
因项目需要,将当前内核(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
megaraid_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
     并根据(02)的过滤结果进行搜索[1000 : 0060],便可看到硬盘驱动名为megaradi_sas

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、如果目标内核的驱动能满足其他设备的情况下,此时可以重启系统了!
上一篇:如何让KVM虚拟机显示sda而不是vda (zhuan)
下一篇:系统定制安装遇到RAID卡无法安装的解决方案