ロード可能なモジュールを削除できません。

ロード可能なモジュールを削除できません。

Linuxデバイスドライバを理解しようとしています。以下を使用してモジュールをインストールしようとしています。モジュールの挿入コマンドラインから。挿入後にロードされたモジュールを削除しようとしましたが、エラーが原因で失敗しました。

could not remove module hello: Device or resource busy

私が見つけたこのリンクしかし、有効な答えを提供しているようではありません。

hello.c以下はこのモジュールのCコードです()。

#include <linux/module.h>   /* Needed by all modules */
#include <linux/kernel.h>   /* Needed for KERN_INFO */
#include <linux/init.h>     /* Needed for the macros */

static int data __initdata = 3;

#ifdef USE_OLDER_NAMING

int init_module(void)
{
    printk(KERN_INFO "Hello world 1.\n");

    return -1;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

#else

static int __init my_init(void)
{
    printk(KERN_ALERT "Hello Module Inserted : %d \n",data);
    return 0;
}

static void __exit my_exit(void)
{
    printk(KERN_ALERT "Hello Module removed : %d \n",data);
    return;
}

module_init(my_init);
module_exit(my_exit);

#endif

このモジュールをコンパイルするには、次のMakefileを使用しています。

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

コンパイル後にコマンドを使用してモジュールをインストールしますsudo insmod ./hello.ko。からロードされたモジュールを見ることができます/proc/modules。出力cat /proc/modules | grep helloはですhello 12490 0 - Live 0x0000000000000000 (POF)

チェックインするとdmesgログを見ることができますHello Module Inserted : 3。モジュールを削除しようとすると、次のエラーが発生します。

rmmod: ERROR: ../libkmod/libkmod-module.c:769 kmod_module_remove_module() could not remove 'hello': Device or resource busy
rmmod: ERROR: could not remove module hello: Device or resource busy

の出力はcat /proc/modules | grep hello次のとおりです。hello 12422 0 - Unloading 0x0000000000000000 (POF-)

私の質問は、このモジュールを削除する方法です。シーケンス/コードにはどのような問題がありますか?

ベストアンサー1

まず、あなたの返品明細書に私の出口この問題を引き起こす機能です。

取り外し部分の場合は、モジュールを強制的に取り外すには有効にする必要があります。CONFIG_MODULE_FORCE_UNLOADカーネルから。それ以外の場合は、システムを再起動する必要があります。

おすすめ記事