
私の知る限りでは:
1 つのドライバーは、1 つ以上の「デバイス」に関連付けることができます。
/dev ファイルの下にあるファイルはこれらのデバイスを表します。ドライバーにはメジャー番号があり、各デバイスにもマイナー番号があるため、(メジャー、マイナー) で 1 つのデバイスが識別されます。
/proc/devices にもデバイスがリストされます。
もし私が知っていることが真実ならば:
/dev と /proc/devices の出力がまったく異なるのはなぜですか? dev にはデバイス名、メジャー番号、マイナー番号があります。また、/proc/devices にはメジャー番号とデバイス名がありますが、マイナー番号はありません。なぜ、この 2 つのリストは同じメジャー番号であってもまったく異なる出力を示すのでしょうか?
たとえば、ls -l /devのこの行を見てください。
crw------- 1 root root 10, 235 Sep 19 21:40 autofs
これはメジャー番号 10、マイナー番号 235 のキャラクター デバイスです。デバイス名は autofs です。
ここで、/proc/devices 内の同じメジャー番号のエントリを確認します。
10 misc
ご覧のとおり、デバイス名はまったく異なり、マイナー番号はありません (メジャー番号のみでデバイスを識別する方法は?)。
いくつかの用語が混同されているようですが、解決できませんでした。
答え1
カーネルモジュール(「ドライバ」とも呼ばれる)は、次のようなルーチンとデバイスを識別する文字列を使用して、ブロックデバイスまたはキャラクタデバイス(従来のUNIXの意味で、「デバイス」には多くの意味があります)をカーネルにregister_blkdev
登録できます。どれでもそのために文字列が作成され、これらの文字列が/proc/devices
ファイル内に表示されます (これはカーネル テーブルの単なるテキスト表現です)。
一方、最近の Linux システムでは、ファイルはいくつかの複雑なルール/dev
に従って作成されますudev
。これらのファイルは、読み取り、書き込み、ioctl を介してユーザー空間がカーネルと対話する方法を表すことになっています。これは、メジャー デバイス番号とマイナー デバイス番号を持つ「特別な」ファイルであるため機能し、これらのファイルへのアクセスはカーネル呼び出しに変換されます (大まかに言えば)。
これら 2 つとその構造はまったく無関係です。唯一の関連性は、そのような特殊ファイルにアクセスするたびに、そのファイルのメジャー デバイス番号が検索され、そのファイルを登録したモジュールを見つけるために使用されることです。登録された文字列はまったく無関係です。ユーザーが名前を知っている限り、ファイルが表示される名前もまったく無関係です。必要に応じて/dev/this-disk
、ディスクをおよび/dev/that-disk
ではなく と と呼び、ルールを変更しても問題ありません。/dev/sda
/dev/sdb
udev
しかしもちろん人々は物事をシンプルにすることを好むため、デバイスを登録するために使用される文字列は、 に表示されるデフォルトの名前と同じか、少なくとも類似していることがよくあります/dev
。しかし、それが唯一のつながりです。