/ devと/ sys / classの違いは?


30

内のデバイスの表現の違いは何です/devと1つは/sys/class

一方が他方よりも優先されますか?一方が提供し、もう一方が提供しないものはありますか?



このlibudevとsysfsのチュートリアルを参照してください:signal11.us/oss/udev
slm

回答:


26

のファイルは、/devUDEVが実行時に作成する実際のデバイスファイルです。このディレクトリ/sys/classは実行時にカーネルによってエクスポートされ、ハードウェアの階層を公開しますsysfs

libudevと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"
...

私があなたを正しく理解したかどうかわかりません。確かにいくつかの明確化を求めます。/ devまたは/ sysにエントリを作成して外部デバイス(i2cまたはmipiなど)とのインターフェースをとるかどうかは、純粋に個人的な好みに基づいていますか?そうでない場合、後者(およびその逆)の代わりに前者を選択するのはどのような場合/なぜですか?
-LandonZeKepitelOfGreytBritn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.