惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
aimingoo的专栏
aimingoo的专栏
T
The Blog of Author Tim Ferriss
IT之家
IT之家
罗磊的独立博客
博客园_首页
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
Hugging Face - Blog
Hugging Face - Blog
G
Google Developers Blog
博客园 - 叶小钗
H
Help Net Security
N
Netflix TechBlog - Medium
B
Blog
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)

博客园 - scott_h

win+linux 搜索工具 道客巴巴 ,文库等 文档下载 (下载图片,再插入WORD,转PDF) VMware 启动问题 windows 删除驱动 SSD 测试开发 查询本地IPV6 地址 从windows 自动进入BIOS 瑞芯微 RV1106G 硬件参考设计分享,包括原理图、PCB文件以及设计指南 全志性能非常强悍的 A733 SoC 硬件参考设计资料分享 深入WSL与USB:教你如何编译 Linux 内核支持 USB 共享 repo Ubuntu Desktop 22.04 禁用自动更新 repo GDDR DDR 内存中的纠错码 (ECC) 功耗计算 leveldb 缓存后再批量写入 dmesg info smbios info cpphttplib 调用失败记录 解决firefox 无法访问证书过期的网站
Linux insmod 和 modprobe区别
scott_h · 2026-01-20 · via 博客园 - scott_h

https://zhuanlan.zhihu.com/p/693088545

Linux 下用来加载.ko文件模块的命令有insmod 和 modprobe,比如我们需要加载模块为helloworld.ko

什么是模块

模块是一种可以动态加载到内核中的代码,它可以扩展内核的功能。
在Linux系统中,模块以.ko的文件形式存在,可以通过insmod和modprobe命令将模块加载到内核中。
通过加载模块,可以在不重启系统的情况下,向内核添加新的功能或驱动。
这样可以提高系统的灵活性和可扩展性,同时也减少了对整个内核重新编译和重新启动的需要。

insmod

insmod需指定所需加载模块的路径,且只加载所指定的模块,
如果所指定的模块依赖于其他模块,insmod不会自动添加,

insmod使用方法如下:insmod 某路径/helloworld.ko ,将helloworld.ko模块加载到内核. 


语法
insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]

参数说明:
-f:强制加载模块,即使有冲突或依赖问题。
-k:加载模块时,自动解析和加载模块的依赖关系。
-p:仅检测模块是否能够成功加载,而不实际加载模块。
-q:屏蔽加载过程中的输出信息。
-v:显示详细的加载信息。

之前遇到:insmod ./ax_nic.ko 或者insmod -f ./ax_nic.ko都报出
insmod: ERROR: could not insert module ./ax_nic.ko: Invalid module format

内核无法加载模块的原因是因为模块中记载版本号的字符串和当前正在运行的内核模块的不一样,
处理的话还是在烧录主板上的固件源码上重新编译出来。

一些错误情况:

    如果模块文件不存在,将无法加载模块。
    如果当前用户没有足够的权限执行insmod命令,可能会导致加载模块失败。
    如果加载的模块与内核版本不兼容,可能会出现加载失败或运行时错误。
    如果加载模块时存在冲突或依赖问题,可以使用-f选项强制加载模块,但可能导致系统不稳定或功能异常。

加载模块可能需要特定的权限,通常需要root用户或具有管理员权限的用户才能执行insmod命令。

卸载内核模块

rmmod是一个可以从内核中删除模块的小程序,大多数用户使用modprobe -r去删除模块。

rmmod xxx.ko;

注意:insmod不能解决依赖关系。

modprobe

modprobe命令可以自动解决内核模块之间的依赖关系。
当加载一个内核模块时,如果该模块依赖于其他模块,modprobe会自动加载所需的依赖模块。


modprobe是从/lib/modules/$(uname -r)/modules.dep文件来查找依赖关系的,
默认modprobe也是在/lib/modules/uname -r/目录中查找模块进行加载的。$(uname -r)即内核的版本。

用modprobe加载内核模块时,如果加载的模块依赖于其他模块,modprobe会自动加载被依赖的模块,
比如我们需要加载模块A,但是模块A依赖于模块B,
那么我们在使用modprobe加载内核模块A时,modprobe会先加载内核模块B,然后再加载内核模块A。

使用方法如下:modprobe helloworld
语法

modprobe <module_name>
配置模块参数

modprobe <module_name> <parameter_name>=<parameter_value>

modprobe命令可以用于设置内核模块的参数。
通过在加载模块时传递参数值,可以修改模块的行为。

例如,
要加载名为my_module的内核模块,并设置参数param1的值为value1,
可以运行modprobe my_module param1=value1命令。

/lib/modules/4.1.15-00020-g2220661-dirty# ls -al