解決策の1つは、mknod
コマンドでファイルを作成する代わりに、ドライバを/dev
に動的に作成させることです。基本的な考え方は、class_create
を呼び出してモジュール初期化関数からカスタムデバイスクラスを作成し、次にdevice_create
を呼び出してクラスにデバイスを追加することです。
カスタムクラスへのポインタを保持するには、タイプstruct class *
の変数が必要です。
static struct class *foo_class;
あなたのモジュールのinit関数は、クラスを作成してかどうかを確認する必要があります:この変数は、その任意の機能の外で宣言する必要があり、通常はそのようstatic
に宣言されるだろう、あなたのモジュール内で様々な機能によってアクセスする必要がありますエラー:。
foo_class = class_create(THIS_MODULE, "foo");
if (IS_ERR(foo_class)) {
/* Failed to create class. */
rc = PTR_ERR(foo_class);
goto fail_class_create;
}
は(ここで、goto fail_class_create
はエラーを返す前に、これまで行って何をクリーンアップするためにラベルにジャンプしますが、この「エラー後藤の」パターンが気に入らない場合は、ここで明示的にクリーンアップして自由に感じますエラーを返す前に)
class_create
関数が成功すれば、それはもはやあなたのモジュール出口機能に必要でないときに破壊されなければならず、また、エラーはさらにダウンあなたのモジュールのinit関数であるならばクリーンアップの一環として:
class_destroy(foo_class);
ながらクラスが作成されたら、デバイスを作成するためにdevice_create
を呼び出し、デバイスを破棄するにはdevice_destroy
を呼び出して、そのクラスに属するデバイスを作成(および破壊)することができます(私はそれをクラスデバイスと呼びます)。どちらの関数も、デバイスノード番号(メジャーデバイス番号とマイナーデバイス番号の組み合わせ)を使用して、作成または破棄するクラスデバイスを指定します。例えば以下のようにクラスのデバイスを作成することができる。
struct device *csdev;
/* ... */
csdev = device_create(foo_class, hwdev, MKDEV(foo_major, minor), privdata, "foo%u", minor);
if (IS_ERR(csdev)) {
/* Failed to create device. */
rc = PTR_ERR(csdev);
/* Do any clean-up here. */
}
以前に作成したカスタムクラスに(ここで、foo_class
点; hwdev
根底にある「ハードウェアデバイス」へのポイントまたは全く根底がない場合NULL
に設定することができますハードウェアデバイス、foo_major
はあなたの主要なデバイス番号です(register_chrdev
によって割り当てられ、minor
は作成するデバイスのマイナーデバイス番号です)。privdata
はプライベートデータポインタであり、通常はデバイスのプライベートデータ構造を指します。 NULL
であり、残りのパラメータは、printf形式の書式文字列と書式文字列によって必要とされる余分なパラメータで構成されます。デバイス名を変更してください。)
minor
が0の場合、デバイスは/dev/foo0
として動的に作成されます。
次のようにdevice_destroy
を呼び出し、デバイスを破壊する:(。device_create
に渡される。ここで、foo_class
、foo_major
とminor
同じ)
device_destroy(foo_class, MKDEV(foo_major, minor));
が
上記機能のみGPLとしてエクスポートされしたがって、モジュールを使用する場合は、モジュールは次の宣言を使用してライセンスを宣言する必要があります。
MODULE_LICENSE("GPL");
'/ dev'は動的に作成されたファイルシステムです。これはディスク上の実用的なものではないため、システムをブートするたびにNEWに再作成されます。あなたのアプリがスタートアップチェーンの一部となり、毎回そのデバイスを再作成しない限り、ファイルは消えてしまいます。 –
どうすればこの問題を解決できますか? –
http://www.linuxquestions.org/questions/linux-newbie-8/create-a-device-file-using-udev-738448/ – stark