Perbedaan antara / dev dan / sys / class?

30

Apa perbedaan antara representasi perangkat /devdan yang ada di /sys/classdalamnya?

Apakah yang satu lebih disukai daripada yang lain? Apakah ada sesuatu yang satu penawaran dan yang lainnya tidak?

TheMeaningfulEngineer
sumber
1
sudahkah kamu membaca serverfault.com/questions/65261/…
Rahul Patil
Lihat tutorial libudev & sysfs ini: signal11.us/oss/udev
slm

Jawaban:

26

File-file dalam /devadalah file perangkat aktual yang dibuat oleh UDEV saat dijalankan. Direktori /sys/classdiekspor oleh kernel pada saat dijalankan, memperlihatkan hierarki perangkat keras melalui sysfs.

Dari libudev dan Tutorial Sysfs

kutipan

Pada sistem Unix dan Unix-like, perangkat perangkat keras diakses melalui file khusus (juga disebut file perangkat atau node) yang terletak di direktori / dev. File-file ini dibaca dari dan ditulis seperti file-file normal, tetapi alih-alih menulis dan membaca data pada disk, mereka berkomunikasi langsung dengan driver kernel yang kemudian berkomunikasi dengan perangkat keras. Ada banyak sumber daya daring yang menjelaskan file / dev secara lebih rinci. Secara tradisional, file-file khusus ini dibuat pada waktu instalasi oleh distribusi, menggunakan perintah mknod. Dalam beberapa tahun terakhir, sistem Linux mulai menggunakan udev untuk mengelola file / dev ini saat runtime. Misalnya, udev akan membuat simpul ketika perangkat terdeteksi dan menghapusnya saat perangkat dihapus (termasuk perangkat hotplug saat runtime). Cara ini,

kutipan lain

Direktori-direktori di Sysfs berisi hirarki perangkat, sebagaimana terpasang pada komputer. Misalnya, di komputer saya, perangkat hidraw0 terletak di bawah:

/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

Berdasarkan jalur, perangkat terhubung ke (kira-kira, mulai dari akhir) konfigurasi 1 (: 1.0) perangkat terpasang ke port nomor 4 perangkat 1-5, terhubung ke pengontrol USB 1 (usb1), terhubung ke Bus PCI. Meskipun menarik, jalur direktori ini tidak banyak membantu kita, karena tergantung pada bagaimana perangkat keras terhubung secara fisik ke komputer.

Untungnya, Sysfs juga menyediakan sejumlah besar symlink, untuk akses mudah ke perangkat tanpa harus tahu PCI dan port USB mana mereka terhubung. Di / sys / class ada direktori untuk setiap kelas perangkat yang berbeda.

Pemakaian?

Secara umum Anda menggunakan aturan /etc/udev/rules.duntuk menambah sistem Anda. Aturan dapat dibuat untuk menjalankan skrip ketika berbagai perangkat keras hadir.

Setelah sebuah sistem menyala Anda dapat menulis skrip untuk bekerja melawan salah satu /devatau /sys, dan itu benar-benar turun ke preferensi pribadi, tetapi saya biasanya akan mencoba dan bekerja melawan /sysdan menggunakan alat-alat seperti udevadmuntuk query UDEV untuk lokasi berbagai sumber daya sistem.

$ 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"
...
slm
sumber
tidak yakin saya mengerti Anda dengan benar. Jadi minta beberapa klarifikasi untuk memastikan. Apakah Anda memutuskan untuk berinteraksi dengan perangkat eksternal (mis. Via i2c atau mipi) dengan membuat entri di / dev atau / sys murni berdasarkan preferensi pribadi? Jika tidak, dalam hal apa / mengapa seseorang lebih memilih untuk yang pertama sebagai pengganti yang terakhir (dan sebaliknya)?
LandonZeKepitelOfGreytBritn