当前位置: 首页 > news >正文

Linux驱动的加载与卸载

1.驱动加载与卸载命令

1.1 insmod命令

insmod [选项] <模块文件>

  • 选项:指定 insmod 命令的其他行为或输出。

  • 模块文件:要加载的内核模块文件,通常是以 .ko 结尾的文件。

以下是一般的选项,具体支持的选项以实际为准。

选项作用
-f强制加载内核模块,即使它存在依赖问题或已加载相同模块。
-v显示详细的输出,提供更多的调试信息。
-h显示帮助信息。
--dry-run模拟加载操作,但不实际加载模块,用于测试和诊断。
--verbose显示更详细的加载信息。

例如:

1.2 rmmod命令

1.3 modprobe与insmod

modprobe能够自动加载模块,并智能处理依赖关系。无需指定路径:只需提供模块名(如 usb-storage),系统会自动从默认路径(/lib/modules/$(uname -r)/)中查找模块文件(依赖 modules.dep 等索引文件)。
自动处理依赖:加载模块时,会先检查并自动加载其所有依赖的模块(例如加载 A 时,若依赖 B,则先加载 B 再加载 A)。

2.驱动加载失败定位思路

  • dmesg查看有没有报错信息
  • 如果是PCI设备查看pci是否有扫描到,例如:lspci | grep 1eb6
  • 检查固件侧是否正常运行
  • 查看当前驱动加载情况,例如:lsmod | grep scgbe

3.驱动加载与卸载流程

3.1关于insmod

  • insmod是一个用户态程序(位于 /sbin/insmod),接收用户传入的模块文件完整路径作为参数(必须是绝对路径或相对路径,无法仅通过模块名查找)。
  • insmod 打开指定的模块文件,读取其二进制数据(包括模块代码、数据、符号表、依赖信息等)到用户态内存中。通过finit_module 系统调用将文件描述符传递给内核(更高效,避免用户态到内核态的大数据拷贝)。
  • insmod 的源码非常精简,核心功能是通过系统调用将模块文件传递给内核,本身不处理依赖或复杂逻辑。其设计体现了 Linux “用户态工具做简单封装,复杂逻辑在内核实现” 的思想。若需深入研究,可结合kmod源码和Linux内核的模块管理代码(kernel/module.c)
  • 内核通过 sys_init_module 或 sys_finit_module 函数处理用户态的系统调用(位于内核源码 kernel/module.c

3.1驱动程序的入口函数如何开始执行

  • 驱动模块(.ko 文件)是ELF二进制格式,其中包含多个段(如代码段、数据段、符号表、特殊元数据段)。module_init 标记的入口函数会被编译到 .init.text 段(初始化代码段),同时其地址会被记录到模块的 “模块信息结构” 中,该结构是内核解析入口函数的关键
  • 当内核通过sys_init_module或sys_finit_module系统调用加载模块时,会执行以下步骤找到入口函数:

(1)解析 ELF 格式,定位模块元数据
内核首先解析.ko 文件的 ELF头,找到包含
模块元数据的特殊段(通常是 __ksymtab、__param、__modinfo 等段,不同内核版本可能有差异)。这些段中包含一个关键结构:struct module(模块描述符),它是内核管理模块的核心数据结构,其中记录了入口函数、出口函数、依赖符号等所有关键信息
(2)从 struct module 中提取入口函数地址
struct module 中有一个成员 init,专门用于存储入口函数的地址。例如(简化版结构体):

struct module {// ... 其他成员 ...int (*init)(void);  // 入口函数指针void (*exit)(void); // 出口函数指针// ... 其他成员 ...
};

找到入口函数地址后就可以调用入口函数:模块初始化的最终执行
模块卸载逻辑类似。

4.驱动依赖

5.辅助驱动

6.驱动程序框架

http://www.dtcms.com/a/546139.html

相关文章:

  • 二学一做专题网站无锡网页制作报价
  • 装修公司做自己网站珠海网站制作费用
  • 手机网站建站公司wordpress关于本站
  • 网站数字签名做网站能挣钱么
  • 温州做网站的wordpress the7.6
  • 中华古文明的视觉史诗:郭泰来以当代彩墨重构“上古三经”——迟来的祝贺:图书《山海经》荣获“出版奖”
  • Rust BTreeMap 红黑树
  • 为代理网站做网站wordpress站群作用
  • 网站上社保做增员怎么做wordpress html 代码
  • Lua--协程
  • 建立网站目录结构的原则优化二十条
  • 远近互联网站建设成品网站源码1688danji6
  • 枣庄三合一网站开发公司软件开发模型的v模型图
  • 生成式人工智能在教育领域的技术适配性研究:挑战、风险与应对方案
  • 技术解析:AI出海两极分化下的破局指南
  • CAN总线网关到底是什么:双5g车载网关案例
  • GifCam,一款小巧的GIF录制工具
  • 如何让脚本同时兼容Python2和Python3?
  • 永嘉网站建设工作室口腔建立网站
  • 莱芜十大首富多说评论插件对网站优化
  • 网站开发的主要内容亚马逊跨境电商开店
  • Linux 进程退出和进程控制
  • 计算机网络自顶向下方法14——应用层 DNS详解 工作机理
  • [GXDE软件包安装器]在龙芯deepin上一键安装旧世界包
  • dw设计模板系统优化的方法知识点
  • 【AI】人工智能之PINN和贝叶斯
  • 毕业设计答辩网站开发原理江苏省网站建设
  • 网站备案照湘潭做网站选择磐石网络
  • 如何做网站的二级页面500网站建设
  • Python 高效实现 Excel 与 TXT 文本文件之间的数据转换