使用rmmod无法卸载驱动,强制卸除方法

  • 方法一
  • 方法二

说明:当一个模块加载失败(killed)或者模块被堵塞了,使用rmmod无法卸载,这时只能强制清除了。

方法一

直接重启系统,因为insmod是临时加入系统的,重启后会被消除。

方法二

解决方案是改变该模块的状态。(适用于内核2.6及其以后的版本
1.把下面代码中的字符串变为要删除的模块名const char target[100] = “device”;//这是你要删除模块的名字;(其实可以通过外部传参方式实现,但因该方式是强制,如果参数有误,会把其他模块删除且不可逆,所以采用修改代码方式)
2.把下面代码像驱动一样加载进入内核,根据打印log可以看得到是否删除模块成功。
代码如下:

#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/list.h>
#include<linux/cpumask.h>const char target[100] = "device";//这是你要删除模块的名字
static int __init mymod_init(void)
{struct module *mod,*relate;int cpu;// 打印本模块的模块名和模块状态printk(KERN_ALERT"[insmod mymod] name:%s state:%d\n",THIS_MODULE->name,THIS_MODULE->state);// 遍历模块列表,查找target模块list_for_each_entry(mod,THIS_MODULE->list.prev,list){if(strcmp(mod->name,target)==0) { // 打印target的模块名、模块状态、引用计数printk(KERN_ALERT"name:%s state:%d refcnt:%u ",mod->name,mod->state,module_refcount(mod));// 打印出所有依赖target的模块名if(!list_empty(&mod->source_list)) { list_for_each_entry(relate,&mod->source_list,source_list)printk(KERN_ALERT"%s ",relate->name);} elseprintk(KERN_ALERT"used by NULL\n");// 修正驱动的状态为LIVEmod->state = MODULE_STATE_LIVE;// 把target的引用计数置为0unsigned int i = module_refcount(mod);for(i;i>0;i--){module_put(mod); //引用计数减一}// 再看看target的名称、状态、引用计数printk(KERN_ALERT"name:%s state:%d refcnt:%u\n",mod->name,mod->state,module_refcount(mod));}}return 0;
}static void __exit mymod_exit(void)
{printk(KERN_ALERT"[rmmod mymod] name:%s state:%d\n",THIS_MODULE->name,THIS_MODULE->state);
}module_init(mymod_init);
module_exit(mymod_exit);MODULE_AUTHOR("jack");
MODULE_LICENSE("GPL");

注:第二种方法的代码不是原创(原创地址我找不到了抱歉,原代码适用于2.4版本),而是进行二次修改而得,如果有所侵权,请您联系我,立即删除。

使用rmmod无法卸载驱动,强制卸除的两种方法相关推荐

  1. win10taskkill强行结束进程_Win10程序卡死怎么办? Win10强制结束进程的两种方法

    Windows 10系统中,经常遇到某一进程卡死.停止运行的现象,处理此问题的方法可以有:注销一次系统:结束此系统进程. 结束系统进程的方法可以在任务管理器中进行,也可以在管理员命令提示符窗口中使用T ...

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

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

  3. Linux驱动 | 加载.ko驱动模块的两种方法(insmod与modprobe)

    文章目录 1.加载驱动模块 2.查看已加载的驱动模块列表 3.卸载驱动模块 假设要加载的驱动程序模块名为SHT21.ko 1.加载驱动模块 方法一 进入SHT21.ko驱动模块文件所在的目录,然后直接 ...

  4. linux 编译mini2440的驱动程序,把驱动编译进内核的3种方法(mini2440 key按键为例)...

    把驱动编译进内核的3种方法(mini2440 key按键为例) 把驱动编译进内核的3种方法-----(mini2440 key按键为例) 方法1:单独以模块的方式编译及加入内核的方法(最简单的方法) ...

  5. 计算机无法卸载软件,电脑软件无法卸载怎么解决 电脑卸载顽固软件超有用的三种方法...

    我们在使用电脑时,经常需要使用到各种各样的软件,有时候下载软件时经常会遇到流氓软件,只下载一个软件然后莫名就给你安装了好几个,并且还无法删除,遇到电脑软件无法卸载该怎么办呢?想必有很多的用户遇到过流氓 ...

  6. 开机强制进入安全模式的三种方法

    我们在使用电脑时遇到蓝屏.病毒.黑屏.无法进入系统等问题,不妨试试通过安全模式来修复问题.那么我们怎么在电脑开机时进入安全模式呢?下面小编就来教教大家开机强制进入安全模式的三种方法,总有一个适合你. ...

  7. 怎么卸载手机上下载的软件?苹果手机有两种方法

    怎么卸载手机上下载的软件?很多人会在手机上下载各种各样的软件,时间一长,小内存的手机无法储存这么多内容,建议大家定期将不需要的软件直接卸载,避免占用空间影响手机的使用.今天给大家分享一下卸载手机软件的 ...

  8. 两种方法教你彻底卸载Ubuntu双系统,无启动项残留

    两种方法教你彻底卸载ubuntu双系统 方法一: 1.在windows下下载磁盘工具DiskGenius *下载地址:*http://www.diskgenius.cn/download.php 下载 ...

  9. 检测计算机无线网卡驱动,不知道如何安装无线网卡驱动?现在知道这2种方法也不迟...

    原标题:不知道如何安装无线网卡驱动?现在知道这2种方法也不迟 随着电脑的普及,网络的重要性也就越发显著了,而在有线网络和无线网络中,无线网络更加便捷的性质,让大家都比较喜欢无线网络,可以摆脱空间的束缚 ...

  10. 浅谈驱动中强制结束进程的3种方法

    一个应用程序想要结束另一个进程所要做的事:首先获得目标的进程ID,接着利用OpenProcess获取进程句柄(确保足够权限),最后将句柄传给TerminateProcess了结那个进程. OpenPr ...

最新文章

  1. 利用jdt快速实现pmd的功能
  2. Java报错:java.math.BigDecimal cannot be cast to java.lang.String
  3. nginx配置location总结及rewrite规则写法
  4. Android中对APK进行反编译
  5. .net 事务处理的三种方法
  6. linux数组长度的函数,linux awk数组操作详细介绍
  7. 【Spark】SparkStreaming的应用及其原理
  8. php公众号推荐,良心推荐6个优质实用又有趣的微信公众号!
  9. linux系统ssh服务无法启动,Linux上的SSH无法启动
  10. 深入理解JVM(第二版读书笔记)
  11. 推荐几个更新比我勤快的优质产品号
  12. 在Python中如何优雅地处理PDF文件
  13. 腾讯抄袭之史 当之无愧的剽窃之王【最近剽窃 qq空间时间轴 VS 钥匙网】
  14. 【网络流24题-23】洛谷P3356 火星探险问题
  15. 《我叫MT》手游源码和资源下载
  16. AppLocker 简要实验笔记
  17. slack下载 csdn、_找出老板是否可以下载Slack DM
  18. 电视不正常Android镜像投屏,Mirror for Android TV(安卓电视投屏软件) V2.4 Mac版
  19. Android 百度地图开发问题----解决地图有时候加载不出来问题
  20. 新零售的转折点:微信小店小程序

热门文章

  1. 现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
  2. ubuntu安装aircrack-ng/reaver/minidwep-gtk用来跑pin
  3. 前端下载音频的两种处理方式
  4. 「实验一小时」——大牛直播讲解PHP楼赛题目,就在今晚!
  5. 5分钟在大米云上基于WordPress搭建一个博客
  6. java 定时任务 单元测试_介绍java 定时任务最简单的3种实现方法
  7. JSESSIONID理解
  8. asio几种异步编程模型
  9. 学python用linux_用树莓派学习Linux及Python真的高效吗?
  10. java腾讯信鸽推送_ANDROID集成腾讯信鸽推送教程(三)---------服务器端开发(JAVA)...