簡體   English   中英

無法刪除可加載的內核模塊

[英]Not able to remove a loadable kernel module

我正在編寫一個可加載的內核模塊並嘗試對其進行測試。 插入后,我試圖使用rmmod xxx命令將其刪除,但我收到錯誤消息,提示module xxx is in use ,並且模塊卡住了,我無法將其刪除。 知道如何在不重新啟動整個機器的情況下刪除模塊嗎? (Linux 內核 v. 3.5.0)

注意: rmmod -f打印Error: device or resource busy

這只發生在我的驅動程序中存在錯誤導致模塊中的代碼以某種方式恐慌或崩潰時。 根據我的經驗,一旦發生這種情況,重新啟動是唯一可能的過程。

正如我所說,內核通常會發生恐慌,因此您應該在插入或運行應用程序后檢查 dmesg 以對其進行練習。 我不確定,但如果驅動程序不釋放互斥鎖,這種行為也可能發生。

檢查您的 module_exit 功能是否正確。 您可能需要編譯內核以使用 MODULE_FORCE_UNLOAD=yes 來“刪除模塊而不重新啟動整個機器”。

我通過使用與編譯正在運行的內核來編譯我的模塊相同的 GCC 版本來修復相同的錯誤,兩者都是 8.3.1; 請檢查你的。

    [root@centos fishing]# dmesg | grep gcc
    [    0.000000] Linux version 4.18.0-80.7.2.el7.aarch64 (mockbuild@aarch64-01.bsys.centos.org) (gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)) #1 SMP Thu Sep 12 16:13:20 UTC 2019
    [root@centos fishing]# gcc -v
    gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)
    [root@centos fishing]#

否則,我有錯誤:

    [root@centos fishing]# rmmod fishing
    rmmod: ERROR: could not remove 'fishing': Device or resource busy
    rmmod: ERROR: could not remove module fishing: Device or resource busy
    [root@centos fishing]#

內核模塊,釣魚代碼來自http://books.gigatux.nl/mirror/kerneldevelopment/0672327201/ch16lev2sec1.html

一種可能性是您忘記提供 module_exit,因此您的模塊不知道如何退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM