メジャー番号とマイナー番号は一意ですか?

メジャー番号とマイナー番号は一意ですか?

番号はmajor, minor一意ですか?

引用や参考資料はありますか?

NAME   MAJ:MIN RM   SIZE RO MOUNTPOINT
sda      8:0    0 465.8G  0 
├─sda1   8:1    0 298.2M  0 
├─sda2   8:2    0     3G  0 
├─sda3   8:3    0 458.7G  0 /
├─sda4   8:4    0     1K  0 
└─sda5   8:5    0   3.8G  0 
sr0     11:0    1  1024M  0 

ベストアンサー1

~からLinuxプログラミングインターフェース、§14.1

各デバイスファイルにはプライマリID番号とマイナーID番号があります。キーIDは一般的なデバイスクラスを識別し、カーネルがそのデバイスに適したドライバを見つけるために使用されます。セカンダリIDは、共通カテゴリ内で特定のデバイスを一意に識別します。装置ファイルのメイン ID とマイナー ID は、ls -l コマンドを使用して表示されます。

[...]

各デバイスドライバは特定のマスターデバイスIDとの接続を登録し、その接続はデバイス特殊ファイルとデバイス間の接続を提供します。カーネルがデバイスドライバを探すとき、デバイスファイルの名前は重要ではありません。

以前のバージョン(2001)も参照してください。Linuxデバイスドライバ章(2e)

つまり、各デバイスタイプに対して、デフォルト:セカンダリとデバイス:インスタンスのユニークなマッピングを提供することが目的です。厳密に言えば、できる1つは文字で、もう1つはブロックの場合、同じメジャー:マイナーを持つ2つの異なるデバイスがあります。

# ls -l /dev/ram1 /dev/mem
crw-r----- 1 root kmem 1, 1 Jan  1  1970 /dev/mem
brw-rw---- 1 root disk 1, 1 Jan  1  1970 /dev/ram1

Linuxでは、システムのどの時点でもメジャー:マイナー番号各デバイスタイプについてユニークです。ただし、これらの数字は時間の経過とともに変わる可能性があり、他のLinuxシステム(同じディストリビューション、カーネル、ハードウェアでも)は必ずしも同じではありません。文字およびブロック装置には異なる番号付けスペースがあります。たとえば、ブロックマスター1はRAMディスクに割り当てられ、文字マスター1はカーネルデバイスセット(nullと0を含む)に割り当てられます。

歴史的に装備専攻者は(ほとんど)静的経由で割り当て登録部(メンテナンスはされませんが、カーネルソースコードにはまだ存在していますDocumentation/devices.txt。)今日、多くのデバイスが動的に割り当てられています。ウデブ、マッピングはで見ることができます/proc/devices。固定装置がまだ存在します。incude/uapi/linux/major.h(最近から移動するinclude/major.h

デフォルト:サブコンビネーションは特定のデバイスインスタンスを一意に識別しますが、同じデバイスを参照する複数のデバイスノード(ファイル)を作成するのを妨げることはありません。作成する必要はありません/dev(ただし、デバイスノードの作成をサポートするファイルシステムに存在する必要があり、そのnodevオプションでインストールしないでください)。

一般的な用途は、chrootに冗長な0、null、および任意のデバイスを作成することです。

# find /dev /var/chroot -regextype posix-extended -regex ".*/(zero|null|random)" -type c | 
xargs ls -l
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /dev/zero
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /var/chroot/sendmail/dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /var/chroot/sendmail/dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /var/chroot/sendmail/dev/zero

名前は単なるエイリアスであり、カーネルはほとんどの名前や場所に大変気にすることなく正しいドライバを選択できるようにメジャー番号に興味を持ち、ドライバは(通常)ドライバを選択できるようにマイナー番号に興味があります。正しいケース。

ほとんどの名前は単なる慣習的なものです(たとえ一部は POSIX によって定義されます。)。さらに、デバイスは複数の主要なデバイス番号を登録できます。sdでドライバを確認してください/proc/devices。ドライバモジュール名(.ko)はデバイス名と同じである必要はなく、デバイスノードと同じである必要もありません。/dev、シングルドライバモジュールは、複数の論理/物理デバイスまたはデバイス名を管理できます。


要約すると、同じメジャー:マイナー番号を持つ複数のデバイスノード(その内部または別の場所)がある可能性がありますが、/dev/同じタイプの場合は同じデバイスを参照します。複数の主要インスタンスを処理できるドライバがある場合がありますが、カーネルとドライバ内の各タイプ(文字またはブロック)について、メジャー:マイナー番号は、特定のデバイス(デフォルト)と特定のインスタンス(マイナー必須)を参照するために使用されます。 。 )機器。

タイプが同じで、プライマリ:セカンダリの2つのデバイスノードを持つことはできず、2つのノードが2つの異なる論理または物理デバイスにアクセスすることが期待されます。デバイスにアクセスすると、カーネルはタイプとキー番号(およびいいえ特定のインスタンスまたはサブ機能は、デバイスノード名と慣例的にマイナー番号に基づいて決定的に選択されます。


修正する いくつかの興味深い歴史といくつかの* BSDの視点は、Poul-Henning Kampの2002にあります。BSDConプロモーション会議: https://www.usenix.org/legacy/events/bsdcon/full_papers/kamp/kamp_html/

もしあなたなら時間をさかのぼって1978年に(アルカテル - ルーセント提供)ベルシステム技術マガジン1978年7~8月)Unixタイムシェアリングシステム'は明示的に言います(p1937):

デバイスは、メジャー番号、マイナー番号、およびクラス(ブロックまたは文字)で特徴付けられます。各クラスには、デバイスドライバのエントリポイントのセットがあります。キーデバイス番号は、特定のデバイスドライバのコードを呼び出すときに配列をインデックス化するために使用されます。マイナーデバイス番号は、デバイスドライバにパ​​ラメータとして渡されます。マイナー番号は、ドライバーが付与した番号以外には意味がありません。一般に、ドライバは、マイナーデバイス番号を使用して、複数の同じ物理デバイスのうちの1つにアクセスします。

おすすめ記事