У чому різниця між поданням пристрою в /dev
і один в /sys/class
?
Чи один віддає перевагу іншому? Чи є щось, що пропонує, а інше ні?
У чому різниця між поданням пристрою в /dev
і один в /sys/class
?
Чи один віддає перевагу іншому? Чи є щось, що пропонує, а інше ні?
Відповіді:
Файли в - /dev
це фактичні файли пристроїв, які UDEV створює під час виконання. Каталог /sys/class
експортується ядром під час виконання, піддаючи ієрархію апаратного забезпечення наскрізь sysfs
.
витяг
У Unix і Unix-подібних системах доступ до апаратних пристроїв здійснюється через спеціальні файли (також звані файли пристроїв або вузли), що знаходяться в каталозі / dev. Ці файли читаються і записуються так, як звичайні файли, але замість запису та читання даних на диску вони безпосередньо спілкуються з драйвером ядра, який потім спілкується з обладнанням. Є багато інтернет-ресурсів, що описують / розроблені файли більш докладно. Традиційно, ці спеціальні файли були створені в час установки дистрибутивом, використовуючи команду mknod. В останні роки системи Linux почали використовувати udev для управління цими / dev-файлами під час виконання. Наприклад, 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 (: 1.0) пристрою, приєднаного до порту номер 4 пристрою 1-5, підключеного до USB-контролера 1 (usb1), підключеного до Шина PCI. Хоча цікаво, цей шлях до каталогу не дуже добре допомагає нам, оскільки це залежить від того, як апаратно фізично підключений до комп'ютера.
На щастя, Sysfs також пропонує велику кількість посилань для легкого доступу до пристроїв, не знаючи, до яких портів PCI та USB вони підключені. У / sys / class є каталог для кожного різного класу пристроїв.
Як правило, ви використовуєте правила /etc/udev/rules.d
для розширення вашої системи. Правила можуть бути побудовані для запуску сценаріїв, коли є різні апаратні засоби.
Після створення системи ви можете писати сценарії, щоб працювати проти будь-якого /dev
або /sys
, і це дійсно зводиться до особистих переваг, але я б зазвичай намагався працювати /sys
і використовувати такі інструменти, як udevadm
запит UDEV для розташування різних системних ресурсів.
$ 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"
...