iT邦幫忙

DAY 15
1

Linux kernel模組的開發系列 第 15

在 kernel 中移除 (反註冊) driver

要移除使用中的 kernel module 應該要設法避免有其他程式正在使用他,因為這將會導致存取不到內容而出錯、或者引用到錯誤的 module 上。

之前採用 cleanup_module 的方式來處理移除 module 的動作,但 cheanup_module 函數沒有傳回值,所以無法判斷有多少 process 正在使用這個 module。這點可以去 /proc/modules 中檢查,其中的第 3 個數值就是代表有多少 process 在使用這個 module 的一個計數器,而當計數器值為 0 時,才能夠執行移除 module。而在 linux/midule.h 中定義了兩個函數可以用來增減這個計數器:

try_module_get(THIS_MODULE)   /** 增加計數器值 **/

module_put(THIS_MODULE)   /**減少計數器值 **/

要在 kernel 中反註冊 (unregister) driver 的做法是在 cleanup_module 中呼叫 unregister 函數,例如:

unregister_chrdev(Major, DEVICE_NAME);

上一篇
在 kernel 中註冊 driver
下一篇
/proc 檔案系統
系列文
Linux kernel模組的開發30

尚未有邦友留言

立即登入留言