查磁盘控制器驱动名和版本,必须组合使用lspci -k定位驱动模块名(如ahci、nvme、hpsa),再用modinfo | grep -e '^(version|srcversion)'获取版本及内核唯一哈希;同时需通过lspci -vv核验class(0106/0108/0104)和progif(01为ahci模式)确认控制器真实类型与工作模式。

查磁盘控制器驱动名和版本,只信 modinfo + lspci -k
磁盘控制器(如 AHCI、NVMe、RAID 卡)的驱动不是网卡那种有统一接口的设备,ethtool 完全不适用,lshw 和 lsusb 也只对 USB 存储有效。真正能拿到准确驱动名和版本的,只有两步组合:
-
lspci -k找出哪个 PCI 设备用了哪个内核模块:比如输出里有Kernel driver in use: ahci或Kernel driver in use: nvme,这个ahci或nvme就是驱动模块名 - 再用
modinfo ahci | grep -E '^(version|srcversion)'查版本——注意别只看version字段,srcversion才是内核编译时生成的唯一哈希,能确认是否匹配当前内核
常见误区:有人用 lspci -v 看 “Subsystem” 或 “ProgIf”,那只是硬件能力描述,和加载的驱动无关;cat /sys/class/scsi_host/host*/driver 只返回符号链接路径,不带版本。
lspci -vv 里哪些字段说明控制器真实身份
光知道驱动叫 ahci 不够,得确认它管的是哪类控制器。关键字段不是 “Device” 名称,而是:
-
Class:必须是0106(SATA controller)或0108(NVMe controller),0104是 RAID 控制器,三者驱动完全不同 -
ProgIf:值为01表示 AHCI 模式,00是 legacy IDE 模式(此时实际走的是ata_piix驱动,不是ahci) -
Subsystem行里的 Vendor ID 和 Device ID(如1022:7901),可反查芯片型号,判断是否需专有驱动(比如 AMD 的ahci在某些老主板上有 bug,得换libata参数)
如果 lspci -k 显示 Kernel driver in use: hpsa,但 modinfo hpsa 报错“Module not found”,说明这是旧版 HP Smart Array 驱动,已合并进 cciss 或 hpsa 模块随内核发布,版本就等于当前内核版本。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
RAID 卡驱动版本不能只看 modinfo
像 LSI/Broadcom MegaRAID、Dell PERC 这类卡,驱动分两层:内核模块(如 megaraid_sas)负责通信,固件(firmware)才决定功能边界。所以必须同时查:
-
modinfo megaraid_sas | grep version→ 内核模块版本(如6.00.05.00) -
storcli /c0 show或MegaCli64 -AdpAllInfo -aALL→ 固件版本(如FW Package Version: 5.0-0_1012) -
lspci -vv -s xx:xx.x | grep -A2 "Subsystem:"→ 确认卡的硬件 revision,避免固件降级导致功能丢失
典型坑:modinfo 显示 version: 07.712.04.00-rc1,看着很新,但 storcli 返回固件是 2.130.40-2300,说明内核模块已更新,但卡上固件太老,NVMe passthrough 或 TRIM 支持可能失效。
虚拟机里看到的 “驱动” 基本不可信
在 KVM/QEMU、VMware 或 Hyper-V 中,lspci -k 显示的 virtio_scsi 或 vmw_pvscsi 是模拟层驱动,它的“版本”取决于宿主机内核和 Guest OS 内核的匹配程度:
-
modinfo virtio_scsi的 version 字段只是内核编译时间戳,没实际意义 - 真正影响性能的是
/sys/bus/scsi/devices/*/queue/rq_affinity和/sys/block/vdb/queue/scheduler这些运行时参数 - 若看到
Kernel driver in use: ata_piix且设备 Class 是0101(IDE controller),说明还在用老旧模拟模式,应改用virtio-scsi并启用virtio-scsi的 multi-queue 特性
最易被忽略的一点:物理机上查到的驱动版本,放到虚拟机里毫无参考价值。控制器型号、PCIe topology、甚至 BIOS 设置(如 VT-d 开关)都会让同一块卡在不同环境加载完全不同的驱动栈。










