Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Вновь подключенное usb-устройство


Автор: _GRIN_ 28.2.2009, 18:49
Приветствую.
Необходимо при подключении usb-флэшки автоматически её примонтировать и (сразу же) после примонтирования писать на неё определённые данные.
Вопрос - есть ли в Линукс-е какие-либо системные уведомления о вновь подключенных устройствах и если есть, то как их можно перехватить. Если нет (уведомлений), то как можно получить данную информацию (на вскидку в голову приходи переодичский монторинг директории /dev)?

Заранее благодарен smile.

Автор: nickless 28.2.2009, 19:58
Что это за программа, нужно ли ей работать со старыми версиями ядра, на встроенных девайсах, только в консоли или под иксами?

Новыми девайсами обычно занимается http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html, он создаёт файл в /dev, может примонтировать, послать сообщение итд (если написать соответствующее правило).
В оконных менеджерах вроде гнома или кде есть свой демон, который мониторит что надо. Можно посмотреть как они это делают или (если программа с ГУИ) воспользоваться их API.

Автор: _GRIN_ 28.2.2009, 21:51
nickless, 
Цитата

Что это за программа, нужно ли ей работать со старыми версиями ядра, на встроенных девайсах, только в консоли или под иксами?

программа - демон (серсис) - работает в консоли, старые версии ядра не нужны (под 2.6. и  выше).
спасибо за наводку на udev smile - ща буду изучать (для начала найду исходники smile ).

Автор: MAKCim 1.3.2009, 11:34
Цитата(_GRIN_ @  28.2.2009,  21:51 Найти цитируемый пост)
ща буду изучать (для начала найду исходники

суть в том, что udev демон читает uevent'ы (через AF_NETLINK сокет), генерируемые на объектах ядра kobject
любое устройство в linux представлено базовым объектом struct device, которое агрегирует объект struct kobject
подключение устройства к USB шине порождает создание объекта device и регистрацию его в объектной иерархии ядра (экспортируется через sysfs) через соответствующий объект kobject
инициализируя kobject, http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/lib/kobject_uevent.c#L268 и http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/lib/kobject_uevent.c#L228, присоединенным к соответствующей группе (по-моему 0) в рамках протокола NETLINK_KOBJECT_UEVENT домена
udev тупо читает пакет и соотносит его содержимое со своими правилами

Автор: _GRIN_ 2.3.2009, 01:10
MAKCim, спасибо, честно сказать - я на линукс в декабре пересел (т.е. всего ничего, так что и знаний пока маловато).
Буду курить сорцы udev (как в своё время  top, free) там по ходу дела наверняка вопросы возникнут smile...

Автор: GrayCardinal 2.3.2009, 10:04
_GRIN_, 
Не парь себе мозги. Заюзай inotify на /dev, тебе сразу и свистнут что девайс появился... 
inotify_init(2)

Автор: MAKCim 2.3.2009, 11:39
Цитата(GrayCardinal @  2.3.2009,  10:04 Найти цитируемый пост)
Не парь себе мозги. Заюзай inotify на /dev, тебе сразу и свистнут что девайс появился... 

знаешь чем плох сей способ?  smile 

Автор: GrayCardinal 2.3.2009, 16:58
MAKCim, 
Нет. Чем ?  smile 

Автор: MAKCim 3.3.2009, 14:27
Цитата(GrayCardinal @  2.3.2009,  16:58 Найти цитируемый пост)
Нет. Чем ? 

тем, что он зависит от конфигурации udev и его наличия

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)