Linux怎么加载内核模块_Linux如何用modprobe加驱动【方法】

老墨大大_5783

老墨大大_5783

2026-03-20

508人浏览

原创

modprobe 找不到模块通常因路径、命名或依赖错误:需确认模块在 /lib/modules/$(uname -r)/ 下,运行 depmod -a 更新依赖,检查模块名与文件名一致、内核版本匹配(vermagic)、架构正确,probe 失败时查 dmesg 错误码。

linux怎么加载内核模块_linux如何用modprobe加驱动【方法】

modprobe 找不到模块怎么办

模块没被 modprobe 找到,通常不是驱动没编译,而是路径、命名或依赖没对上。Linux 不会自动扫描整个文件系统找 .ko 文件,它只查 /lib/modules/$(uname -r)/ 下预建的 modules.builtin、modules.dep 和子目录结构。

  • 先确认模块文件是否真在正确位置:find /lib/modules/$(uname -r) -name "xxx.ko"(把 xxx 换成你的模块名)
  • 如果手动拷贝过模块,必须运行 depmod -a 重建依赖数据库,否则 modprobe 完全无视它
  • 模块名不等于文件名:比如 usbserial.ko 的模块名是 usbserial,但有些带下划线的(如 8139cp.ko)加载时得写 modprobe 8139cp,不能写 8139-cp
  • modprobe 默认不看当前目录,./mymodule.ko 这种路径直接报 Module mymodule not found

加载时报 Invalid module format 错误

这是内核版本不匹配的典型信号——模块编译时用的内核头文件和当前运行的内核 $(uname -r) 不一致,哪怕只差一个补丁号(比如 6.1.0-12-amd64 vs 6.1.0-13-amd64)也会触发。

  • 检查模块内嵌的版本信息:modinfo ./mymodule.ko | grep ^vermagic,输出里必须和 cat /proc/sys/kernel/osrelease 完全一致
  • 如果用 DKMS 管理,确保已执行 dkms install -m mymodule -v 1.0 --force,而不是只 build
  • 交叉编译的模块(如 ARM 驱动在 x86 主机上编译)即使版本对得上,也会因架构标记失败,file mymodule.ko 能看出 ELF 架构

modprobe 加载后立刻卸载(无日志、无设备节点)

模块看似加载成功(lsmod | grep xxx 能看到),但几秒后消失,大概率是 probe 失败导致内核主动回滚。这种失败默认不打 dmesg,得主动抓。

  • 加 -v 参数观察详细流程:modprobe -v xxx,看最后卡在哪一步(比如停在 “Running hook” 或 “Loading dependency”)
  • 立即执行 dmesg | tail -20,重点找 xxx: probe of xxx failed with error -XX,常见错误码:-19(-ENODEV,没找到对应硬件)、-22(-EINVAL,参数错)、-16(-EBUSY,资源被占)
  • 某些模块(如 hid_generic)依赖其他模块先加载,modprobe --show-depends xxx 可验证依赖链是否完整

如何让模块开机自动加载

写进 /etc/modules 最简单,但它不处理参数和顺序;更可靠的方式是用 /etc/modprobe.d/ 下的配置文件。

  • 要传参数(比如 blacklist nouveau 或 options iwlwifi swcrypto=1),必须用 /etc/modprobe.d/my.conf,格式严格:options <module_name><key>=<value></value></key></module_name>
  • blacklist 不等于卸载,只是阻止 modprobe 自动加载;已内置的模块(modules.builtin)无法用 blacklist 屏蔽
  • 如果模块依赖固件(.bin 文件),确保固件放在 /lib/firmware/ 对应路径下,否则加载会卡住并超时退出

真正麻烦的是那些 probe 阶段需要特定 PCI ID、ACPI 表或平台设备才肯活的模块——它们可能在 initramfs 里就该加载,而不是等根文件系统挂载后。这点容易被忽略,一重启就回退成“模块存在但设备没出来”。

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1729

3

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.06.27

1211

7

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

989

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2940

5

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2745

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3941

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

3031

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

967

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2647

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.8万人学习