メジャー番号とマイナー番号によるドライバーへのデバイスファイルリンク。では、ドライバーはどのようにデバイスにリンクするのでしょうか?デバイスをプラグインするとき、カーネルはどのモジュールがロードされたかでデバイスが機能することをどのように知ることができますか
3 に答える
PCIデバイスの場合、ベンダーとデバイスIDを一貫した場所に公開します。カーネルモジュールは、サポートするこれらのリストをpciサブシステムに提示できます。
例: http: //lxr.free-electrons.com/source/drivers/uio/uio_aec.c#L48
ベンダーIDとデバイスID、およびhotplugとudevに関する回答は正しいですが、メジャー番号とマイナー番号が何であるかについては説明されていません。すべてのキーワードが将来の検索者のためにカバーされるように、ここでそれを行います。
に見られるように、メジャーおよびマイナーデバイス番号ls -l /dev
は、デバイスの検出時にロードされるドライバーの識別には寄与しません。これらは、デバイスファイルを開いたときに、アクセスしているデバイスをカーネルが認識できるようにするためのものです。
ドライバがロードされると、で特別なファイルをサポートしている場合、ドライバは(または同様の関数/dev
を)呼び出しregister_chrdev
、使用したいメジャー番号をカーネルに通知します。一部のドライバーは、カーネルに未使用のものを選択するように要求することにより、動的にメジャー番号を選択します。登録手順により、ドライバーとそのメジャー番号がテーブルに配置され、後で見つけることができます。
恒久的に割り当てられたデバイス番号は中央機関に登録され、登録はDocumentation / admin-guide/devices。*に公開されます。
のファイルに/dev
は、ドライバーと一致するメジャー番号と、特定のデバイスまたは機能を識別するマイナー番号があります。これらのファイルはMAKEDEV
、hotplug/udevシステムによって静的に作成されるか動的に作成されます。低レベルの「デバイスファイルの作成」操作はと呼ばれmknod
ます。
ユーザープログラムがデバイスファイルを開くと、メジャー番号とマイナー番号を使用して、によって管理されているテーブルでドライバーが検索されregister_chrdev
、ドライバーのメソッドが呼び出されてユーザーの要求が処理されます。