デバイスタイプ番号とはどういう意味ですか?

デバイスタイプ番号とはどういう意味ですか?

file /dev/*複数のファイルの説明を「Block Special(M / N)」および「Character Special(M / N)」として印刷します。ここで、MとNは数字です。たとえば、

$ file /dev/null
/dev/null: character special (1/3)

man fileこれは文書化されていないようですが、あいまいに参照されており、man statこれをプライマリデバイスタイプとセカンダリタイプと呼ぶようです。apropos 'device type'何も見つかりませんでした。それでは、この数字は何を意味しますか?

答え1

Unixのデバイスには、タイプ(文字またはブロックなど)、メイン番号(通常はドライバ)、マイナー番号(通常はインスタンス)があります。

たとえば、次のようになります。

% ls -l /dev/vda
brw-rw---- 1 root disk 253, 0 Feb  3 09:09 /dev/vda

これはブロック装置、基本装置253、補助装置0である。

見てみると/proc/devices、次のように終わることがわかります。

Block devices:
  2 fd
259 blkext
  9 md
253 virtblk
254 mdp

したがって、253が「virtblk」であることがわかります。これは仮想ディスクがある仮想マシンなので意味があります!

このドライバの場合、マイナーデバイス番号は、デバイス内のブロックデバイスとパーティションを表します。

% ls -l /dev/vd*
brw-rw---- 1 root disk 253,  0 Feb  3 09:09 /dev/vda
brw-rw---- 1 root disk 253,  1 Feb  3 09:09 /dev/vda1
brw-rw---- 1 root disk 253,  2 Feb  3 09:09 /dev/vda2
brw-rw---- 1 root disk 253,  3 Feb  3 09:09 /dev/vda3
brw-rw---- 1 root disk 253, 16 Feb  3 09:09 /dev/vdb
brw-rw---- 1 root disk 253, 32 Feb  3 09:09 /dev/vdc
brw-rw---- 1 root disk 253, 33 Feb  3 09:09 /dev/vdc1

「実際の」ハードウェアに関連しない特別なドライバがあります。例えば

% ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Feb  3 09:09 /dev/null

キャラクターデバイス、メジャー 1、マイナー 3 です。 /proc/devicesドライバー1について教えてください。

  1 mem

この「mem」ドライバが他のデバイスも処理していることがわかります。

% ls -l /dev | grep ' 1, '
crw-rw-rw- 1 root root      1,   7 Feb  3 09:09 full
crw-r--r-- 1 root root      1,  11 Feb  3 09:09 kmsg
crw-r----- 1 root kmem      1,   1 Feb  3 09:09 mem
crw-rw-rw- 1 root root      1,   3 Feb  3 09:09 null
crw------- 1 root root      1,  12 Feb  3 09:09 oldmem
crw-r----- 1 root kmem      1,   4 Feb  3 09:09 port
crw-rw-rw- 1 root root      1,   8 Feb  3 09:09 random
crw-rw-rw- 1 root root      1,   9 Feb  3 09:09 urandom
crw-rw-rw- 1 root root      1,   5 Feb  3 09:09 zero

答え2

各デバイスノードのタイプ(ブロックまたは文字)と番号(メインとマイナー番号と呼ばれる)は、カーネルの識別子として使用されます。

Linuxでは、デバイスの標準的なリストとその機能の簡単な説明が保持されています。カーネルから。ここで通常ドライバを識別するキー番号(例えばTTY デバイスドライバ) とマイナー番号は、ドライバが管理するデバイスを識別します。

関連情報