try_module_get和module_put【转】
生活随笔
收集整理的這篇文章主要介紹了
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【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 引用js实现checkbox批量选中
- 下一篇: 印度朋友手把手教你学Scala(10):