カーネルモジュールを作成しています。 /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ルールを使わない私に合った方法を見つけました(私はプログラム的にする方が良いです)。以前思ったよりも簡単です。
alloc_chrdev_region
デバイス数について。- 各デバイスのクラスの作成(クラスごとに異なる名前を持つ)
devnode
ユーザー定義関数を使用してクラスのフィールドを設定します(例:)return kasprintf(GFP_KERNEL, "name/%d", global++);
。ここで名前が付けられます。 Udevはこの機能を尊重しなければなりません。cdev_init
cdevを生成しcdev_add
てfopsを設定するには、&&を使用してください。- デバイスの作成
device_create
(親エントリはNULL)
これにはデバイス階層はなく、同じ/dev/ディレクトリにある個々のデバイスのみがあることに注意してください。手順 2~5 で指定した名前は、最終的に /sys/ に置かれます。