try_module_get和module_put【转】
转自:http://blog.csdn.net/adaptiver/article/details/7000617
转自:http://apps.hi.baidu.com/share/detail/44235513
2.4内核中,模块自身通过 MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT宏来管理自己被使用的计数。
2.6内核提供了更健壮、灵活的模块计数管理接口 try_module_get(&module), module_put(&module)取代2.4中的模块使用计数管理宏;模块的使用计数不必由自身管理,而且在管理模块使用计数时考虑到 SMP与PREEMPT机制的影响。
int try_module_get(struct module *module); 用于增加模块使用计数;若返回为0,表示调用失败,希望使用的模块没有被加载或正在被卸载中。
void module_put(struct module *module); 减少模块使用计数。
try_module_get与module_put 的引入与使用与2.6内核下的设备模型密切相关。模块是用来管理硬件设备的,2.6内核为不同类型的设备定义了struct module *owner 域,用来指向管理此设备的模块。如字符设备的定义:
struct cdev
{
struct kobject kobj;
struct module *owner;
struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};
从设备使用的角度出发,当需要打开、开始使用某个设备时,使用 try_module_get(dev->owner)去增加管理此设备的 owner模块的使用计数;当关闭、不再使用此设备时,使用module_put(dev->owner)减少对管理此设备的owner模块的使用 计数。这样,当设备在使用时,管理此设备的模块就不能被卸载;只有设备不再使用时模块才能被卸载。
2.6内核下,对于为具体设备写驱动的开发人员而言,基本无需使用 try_module_get与module_put,因为此时开发人员所写的驱动通常为支持某具体设备的owner模块,对此设备owner模块的计数 管理由内核里更底层的代码如总线驱动或是此类设备共用的核心模块来实现,从而简化了设备驱动开发。
try_module_get和module_put【转】相关推荐
- linux-2.6内核模块引用计数的实现(try_module_get和module_put)
linux-2.6内核模块引用计数的实现 作者:刘洪涛,华清远见嵌入式学院金牌讲师. 一.模块使用计数的背景知识 模块是一种可以在内核运行过程中动态加载.卸载的内核功能组件.2.6内核中模块的命名方式 ...
- linux获取文件引用计数,linux-.6内核模块引用计数的实现(try_module_get和module_put).doc...
linux-.6内核模块引用计数的实现(try_module_get和module_put) 慕钡渡抛戮匡赌呻烛孔旬颠馅彦艘遣梁峨畸绸衰井肌君遇详耍棠堵琳庆峪坛吏桂芒弦与稀疥厚殃挽闷脐腮乓呼渡垃忍桅篱 ...
- 模块加载过程代码分析1
一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...
- Linux内核模块的概念和基本的编程方法
Linux内核模块的概念和基本的编程方法 标签: Linux内核模块 2013-06-14 18:29 1864人阅读 评论(0) 收藏 举报 分类: linux内核(34) 版权声明:本文为博主原创 ...
- linux获取文件引用计数,linux-2.6内核模块引用计数的实现
一.模块使用计数的背景知识 模块是一种可以在内核运行过程中动态加载.卸载的内核功能组件.2.6内核中模块的命名方式为*.ko.模块在被使用时,是不允许被卸载的.编程时需要用"使用计数&quo ...
- Linux2.6内核驱动与2.4的区别 .
随着Linux2.6的发布,由于2.6内核做了新的改动,各个设备的驱动程序在不同程度上要进行改写.为了方便各位Linux爱好者我把自己整理的这分文档share出来.该文当列举了2.6内核同以前版本的绝 ...
- 2.6.21相比2.4.18内核机制变更
本人正在把2.4.18的网关,防火墙,等公司的代码从2.4.18移植到2.6.18linux内核上去.本日志会不断更新,希望能让同在进行2.4到2.6内核移植 的朋友们一些帮助. IPMAC部分改动 ...
- Linux中wait接口用于延时,linux2.6驱动编写参考
1. 使用新的入口 必须包含 module_init(your_init_func); module_exit(your_exit_func); 老版本:int init_module(void); ...
- Linux 2.6下Driver开发的34个变化[转贴]
Linux2.6内核驱动移植嵌入式系统|linux|ARM|单片机'h7@!A-L5}7e[ I;H 随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要进行改写. ...
最新文章
- 【JVM】Java对象创建的流程步骤
- 网站建设要重视与客户之间的沟通
- Mobileye采用单目摄像头做ADAS太不精确
- 为treeview添加客户端事件
- 如何将网页保存为图片_网页账号密码该如何保存?
- 用samba来创建windows下的文件共享
- hdu 5631 Rikka with Graph(图)
- 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)
- 减治法在生成子集问题中的应用(JAVA)--递归、二进制反射格雷码
- 位置式PID与增量式PID区别浅析
- Linux文件和目录的属性及权限
- 【软件测试】:测试改进措施总结
- SAP常用TCODE收藏
- 产品经理——关于色彩搭配!!
- windows安全事件id汇总
- 项目集锦 | 易基因近期m6A甲基化(MeRIP-seq)研究成果
- 用函数统计各分数段人数c语言,excel统计各分数段人数的函数
- 当全分区都格式化,无引导分区如何重装系统?如何干净的重装系统?如何干净安全的删除掉windows.old?
- 拉钩招聘信息爬取以及可视化
- 至业内同行的一封信(反百度霸权主义)
热门文章
- sharepoint 页面定制经验小结
- DataGrid 功能实现收集(转)保留做参考
- 分布式事务的理解和解决方法
- h标签对html网页的作用,网页H标签SEO价值的说明与举例
- 访问php文件显示500错误,nginx 访问.php文件正常,访问.html文件500错误
- a的n次方的最后三位数c语言,求13的n次方(12n≤130000000000)的最后三位数,用c++编程...
- mysql中括号_干货!Python与MySQL数据库的交互实战
- 秒懂物理计算机出题规划,57张动图, 让你秒懂高中物理原理! 考试次次拿第一
- SRS 启动正常,拉流没画面,看SRS日志报错 srs is already running
- 对齐方式有那些_Excel基础:开始菜单之对齐方式,那些被遗忘的实用功能