linux硬盘驱动更新

 在内核未升级之前,系统能够正常启动和使用,而当升级系统内核后,系统却无法正常启动时,这可能是因为硬盘驱动不兼容造成的。现可通过进入旧系统按照以下步骤逐步排查相关原因:

①、查询硬盘控制芯片厂商和型号

#lspci -nn | grep "SAS"

#lspci -nn | grep "SCSI"

如:SAS [1000
:0078]

②、查看老内核使用的硬盘控制芯片驱动

#uname -a                                        #注: 可以查看到当前使用的内核名

cat /lib/modules/2.6.28-16-server/modules.pcimap #注:其中2.6.28-16-server为老内核

# 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 0x00000078 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

并根据①的过滤结果进行搜索[1000
: 0078],便可看到老内核所使用的硬盘芯片驱动名。如:megaradi_sas

③、查找硬盘控制芯片驱动对应的驱动模块文件*.ko

根据②的搜索结果查找硬盘芯片驱动对应的驱动文件*.ko

#lsmod | grep "megaraid_sas"

megaraid_sas           74148  6

scsi_mod              141236  3 sg,sd_mod,megaraid_sas

④、查看新内核硬盘芯片驱动是否支持当前的芯片厂商和型号

#modinfo
/lib/modules/2.6.33-88-server/kernel/drivers/scsi/megaraid/megaraid_sas.ko #注: 假设新内核为2.6.33-88-server

filename:       /lib/modules/2.6.33-88-server/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:v00001000d00000078sv*sd*bc*sc*i*

alias:          pci:v00001000d0000007Csv*sd*bc*sc*i*

alias:          pci:v00001000d00000060sv*sd*bc*sc*i*

alias:          pci:v00001000d00000411sv*sd*bc*sc*i*

depends:        scsi_mod

vermagic:       2.6.33-dpdk.zznode 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 :
0078],则说明该mod支持当前硬盘;如果不包含,则说明新内核硬盘芯片控制驱动不支持当前驱动,此时需要下载合适的驱动源码放入新内核进行编译。

⑤、下载源代码的路径

ftp://ftp.redhat.org/redhat/linux/enterprise/6Server/en/os/SRPMS/

将源码加入内核进行编译的方法待续!

时间: 2024-10-12 16:18:46

linux硬盘驱动更新的相关文章

Dingus 硬盘驱动(简)

网上查找Linux硬盘驱动的话能找到好多相关信息,但是具体代码都没有.经过一番努力,实现了硬盘读写的代码,特来分享一下.可能因为硬盘控制器更新的原因,一些新式的笔记本上使用这些代码会失败.不过在VmWare上是可以用的.这个项目的git地址:git://code.csdn.net/hanjianqiao/dingus.git.在commit为"Add harddisk"的版本直接编译出的镜像便是下面这个. 上图中密密麻麻的16进制数据是从硬盘第一个扇区取出来的,这些数据是在之前就已经写

《Linux设备驱动开发详解(第3版)》海量更新总结

本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 2015.2.26 几乎完成初稿. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第1章 <Linux设备驱动概述及开发环境构建>[D]删除关于LDD6410开发板的介绍[F]更新新的Ubuntu虚拟机[N]添加关于QEMU模拟vexpress板的描述 第2章 <驱动设计的硬件基础> [N]增加关于SoC的介绍:[N]增加关于eFuse的内容:[D]删除ISA总线的内容了:[N]增加关于SP

《Linux设备驱动开发具体解释(第3版)》进展同步更新

本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTEX-A9平台. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第1章 <Linux设备驱动概述及开发环境构建>[D]删除关于LDD6410开发板的介绍[F]更新新的Ubuntu虚拟机[N]加入关于QEMU模拟vexpress板的描写叙述 第2章 <驱动设计的硬件基础> [

《Linux设备驱动开发详解(第3版)》进展同步更新

本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 2014.6.30 目前初步完成4-9章,相对于第2版,这几章主要的变更. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第4章 <Linux内核模块>[F]改正关于模块使用非GPL license的问题:[F]修正关于__exit修饰函数的内存管理 第5章 <Linux文件系统与设备文件>[F]修正关于文件系统与块设备驱动关系图:[N]增加应用到驱动的file操作调用图:[N]增加通过ne

linux installer os的驱动更新

installer os的驱动更新 linux系统可以简单的分为installer OS与运行时的OS,安装阶段识别不到硬件设备大概率因为installers OS版本较低,没有驱动来识别新的硬件,可以尝试更新驱动. 安装installer OS对应的linux-headers 在系统界面进入Rescue a broken system或者在系统开始安装的时候中断,进入命令行模式, ~ # uname -r 3.2.0-23-generic 拿到版本后 apt-get install linux

【转】Linux设备驱动之sysfs

Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息. 去/sys看一看,localhost:/sys#ls /sys/block/ bus/ class/ devices/ firmware/ kernel/ module/ power/Block目录:包含所有的块设备Devices目录:包含系统所有的设备,并根据设备挂接的总线类型组织成层次结构Bus目录:包含系统中所有的总线类型Drivers目录:包括内核

Linux设备驱动核心理论(一)

4.Linux内核模块 4.1 Linux内核模块简介 如果把所有需要的功能都编译到Linux内核.这回导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核. 现在我们需要的是一种机制使得编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码被动态地加载到内核中. Linux提供了这样的一种机制,这种机制被称为模块(Module).模块具有这样的特点: 模块本身不被编译如内核映像,从而控制内核的大小. 模块一旦被加载,它就

linux设备驱动第五篇:驱动中的并发与竟态

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被执行.而并发的执行单元对共享资源(硬件资源和软件上的全局.静态变量)的访问则容易导致竞态(race conditions).可能导致并发和竟态的情况有: SMP(Symmetric Multi-Processing),对称多处理结构.SMP是一种紧耦合.共享存储的系统模型,它的特点是多个CPU使用共

Smart210学习记录------linux串口驱动

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在<#include linux/serial_core.h> 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver). struct