На протяжении последних 2 недель я занимался решением вопроса, почему при загрузке системы не создается правильная структура в каталоге /dev/bus/usb
Ранее подобной проблемой мне уже пришлось заниматься
http://forum.puppyrus.org/index.php/topic,13331.0.html но там дело касалось только работы libusb. Было добавлено пару строк в правила udev занимающееся формированием структуры для libudev, это решило проблему, но устройства стали добавляться как /dev/bus/usb/1/1 хотя по идее нужно /dev/bus/usb/001/001
Кроме этого было замечено что в /dev/bus/usb создаются только устройства вновь подключаемые устройства, без самих корневых родителей, незнаю как точнее написать, вобщем мало было в /dev/bus/usb каталогов. Причиной этого как мне кажется является два факта: ядро перестало само делать usbfs, соответственно из init данные в /dev не перемонтируются (раньше делалось переподключение), udev не знает о ранее определнных usb устройствах т.к. запускается позже.
Решение:
В правиле 60-udev-default.rules
# libusb device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="", IMPORT{program}="usb_id --export %p"
ACTION=="add", SUBSYSTEM=="usb", ATTR{devnum}=="?*", ATTR{busnum}=="?*", PROGRAM="/bin/sh -c 'printf bus/usb/%%03i/%%03i $attr{busnum} $attr{devnum}'", NAME="%c", MODE="0644"
SUBSYSTEM=="usb", ATTR{devnum}=="?*", ATTR{busnum}=="?*", NAME="bus/usb/$attr{busnum}/$attr{devnum}", MODE="0644"
для правильного присвоения номеров оставляем только:
# libusb device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
Для определения ранее обнаруженных устройств нужно в rc.sysinit задать команду:
udevadm trigger --subsystem-match=usb
Спасибо Ddshurick за предоставленные данные по проблеме и наводку насчет использования udevadm trigger