LINUX.ORG.RU

определить в embedded устройстве подключение/отключение по USB


0

1

Всем привет.

Есть примерно следующая проблемка, интересно мнение зала на рещения: собирается одна плата с USB хостом и слотом для SD карточки. Нужно - в программе получить сигнал, что то или иное устройство подключили/отключили и соответственно среагировать: примонтировать, переписать и т.д. Ща школьники крикнут:«udev!». Но udev слишком большой и не подходит. В busybox есть mdev. Но mdev только создает nodes в /dev.
Захотел сделать примерно следующее: в /etc/mdev.conf вписать правило, которое в известный мне файл записывает что-то известное при подключении и отключении устройства. К примеру, когда устройство подключается, появляется:

+ mmcblk0

а когда отключается, то соответственно:

- mmcblk0

Моя программа могла бы по select() присматривать за файлом.

Но фишка в том, что правило mdev, вызывается только для первой строки:


mmc.* root:1 0660 @(echo «+ $MDEV» >> /home/test)
mmc.* root:1 0660 $(echo "- $MDEV" >> /home/test)


Т.е. когда подключу устройство, то вижу в файле «+ mmcblk0», когда отключу, то ничего нового не появляется. Если поменять в правиле строки местами, то появляется строка при отключении устройства, но не при подключении.

Kто-то уже разбирался с mdev? В чем могут быть грабли?
Еще интересуют альтернативные пути. Как еще можно решить проблемку без mdev? В голову приходить только слушать uevents от Кернела по его Netlink сокету


Всем спасибо


Может какой-то косяк в парсинге правил? Попробуй команду без скобок, просто шелл скрипт вроде @/opt/add.sh и $/opt/remove.sh

blind_oracle ★★★★★
()

Немного ты всторону ушёл. Гугли про /proc/sys/kernel/hotplug

Как еще можно решить проблемку без mdev? В голову приходить только слушать uevents от Кернела по его Netlink сокету

Именно так и делает mdev.

gnu-eabi
()
Ответ на: комментарий от gnu-eabi

Именно так и делает mdev

Не, не, дружище, ты всё перепутал. Так делает udev. Причём в той части, которая ответственна за hotplug (т.е. для тех устройств, которые подключаются когда udev уже запущен). Есть у него ещё coldplug часть. Она тупо проходит всю sysfs в поиске чего же подключилось до старта.

Гугли про /proc/sys/kernel/hotplug

Это старый механизм, который ещё поддерживается в 2.6.х. При подключении/отключении устройства вызывается программа прописанная в /proc/sys/kernel/hotplug. Как раз так и работает mdev. Тока он глючит чего-то.

Я тут написал примитивную программку, которая слушает Netlink от ядра. Получаю, что надо. Т.е. hotplug я уже могу сделать и как в udev

velikS
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.