1、rmmod命令介绍

(1)rmmod是动态卸载驱动的命令,用法:rmmod xxx.ko;
(2)rmmod是busybox中的一个命令,源码也是在busybox中;
补充:建议同时参考博客,能更深入理解rmmod如何卸载驱动:《insmod命令加载驱动详解》

2、rmmod命令源码函数调用关系

//modutils/rmmod.c
rmmod_main()bb_delete_module()delete_module()

3、delete_module()函数源码

# define delete_module(mod, flags) syscall(__NR_delete_module, mod, flags)

调用delete_module()函数实际就是调用内核的sys_delete_module()函数,分析方法和insmod命令加载驱动是一样的,这里不再分析;

4、sys_delete_module()函数分析

4.1、SYSCALL_DEFINE2宏分析

#define __SYSCALL_DEFINEx(x, name, ...)                  \asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))#define SYSCALL_DEFINEx(x, sname, ...)             \__SYSCALL_DEFINEx(x, sname, __VA_ARGS__)#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)

4.2、sys_delete_module()函数定义

SYSCALL_DEFINE2(delete_module, const char __user *, name_user,unsigned int, flags)//将上面的宏展开
asmlinkage long sys_delete_module(const char __user *name_user,unsigned int flags);

4.3、sys_delete_module()函数源码

SYSCALL_DEFINE2(delete_module, const char __user *, name_user,unsigned int, flags)
{``````mod = find_module(name);``````if (mod->exit != NULL)mod->exit();``````free_module(mod); return 0;
}

(1)find_module(name):根据驱动的名字name,在全局变量“static struct module *modules”中查找驱动对应的struct module结构体;在用insmod命令加载驱动时,会将驱动对应的struct module结构体
注册到modules变量中,modules相当于链表头,通过遍历可以查询所有加载过的驱动;
(2)mod->exit():mod->exit是个函数指针,指向驱动代码中用module_exit宏声明的驱动卸载函数;
(3)free_module(mod):真正卸载驱动的函数;

sys_delete_module()函数调用

//绑定
#define __NR_delete_module 106
__SYSCALL(__NR_delete_module, sys_delete_module)//引用
syscall(__NR_delete_module, mod, flags)

(1)__SYSCALL()的作用相当于绑定,将__NR_delete_module和sys_delete_module()进行绑定,将来在syscall()调用时进行映射;
(2)sys_delete_module()不是像平常的函数一样直接通过函数名进行调用,需要通过syscall()函数进行间接调用,其中第一个参数__NR_delete_module就是指定调用sys_delete_module()函数;
备注:__SYSCALL()和sysycall()之间如何映射,这里并没有详细分析,__SYSCALL前面已经有两根下划线,说明这个函数已经是内核的核心代码,暂时没必要深入了解。

rmmod命令卸载驱动过程详解相关推荐

  1. rmmod命令卸载驱动后重启后为什么驱动还在? 安排!

    1原因 insmod是临时加入系统的,重启后会被消除. rmmod是临时卸载的,重启后驱动还在 2 linux开机时驱动的加载流程 Linux系统开机后,首先加载initramfs文件中包含的驱动程序 ...

  2. JDBC 在IDEA中配置mysql8驱动过程详解

    MySQL驱动配置和使用 下载驱动 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. 主要用于执行 SQL 查询, ...

  3. Ubuntu server版本系统下安装显卡驱动过程详解

    前期准备 确认系统是否需要可视化图形桌面,如果需要,安装完桌面之后再进行显卡驱动的安装.以下操作均需在root用户权限下操作 1.先更改国内安装源(如果是桌面版则可以直接修改aliyun的源,或者在s ...

  4. Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)

    Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载) Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量, ...

  5. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  6. linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt

    PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...

  7. 《Linux设备驱动开发详解 A》一一2.3 接口与总线

    本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...

  8. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解

    Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...

  9. U-Boot 之三 U-Boot 源码文件解析及移植过程详解

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建说明 中我们说了要一步步搭建整个嵌入式 Linux 运行环境.我所使用的硬件平台及整个要搭建的嵌入式 Linux 环境见博文 ...

  10. 《Linux设备驱动开发详解》学习笔记一

    Linux设备驱动开发详解学习笔记<一> 书名:<Linux设备驱动开发详解>第二版 主机环境:Linux version 2.6.25-14.fc9.i686@Fedora ...

最新文章

  1. 使用libre office writer 为文档添加可跳转目录
  2. AGV控制器设计与融合
  3. idea中如何创建接口
  4. linux rsa登录改密码登录_linux服务器secureCRT RSA登录配置
  5. IDC Q1中国云服务报告:公有云IaaS市场增速持续高于全球
  6. php如何模拟网页点击按钮,python模拟点击网页按钮如何实现 python模拟点击网页按钮实现方法...
  7. CentOS 7下安装samba
  8. 解决github拉项目慢的问题
  9. 三星固态硬盘装linux,三星T5 SSD制作ubuntu18.04随身携带即插即用与win10共享文件真爽~(简单粗暴安装大法一步到位)...
  10. Android自定义控件入门到精通--Interpolation插值器
  11. CSDN个人博客如何上传图片
  12. 计算机内存不足16g内存,高手亲自教你win10 16g内存显示内存不足的修复要领
  13. DNS无法解析IP_DNS大全(114DNS 、阿里DNS、百度DNS 、360 DNS、Google DNS)
  14. 这几年我看过的书,力荐书单(含技术和非技术)
  15. 打印机无线连接台式机、笔记本找不到目标打印机解决方案
  16. taobao.user.avatar.get
  17. C++Primer第五版——习题答案详解(六)
  18. 黄芪的VEGF、产地、有效成分、仿冒问题、毒副作用
  19. 查看Docker容器的信息
  20. 先验 后验 似然估计

热门文章

  1. qq linux五笔输入法下载软件,qq五笔输入法
  2. 计算机图桌面打印出来,电脑excel图片无法打印怎么处理
  3. 人脸生成黑科技:实现人脸转变特效,让人脸自动戴墨镜
  4. linux系统下怎么安装软件,如何在Linux系统上安装软件
  5. dpkg安装软件流程_Linux下安装软件的一般步骤
  6. 极域电子教室功能讲解-电子教室
  7. 视频会议软件 Zoom会议客户端
  8. android 添加一维数组,Android:打造“万能”Adapter与ViewHolder
  9. 荣耀手机安装谷歌框架_华为荣耀9青春版安装谷歌框架 无需Root 华为荣耀手机安装谷歌框架...
  10. Transformers in NLP (一):图说transformer结构