カーネルモジュールプログラミングガイド からキャラクターデバイスドライバーを書くことを学び、mknod
を使用して_/dev
_にノードを作成し、ドライバーと通信します。
ただし、マンページを確認し、rmnod
が存在しないコマンドであることを確認した後、削除する明白な方法を見つけることができません。
mknod
の効果を逆転させ、_/dev
_で作成されたノードを安全に削除する正しい方法は何ですか?
正しいコマンドはrm
です:)
mknod
によって作成されたデバイスノードは、デバイスのメジャー番号とマイナー番号を含む単なるファイルです。そのファイルに初めてアクセスすると、Linuxはそのメジャー/マイナーをアドバタイズするドライバーを探してロードします。ドライバーは、そのファイルですべてのI/Oを処理します。
デバイスノードを削除すると、通常のUn * xファイルの動作が適用されます。ファイルへの参照がなくなるまでLinuxは待機し、その後ディスクから削除されます。
ドライバーはこれに気づきません。 Linuxはモジュールを自動的にアンロードしません。ドライバーは、何に対してもリクエストを受信しなくなります。ただし、誰かがデバイスノードを再作成する場合は準備ができています。
おそらくコマンドではなく関数を探しているでしょう。 unlink()が答えです。プロセスがファイルを開いていない場合、unlink()はファイル/特殊ファイルを削除します。プロセスがファイルを開いている場合、ファイルはそれを参照する最後のファイル記述子が閉じられるまで残ります。詳細はこちら: http://man7.org/linux/man-pages/man2/unlink.2.html