7

カーネルとユーザースペースの両方のコードを含む大規模な組み込みソフトウェア(ARMプロセッサ、組み込みLinux 2.6.31、busybox)を使用しています。通常は最初にロードされるカーネルモジュールと、モジュールとのネットリンクソケットを確立するデーモンがあります。

ここでの問題は、デーモンを強制終了した後、モジュールをメモリからアンロードできなくなることです。

% rmmod _module.ko
% rmmod: _module.ko: Resource temporarily unavailable

分析によると、エラー(戻り値は-11、つまりEAGAIN?)はtry_stop_module()、のsyscalldelete_module()定義で呼び出されることによって返されますkernel/module.c。関数try_stop_module()は次にstop_machine()を呼び出し、これは私が立ち往生している場所です。

そこで何が起こっているのかよくわかりません。根本的な原因は、モジュールへの接続を開くデーモンのどこかにあり、明らかに他の何かであり、終了時に正しく閉じ/クリーンアップされない(明らかに一部の参照/ロックが解放されていない?)

誰かが他に何を見て調べるべきか考えていますか?

4

2 に答える 2

1

まず、これを行うにはスーパーユーザーになる必要があります。使用することもできますrmmod -fが、このオプションは非常に危険です:CONFIG_MODULE_FORCE_UNLOADカーネルがコンパイルされたときに設定されない限り、効果はありません。このオプションを使用すると、使用中のモジュール、削除するように設計されていないモジュール、または安全でないとマークされているモジュールを削除できます。

もお読みくださいman rmmod

于 2012-12-13T10:51:18.350 に答える