3.3. devfs でのデバイス名

デバイス擬似ファイルシステムは /dev にマウントでき、 こうすると従来の Linux デバイスのサブディレクトリに置き換わります。 あるいは別の場所(例えば /devfs)にマウントすることも可能 で、既存のデバイス構造へ追加も可能です。

devfs を使わないと、通常デバイス名はルートパーティションの dev ディレクトリ内で扱われます。したがって、デバイス名 (およびそのパーミッション)は、ファイル・システムと同じ永続性を持ちます。 デバイス名があっても、必ずしもデバイス(もしくはそのデバイスのドライバさえ)が その時に存在するわけではありません。ユーザがデバイス名のエントリーを作成する 手間(mknodを使って)を省くため、ほとんどの Linux ディストリビューションには何千ものデバイス名が /dev ディレクトリに入っています。アプリケーションがデバイス名を open() しようとした 時にerrno 値 ENODEV が返された場合は、対応するデバイス(もしくはドライバ)がその 時に利用できないことを示します。

devfs は違った方法をとります。デバイス名が存在すれば、すなわち対応する デバイス(とドライバ)が存在することを意味します。

devfs を /dev にマウントしている場合、SCSI デバイス のプライマリーデバイス名はこのようになります。

/dev/scsi/host0/bus0/target1/lun0/disc    [ディスク全体]
/dev/scsi/host0/bus0/target1/lun0/part6   [パーティション 6]
/dev/scsi/host0/bus0/target1/lun0/generic [sg デバイスのディスク]

/dev/scsi/host1/bus0/target2/lun0/cd      [CD リーダーもしくは CD ライター]
/dev/scsi/host1/bus0/target2/lun0/generic [sg デバイスの CD]

/dev/scsi/host2/bus0/target0/lun0/mt      [テープ モード 0 リワインド]
/dev/scsi/host2/bus0/target0/lun0/mtan    [テープ モード 3 リワインドなし]
/dev/scsi/host2/bus0/target0/lun0/generic [sg デバイスのテープ]
3 行目の sg デバイスは、1 行目にある「ディスク全体」に対応しており、 この両者は同じアドレス(つまり host0/bus0/target1/lun0)を指します。 sg ドライバがモジュールでまだロードされていない(もしくはアンロード されている)場合、上記のリストにある「generic」デバイス名は現れません。

(「disc」というスペルに注意。devfs の開発者は、米語のこの綴りがお気に入り)。 devfs の名前付け規則は、Section 3.1で論じている SCSI の アドレス付けにぴったりマッチしていることがわかるでしょう。IDE サブシステム が同じような(「scsi」という単語を「ide」に置き換えた)規則で devfs デバイスを 名付けている点も覚えておくと良いと思います。devfs はChapter 12 でさらに論じます。