/dev/サブディレクトリに複数のデバイス(カーネルドライバ)を作成する方法

/dev/サブディレクトリに複数のデバイス(カーネルドライバ)を作成する方法

カーネルモジュールを作成しています。 /dev/に文字デバイスを簡単に作成できますが、3つの装置私のユーザーが利用できるので、すべての機能を1つに統合することをお勧めします。/dev/ サブディレクトリ

考えられる例(私のopenSUSEボックスにあります):

# ls -l /dev/bsg
total 0
crw-rw---- 1 root root 252, 0 Jul 17 14:28 0:0:0:0
crw-rw---- 1 root root 252, 1 Jul 17 14:28 0:0:1:0
crw-rw---- 1 root root 252, 2 Jul 17 14:28 0:0:2:0
crw-rw---- 1 root root 252, 3 Jul 17 14:28 0:0:3:0
crw-rw---- 1 root root 252, 4 Jul 17 14:28 0:0:4:0
crw-rw---- 1 root root 252, 5 Jul 17 14:28 1:0:0:0

(bsg.cコードを見ましたが、文字デバイスが追加された「親」が何であるかわかりません)。

似たようなことはどうすればいいですか?

ベストアンサー1

私はudevルールを使わない私に合った方法を見つけました(私はプログラム的にする方が良いです)。以前思ったよりも簡単です。

  1. alloc_chrdev_regionデバイス数について。
  2. 各デバイスのクラスの作成(クラスごとに異なる名前を持つ)
  3. devnodeユーザー定義関数を使用してクラスのフィールドを設定します(例:)return kasprintf(GFP_KERNEL, "name/%d", global++);。ここで名前が付けられます。 Udevはこの機能を尊重しなければなりません。
  4. cdev_initcdevを生成しcdev_addてfopsを設定するには、&&を使用してください。
  5. デバイスの作成device_create(親エントリはNULL)

これにはデバイス階層はなく、同じ/dev/ディレクトリにある個々のデバイスのみがあることに注意してください。手順 2~5 で指定した名前は、最終的に /sys/ に置かれます。

おすすめ記事