Комментарии: отладка правил udev http://blog.metrotek.spb.ru/2010/08/11/otladka-pravil-udev/ заметки бывших разработчиков бывшего НТЦ Метротек Tue, 22 Nov 2016 11:00:27 +0000 hourly 1 https://wordpress.org/?v=5.1.15 Автор: Павел Курочкин http://blog.metrotek.spb.ru/2010/08/11/otladka-pravil-udev/comment-page-1/#comment-5027 Thu, 09 Sep 2010 07:21:00 +0000 http://blog.metrotek.spb.ru/?p=2269#comment-5027 обнаружил тут такую штуку.
в ядре 2.6.35 у device’а появился атрибут remove

запись «1» в этот атрибут равносильная unbind ;)
так что driver искать не обязательно

]]>
Автор: Павел Курочкин http://blog.metrotek.spb.ru/2010/08/11/otladka-pravil-udev/comment-page-1/#comment-5015 Fri, 13 Aug 2010 09:53:13 +0000 http://blog.metrotek.spb.ru/?p=2269#comment-5015 рад был помочь!
оч. приятно, что мои труды кому-то пригодились ;)

]]>
Автор: kurtis http://blog.metrotek.spb.ru/2010/08/11/otladka-pravil-udev/comment-page-1/#comment-5014 Thu, 12 Aug 2010 16:28:21 +0000 http://blog.metrotek.spb.ru/?p=2269#comment-5014 Спасибо!))

]]>
Автор: Павел Курочкин http://blog.metrotek.spb.ru/2010/08/11/otladka-pravil-udev/comment-page-1/#comment-5013 Thu, 12 Aug 2010 09:44:21 +0000 http://blog.metrotek.spb.ru/?p=2269#comment-5013 Да, согласен. Всё не так очевидно ;) Нужно понимать, как работает binding устройств и драйверов в ядре. Вот небольшая инструкция, которая может помочь.

У меня есть девайс arm-usb-ocd (отладчик). Подключаю его к компу по usb при запущенном udev monitore. Вот, что вижу в мониторе:


UDEV [1281595359.479667] add /devices/pci0000:00/0000:00:1d.0/usb2/usb_device/usbdev2.1 (usb_device)
UDEV [1281595359.521175] add /devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0 (usb)
UDEV [1281595359.523495] add /devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0/usb_endpoint/usbdev2.1_ep81 (usb_endpoint)
UDEV [1281595359.879303] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2 (usb)
UDEV [1281595359.896482] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/usb_endpoint/usbdev2.123_ep00 (usb_endpoint)
UDEV [1281595359.915017] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0 (usb)
UDEV [1281595359.927947] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1 (usb)
UDEV [1281595359.929630] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/usb_endpoint/usbdev2.123_ep81 (usb_endpoint)
UDEV [1281595359.932820] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/usb_endpoint/usbdev2.123_ep02 (usb_endpoint)
UDEV [1281595359.936218] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/ttyUSB0 (usb-serial)
UDEV [1281595359.942481] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/usb_endpoint/usbdev2.123_ep83 (usb_endpoint)
UDEV [1281595359.945976] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/usb_endpoint/usbdev2.123_ep04 (usb_endpoint)
UDEV [1281595359.968245] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/usb_device/usbdev2.123 (usb_device)
UDEV [1281595359.982977] add /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/ttyUSB0/tty/ttyUSB0 (tty)

Нахожу там usb_device. К пути, который приведён в выводе udev monitor’a прибавляем приставку /sys. Получается:


/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/usb_device/usbdev2.123

Этот путь — это каталог, в котором:


$ ls /sys/devices/pci0000:00/0000:00:1d.0/usb2/usb_device/usbdev2.1
dev device power subsystem uevent

device — это symlink, который в себе содержит symlink на driver, к которому он приаттачен. Нужно запомнить, куда указывает этот симлинк, поскольку после уделения устройства драйвер по описанному алгоритму найти уже невозможно ;) В каталоге этого драйвера вот что:


$ ls /sys/devices/pci0000:00/0000:00:1d.0/usb2/usb_device/usbdev2.1/device/driver/
2-2 bind module uevent unbind usb1 usb2 usb3 usb4 usb5

Так вот, чтобы отключить устройство, нужно выполнить (под root’ом)


echo -n usb2 > /sys/devices/pci0000:00/0000:00:1d.0/usb2/usb_device/usbdev2.1/device/driver/unbind

В udev monitor’e будет видно, что происходит «remove»:


UDEV [1281595305.680487] remove /devices/pci0000:00/0000:00:1d.0/usb2/usb_device/usbdev2.1 (usb_device)
UDEV [1281595305.684690] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0/usb_endpoint/usbdev2.1_ep81 (usb_endpoint)
UDEV [1281595305.687069] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/usb_endpoint/usbdev2.122_ep81 (usb_endpoint)
UDEV [1281595305.689200] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/usb_endpoint/usbdev2.122_ep02 (usb_endpoint)
UDEV [1281595305.692701] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0 (usb)
UDEV [1281595305.694901] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/usb_endpoint/usbdev2.122_ep83 (usb_endpoint)
UDEV [1281595305.697029] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/usb_endpoint/usbdev2.122_ep04 (usb_endpoint)
UDEV [1281595305.703166] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/usb_endpoint/usbdev2.122_ep00 (usb_endpoint)
UDEV [1281595305.706028] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0 (usb)
UDEV [1281595305.710336] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/usb_device/usbdev2.122 (usb_device)
UDEV [1281595305.733922] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/ttyUSB0/tty/ttyUSB0 (tty)
UDEV [1281595305.739520] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1/ttyUSB0 (usb-serial)
UDEV [1281595305.742798] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1 (usb)
UDEV [1281595305.746287] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-2 (usb)

Чтобы вернуть в систему устройство, нужно выполнить echo -n «usb2» в bind того драйвера, путь которого был сохранён (см. выше).
В моём случае:


$ echo -n usb2 > /sys/bus/usb/drivers/usb/bind

Дальше смотрим в udev monitor.
;)

]]>
Автор: kurtis http://blog.metrotek.spb.ru/2010/08/11/otladka-pravil-udev/comment-page-1/#comment-5011 Wed, 11 Aug 2010 19:34:27 +0000 http://blog.metrotek.spb.ru/?p=2269#comment-5011 Вы бы реальный пример привели, а то не совсем понятно что именно значит device_name, где его искать, и многоточие в путях вводит в уныние.
А так спасибо, если честно то не знал о программной возможности переподключить устройство.

]]>