内のデバイスの表現の違いは何です/dev
と1つは/sys/class
?
一方が他方よりも優先されますか?一方が提供し、もう一方が提供しないものはありますか?
内のデバイスの表現の違いは何です/dev
と1つは/sys/class
?
一方が他方よりも優先されますか?一方が提供し、もう一方が提供しないものはありますか?
回答:
のファイルは、/dev
UDEVが実行時に作成する実際のデバイスファイルです。このディレクトリ/sys/class
は実行時にカーネルによってエクスポートされ、ハードウェアの階層を公開しますsysfs
。
抜粋
UnixおよびUnixライクシステムでは、/ devディレクトリにある特別なファイル(デバイスファイルまたはノードとも呼ばれます)を介してハードウェアデバイスにアクセスします。これらのファイルは、通常のファイルと同様に読み書きされますが、ディスク上のデータを読み書きする代わりに、ハードウェアと通信するカーネルドライバーと直接通信します。/ devファイルについて詳しく説明している多くのオンラインリソースがあります。従来、これらの特別なファイルは、インストール時にmknodコマンドを使用してディストリビューションによって作成されました。近年、Linuxシステムは実行時にこれらの/ devファイルを管理するためにudevを使用し始めました。たとえば、udevはデバイスが検出されるとノードを作成し、デバイスが削除されるとノードを削除します(実行時のホットプラグデバイスを含む)。こちらです、
別の抜粋
Sysfsのディレクトリには、コンピューターに接続されているデバイスの階層が含まれています。たとえば、私のコンピューターでは、hidraw0デバイスは次の場所にあります。
/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4:1.0/0003:04D8:003F.0001/hidraw/hidraw0
パスに基づいて、デバイスは、デバイス1-5のポート番号4に接続され、USBコントローラー1(usb1)に接続されたデバイスの構成1(:1.0)に接続されます。 PCIバス。興味深いことですが、このディレクトリパスは、ハードウェアがコンピューターに物理的に接続されている方法に依存するため、あまり役に立ちません。
幸いなことに、Sysfsは多数のシンボリックリンクも提供します。これにより、接続されているPCIおよびUSBポートを知る必要なく、デバイスに簡単にアクセスできます。/ sys / classには、デバイスの異なるクラスごとにディレクトリがあります。
通常、ルールを使用し/etc/udev/rules.d
てシステムを拡張します。さまざまなハードウェアが存在するときにスクリプトを実行するルールを構築できます。
システムが起動したら、/dev
またはのいずれかに対して動作するスクリプトを記述できますが/sys
、実際には個人の好みに依存しますが、通常はさまざまなシステムリソースの場所についてUDEVにクエリを実行する/sys
などのツールを試して使用udevadm
します。
$ udevadm info -a -p $(udevadm info -q path -n /dev/sda) | head -15
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976773168"
ATTR{stat}==" 6951659 2950164 183733008 41904530 16928577 18806302 597365181 580435555 0 138442293 622621324"
ATTR{range}=="16"
...