カーネルとユーザースペースの両方のコードを含む大規模な組み込みソフトウェア(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()を呼び出し、これは私が立ち往生している場所です。
そこで何が起こっているのかよくわかりません。根本的な原因は、モジュールへの接続を開くデーモンのどこかにあり、明らかに他の何かであり、終了時に正しく閉じ/クリーンアップされない(明らかに一部の参照/ロックが解放されていない?)
誰かが他に何を見て調べるべきか考えていますか?