linux2.6内核 提供了模块计数接口:
int try_module_get(struct module *module);
该函数用于增加模块使用计数;若返回0,表示调用失败,希望被使用的模块没有被加载或正在卸载中。
void module_put(struct module *module);
该函数用于减少模块使用计数。
linux2.6内核为不同类型的设备定义了struct module *owner,用来管理此设备的模块。
当开始使用某个设备时,内核使用try_module_get(dev->owner)去增加管理此设备的owner模块的使用计数。
当不再使用此设备时,内核使用module_put(dev->owner)减少对管理此设备的owner模块的使用计数。