Не е много кратко на udev
Не е много кратко на udev
kayo - неделя, 15/12/2013 - 00:44
Има толкова сложно нещо в нашите linux-о как udev. Това е услуга, която взема и конфигурира периферни устройства, получавайки известия от ядрото. Той е гъвкаво конфигурируем за оборудване и задачи, като се използват специални правила. Стандартните системни правила обикновено се намират в директорията /lib/udev/rules.d и ние можем безопасно да спасим хората с увреждания в /etc/udev/rules.d.
Правилата са много прости и обикновено работят челно без никакви трикове, обаче, пишете ги за първи път, без добро разбиране на принципите на устройството sysfs Ядрата на Linux могат да бъдат трудни. Това е, което ще разберем сега. Разбира се, документацията и примерите са поразителни, но по правило те се отнасят до стандартни неща и тривиални задачи. Ще направим нещо, което отива малко по-далеч и с разбиране откъде всъщност идва това.
За sysfs (да, този, който обикновено е монтиран в/sys), можете да говорите за дълга статия, но тук ще засегнем само това, от което най-често се нуждаем. Ето няколко важни поддиректории за нас:
- / bus - тук са разположени устройства на шините за обмен на данни (неочаквано е ^ _ ^). Като правило не е нужно да търсим тук, но ще имаме предвид.
- / class - тук устройства по клас. Това определено ще ви бъде от полза.
- / устройства - устройства по тип. Често ядрото изхвърля известия с пътища на устройства тук, а символните връзки изглеждат тук от други поддиректории.
- / kernel/debug е файловата система за отстраняване на грешки в ядрото. Може да е полезно, за да видите какво не е наред с устройствата.
Нека имаме предвид, че тъй като udev работи със sysfs, всички пътища (syspaths) трябва да се разглеждат спрямо/sys, тоест вместо/sys/devices/xyz, пишете/devices/xyz.
Полезен инструмент за работа с udev, може би единственият, без който не можете да се справите, когато конфигурирате.
Проверете sysfs с командата info
Ето как можем да разберем какво мисли udev за устройството или подсистемата, от която се интересуваме, например да вземем gpio На Raspberry Pi:
В този пример не получихме нищо интересно, но можем да заключим, че това е територията на ядрото. Записите от формата ABCD == "abcd" са селектори, които могат да се използват като условия в правилата. Нека да разгледаме контролера gpio:
Нека да видим нещо друго, като устройство i2c:
Това, което виждаме тук, е йерархия от вложени възли от частни към общи. За да се получат такива върхове, както се досещате, параметърът - атрибут-разходка сили. Струва си да се обърне внимание на пътеките и стойностите на селекторите. Имам часовник в реално време в този автобус, така че можем да направим това:
Само най-ниският (т.е. горният) възел се е променил, сега всъщност е самият часовник.
Хващаме събития с командата на монитора
Често е полезно да наблюдавате ядрото и udev събитията, за да разберете какво се случва, като добавяне или премахване на устройства, които представляват интерес. Можем да започнем да следим така:
Тук улавяме всички събития на ядрото и самия udev с всички свойства. Разбира се, можете да посочите филтри, но обикновено е лесно да се види какво ни интересува в изхода. Стартираме монитора, свързваме устройството и виждаме какво имаме. Нека се опитаме да инициализираме порта например. gpio: