在linux系统中,硬盘驱动程序并不像windows那样以sys等固定后缀的孤立文件为主,而是通过内核模块进行管理。大多数硬盘控制器和接口驱动编译后生成的内核模块文件后缀为ko,代表可加载内核模块。理解这些后缀有助于我们在排查硬件识别问题时快速定位驱动文件。

linux硬盘驱动常见文件后缀
从源码到可用驱动,通常会经历几个阶段,对应不同后缀:
- .c:驱动程序的C语言源码文件,例如 ahci.c 是SATA控制器驱动源码。
- .o:编译生成的目标文件,还未链接为完整模块。
- .ko:最终的内核模块文件,可通过 insmod 或 modprobe 加载。
- .ko.zst:部分发行版使用压缩内核模块,后缀加上压缩格式。
为什么主要看.ko后缀
linux硬盘驱动运行在内核空间,发行版一般把驱动编译成内核模块。我们说的硬盘驱动程序后缀通常指 ko 文件。系统启动后,硬盘驱动如 ahci.ko 会被加载,从而识别SATA或IDE设备。
查看已加载的硬盘相关驱动
可以用如下命令查看系统中已加载的模块:
# 查看已加载的模块中包含 ahci 的驱动 lsmod | grep ahci # 查看模块文件位置 find /lib/modules/$(uname -r) -name "*.ko*" | grep ahci
驱动源码与编译示例
一个简单的外部硬盘驱动模块源码及Makefile如下,编译后产生 ko 文件:
// demo_disk.c 简单示例驱动
#include <linux/module.h>
#include <linux/init.h>
static int __init demo_init(void)
{
printk("demo disk driver loadedn");
return 0;
}
static void __exit demo_exit(void)
{
printk("demo disk driver unloadedn");
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
# Makefile 编译为内核模块 obj-m += demo_disk.o KDIR := /lib/modules/$(shell uname -r)/build all: make -C $(KDIR) M=$(PWD) modules clean: make -C $(KDIR) M=$(PWD) clean
总结
linux硬盘驱动程序在成品阶段最常见后缀是 ko,代表内核模块;开发阶段会接触 c 和 o 文件。linux不依赖后缀执行驱动,而是依靠内核模块机制。遇到硬盘不识别时,可检查对应 ko 模块是否存在并加载。