今天小编要和大家分享的是嵌入式技术相关信息,接下来我将从嵌入式Linux:内核模块引用计数的实现(附源代码),arm嵌入式linux系统开发技术详解(珍藏版)【附光盘一张】这几个方面来介绍。

嵌入式技术相关技术文章嵌入式Linux:内核模块引用计数的实现(附源代码)arm嵌入式linux系统开发技术详解(珍藏版)【附光盘一张】

嵌入式技术相关技术文章嵌入式Linux:内核模块引用计数的实现(附源代码)

一、模块使用计数的背景知识

模块是一种可以在内核运行过程中动态加载、卸载的内核功能组件。2.6内核中模块的命名方式为*.ko。模块在被使用时,是不允许被卸载的。编程时需要用“使用计数”来描述模块是否在被使用。

二、2.4内核使用计数的实现方法

2.4内核中,模块自身通过 MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT宏来管理自己被使用的计数。通常我们在写模块时,会在open方法中加入MOD_INC_USE_COUNT,在close方法中加入MOD_DEC_USE_COUNT来实现使用计数。

三、2.6内核使用计数的实现方法

2.6内核提供了更健壮、灵活的模块计数管理接口 try_module_get(&module), module_put(&module)取代2.4中的模块使用计数管理宏。模块的使用计数不必由自身管理,而且在管理模块使用计数时考虑到SMP与PREEMPT机制的影响(参考module.h中try_module_get和module.c中module_put的实现)。

int try_module_get(struct module *module); 用于增加模块使用计数;若返回为0,表示调用失败,希望使用的模块没有被加载或正在被卸载中。

void module_put(struct module *module); 减少模块使用计数。