使用rmmod无法卸载驱动,强制卸除的两种方法
使用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无法卸载驱动,强制卸除的两种方法相关推荐
- win10taskkill强行结束进程_Win10程序卡死怎么办? Win10强制结束进程的两种方法
Windows 10系统中,经常遇到某一进程卡死.停止运行的现象,处理此问题的方法可以有:注销一次系统:结束此系统进程. 结束系统进程的方法可以在任务管理器中进行,也可以在管理员命令提示符窗口中使用T ...
- rmmod命令卸载驱动后重启后为什么驱动还在? 安排!
1原因 insmod是临时加入系统的,重启后会被消除. rmmod是临时卸载的,重启后驱动还在 2 linux开机时驱动的加载流程 Linux系统开机后,首先加载initramfs文件中包含的驱动程序 ...
- Linux驱动 | 加载.ko驱动模块的两种方法(insmod与modprobe)
文章目录 1.加载驱动模块 2.查看已加载的驱动模块列表 3.卸载驱动模块 假设要加载的驱动程序模块名为SHT21.ko 1.加载驱动模块 方法一 进入SHT21.ko驱动模块文件所在的目录,然后直接 ...
- linux 编译mini2440的驱动程序,把驱动编译进内核的3种方法(mini2440 key按键为例)...
把驱动编译进内核的3种方法(mini2440 key按键为例) 把驱动编译进内核的3种方法-----(mini2440 key按键为例) 方法1:单独以模块的方式编译及加入内核的方法(最简单的方法) ...
- 计算机无法卸载软件,电脑软件无法卸载怎么解决 电脑卸载顽固软件超有用的三种方法...
我们在使用电脑时,经常需要使用到各种各样的软件,有时候下载软件时经常会遇到流氓软件,只下载一个软件然后莫名就给你安装了好几个,并且还无法删除,遇到电脑软件无法卸载该怎么办呢?想必有很多的用户遇到过流氓 ...
- 开机强制进入安全模式的三种方法
我们在使用电脑时遇到蓝屏.病毒.黑屏.无法进入系统等问题,不妨试试通过安全模式来修复问题.那么我们怎么在电脑开机时进入安全模式呢?下面小编就来教教大家开机强制进入安全模式的三种方法,总有一个适合你. ...
- 怎么卸载手机上下载的软件?苹果手机有两种方法
怎么卸载手机上下载的软件?很多人会在手机上下载各种各样的软件,时间一长,小内存的手机无法储存这么多内容,建议大家定期将不需要的软件直接卸载,避免占用空间影响手机的使用.今天给大家分享一下卸载手机软件的 ...
- 两种方法教你彻底卸载Ubuntu双系统,无启动项残留
两种方法教你彻底卸载ubuntu双系统 方法一: 1.在windows下下载磁盘工具DiskGenius *下载地址:*http://www.diskgenius.cn/download.php 下载 ...
- 检测计算机无线网卡驱动,不知道如何安装无线网卡驱动?现在知道这2种方法也不迟...
原标题:不知道如何安装无线网卡驱动?现在知道这2种方法也不迟 随着电脑的普及,网络的重要性也就越发显著了,而在有线网络和无线网络中,无线网络更加便捷的性质,让大家都比较喜欢无线网络,可以摆脱空间的束缚 ...
- 浅谈驱动中强制结束进程的3种方法
一个应用程序想要结束另一个进程所要做的事:首先获得目标的进程ID,接着利用OpenProcess获取进程句柄(确保足够权限),最后将句柄传给TerminateProcess了结那个进程. OpenPr ...
最新文章
- 利用jdt快速实现pmd的功能
- Java报错:java.math.BigDecimal cannot be cast to java.lang.String
- nginx配置location总结及rewrite规则写法
- Android中对APK进行反编译
- .net 事务处理的三种方法
- linux数组长度的函数,linux awk数组操作详细介绍
- 【Spark】SparkStreaming的应用及其原理
- php公众号推荐,良心推荐6个优质实用又有趣的微信公众号!
- linux系统ssh服务无法启动,Linux上的SSH无法启动
- 深入理解JVM(第二版读书笔记)
- 推荐几个更新比我勤快的优质产品号
- 在Python中如何优雅地处理PDF文件
- 腾讯抄袭之史 当之无愧的剽窃之王【最近剽窃 qq空间时间轴 VS 钥匙网】
- 【网络流24题-23】洛谷P3356 火星探险问题
- 《我叫MT》手游源码和资源下载
- AppLocker 简要实验笔记
- slack下载 csdn、_找出老板是否可以下载Slack DM
- 电视不正常Android镜像投屏,Mirror for Android TV(安卓电视投屏软件) V2.4 Mac版
- Android 百度地图开发问题----解决地图有时候加载不出来问题
- 新零售的转折点:微信小店小程序
热门文章
- 现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
- ubuntu安装aircrack-ng/reaver/minidwep-gtk用来跑pin
- 前端下载音频的两种处理方式
- 「实验一小时」——大牛直播讲解PHP楼赛题目,就在今晚!
- 5分钟在大米云上基于WordPress搭建一个博客
- java 定时任务 单元测试_介绍java 定时任务最简单的3种实现方法
- JSESSIONID理解
- asio几种异步编程模型
- 学python用linux_用树莓派学习Linux及Python真的高效吗?
- java腾讯信鸽推送_ANDROID集成腾讯信鸽推送教程(三)---------服务器端开发(JAVA)...