Linux驱动模块卸载后不能再加载、驱动不能卸载的问题
来源:互联网 发布:java 网络拓扑图开发 编辑:程序博客网 时间:2024/04/30 05:24
在编写驱动程序的时候有时候会出现这种情况,模块加载之后不能卸载或卸载之后不能在加载,cat /proc/devices 后发现设备还占用着设备号,这种情况下,再次加载驱动模块肯定不会成功,必须重新启动才可以解决。最近仔细看书后发现自己在驱动程序的卸载函数中少写了两个函数调用,以至于在加载模块的时候申请或添加的设备没有被释放或删除。
解决方案:
第一步、在/lib/modules/目录中建立与当前内核版本号一致的目录 如 uname -r 得到 2.6.31.6则mkdir -p /lib/modules/2.6.31.6 否则会出现“rmmod: chdir(2.6.31.6): No such file or directory”类似的错误,而模块也没有被卸载;
第二步、在驱动模块卸载函数__exit中的cdev_del(struct cdev *)函数调用后即注销字符设备后调用 unregister_chrdev_region(dev_t devno, unsigned count)函数释放在驱动加载函数__init中通过register_chrdev_region、alloc_chrdev_region,注册的主设备号。(cdev_del函数、unregister_chrdev_region函数缺一不可);
经过以上两步操作后,rmmod 模块名称 卸载模块就不会错误了,而且cat /proc/devices也不会再有已经卸载的模块的信息,这样再次加载模块也不会出错了!
解决方案:
第一步、在/lib/modules/目录中建立与当前内核版本号一致的目录 如 uname -r 得到 2.6.31.6则mkdir -p /lib/modules/2.6.31.6 否则会出现“rmmod: chdir(2.6.31.6): No such file or directory”类似的错误,而模块也没有被卸载;
第二步、在驱动模块卸载函数__exit中的cdev_del(struct cdev *)函数调用后即注销字符设备后调用 unregister_chrdev_region(dev_t devno, unsigned count)函数释放在驱动加载函数__init中通过register_chrdev_region、alloc_chrdev_region,注册的主设备号。(cdev_del函数、unregister_chrdev_region函数缺一不可);
经过以上两步操作后,rmmod 模块名称 卸载模块就不会错误了,而且cat /proc/devices也不会再有已经卸载的模块的信息,这样再次加载模块也不会出错了!
- Linux驱动模块卸载后不能再加载、驱动不能卸载的问题
- Linux驱动不能卸载
- Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载)
- 解决调试阶段挂载模块不能卸载的问题
- nvidia显卡驱动卸载和卸载后的问题
- 目标版插入模块驱动时出现version magic 与 驱动模块插入成功但是不能卸载的解决办法
- Linux下Nvidia显卡驱动卸载和卸载后的问题
- HD Audio声卡驱动不能安装也不能卸载的问题
- Tiny6410模块不能卸载
- Linux 设备驱动练习---模块 加载卸载
- 解决因为卸载vmware后键盘不能使用的问题
- Linux块设备驱动的模块加载与卸载
- sybase 卸载后不能安装的解决办法
- rmmod卸载驱动问题
- Linux 驱动安装卸载
- Linux卸载驱动方法
- 编译驱动的问题--linux版本不同不能加载驱动
- windows驱动完整卸载的流程(解决卸载后,重新扫描或重启后,驱动仍然出现的问题)
- C程序使用设计模式
- Oracle读写分离架构
- Java 小例子:创建一个可拖拽图片的面板
- 我日常的VIM
- maven环境快速搭建
- Linux驱动模块卸载后不能再加载、驱动不能卸载的问题
- Hadoop完全分布式配置
- Maven 环境快速搭建二(eclipse+maven2+jetty)
- 三个水杯盛两个4L水
- astar 百度的新大厦
- 【Java SE】对象的序列化与反序列化3:SerialversionUID
- 关于地图的操作的代码片段
- Ubuntu下配置NFS服务器和客户端
- SQL中两个关联表批量更新数据的方法