web-dev-qa-db-ja.com

ドライバーで直接ではなく、外部でmknodを呼び出す必要があるのはなぜですか?

私が見つけたキャラクターデバイスドライバーに関するすべての本/記事/チュートリアル/例を読んで、それらはすべて私のドライバーコードでメジャー番号を取得する方法をカバーしており、alloc_chrdev_region()を呼び出すことによって動的に取得することを示唆しています。実際のデバイスノードを作成するために、それらはすべて、手動またはスクリプトのいずれかで、ドライバーコードの外部でmknodを呼び出すように指示します。ある参照では、ドライバーにメジャー番号を印刷してもらいたいと考えています。別の人は、_/proc/devices_でawkを使用してメジャー番号を見つけることを望んでいます。関数mknod()についての言及がありますが、ユーザーランドコードでの使用を目的としているようです。

ドライバーを自己完結させる方法がない理由がわからないため、明らかに何かが欠けています。つまり、_modprobe my_driver_を実行すると、たとえば_/dev/my_driver_が作成されずに作成されてしまいます。他に何かしなければならない。

2
David H Olson

コマンドペアdevice_createとclass_createは、Linuxでこのトリックを実行します。チェック https://stackoverflow.com/questions/5970595/create-a-device-node-in-code

2
Francisco

Unixは伝統的に、「ポリシーではなくメカニズム」の伝統に従ってきました。デバイスドライバーの場合、これはカーネル内のドライバーIDがメジャー/マイナーデバイス番号にすぎないことを意味します。 mknodを使用したデバイスの命名(「ポリシー*」)は、ユーザースペースに任されています。

0
Johan Myréen