LINUX內核升級 - 更新硬盤驅動


    因項目需要,將當前內核(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:         [email protected]
    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:         [email protected]
    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、如果目標內核的驅動能滿足其他設備的情況下,此時可以重啓系統了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章