![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Написал драйвер для Windows для работы с USB устройством, теперь будет портация на Linux.
Где и что можно почитать(посмотреть исходинки) для создание модуля ядра??? Очень интересует AIO операции для обращания к модулю ядра. Так же резистрация и поиск устройств(inf файлы для windows а как для Linux???) Переход в режим сна..... --------------------
google.com и это все. |
|||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
Где-то в /etc положи файл конфигурации.
http://www.google.ru/#hl=ru&source=hp&...e4313e544833b95 --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
DrHex
1. почитать это 2. что касается регистрации устройств в linux реестра в принципе нет, поэтому нигде в общем то регистрировать ничего не надо модули могут загружаться вручную (через insmod/modprobe), ядром (тогда через MODULE_ALIAS должен быть определен псевдоним модуля, используюший некоторые уникальные атрибуты типа minor/major номера регистрируемого в нем устройства) после компиляции модуля стОит выполнить depmod для создания дерева зависимостей, чтобы при загрузке модуля через modpobe последний выполнил загрузку всех модулей, от которых зависит загружаемый 3. теперь по операциям ввода-вывода обычно взаимодействие user <-> kernel происходит посредством /proc файлов, устройств в /dev и объектов kobject в /sys при регистрации устройства в /dev, создании файла в /proc или kobject'а в /sys с их inode'ами связываются файловые операции-обработчики, которые вызываются при выполнении операций ввода-вывода с соответствующими файловыми дескриптором мы устанавливаем эти обработчики и тем самым реализуем нужное поведение -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
Огого ![]() Это стандартный принцип? --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
рекомендуемый
примеры: /dev/ppp, /dev/net/tun, /dev/kvm -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
MAKCim, Так а если мне просто нужно чтоб моя программа могла общаться с неким USB девайсом, я же просто могу написать модуль ядра, или использовать libusb.
Выше, то все относится к "настоящему" драйверу? --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
MAKCim спасибо за регистрацию модуля...
Вот только вопрос как сделать асинхронный ioctl на модуль ядра?? (в идеале кросс платформленый может boost(write/read точно есть)) В винде я делал DeviceIoControl(SomeParam, SomeParam, SomeParam, SomeParam, SomeParam, SomeParam, SomeParam , Ovellaped) А вот в Ovellaped хранился callback как это сделатль в Линуксе???(Или такого в Линуксе нет??? Я не знаток в *nix, но хоть использую это слово...) --------------------
google.com и это все. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
DrHex
тебе грубо говоря нельзя блокироваться на ioctl()? тогда тупо сделай очередь в девайсе, куда через ioctl() будут класться сообщения создай процесс ядра, который будет при наличии необработанных сообщений в очереди их обрабатывать т. е. алгоритм такой: юзер вызывает ioctl(), данные помещаются в очередь, осуществляется вызов try_to_wake_up() для процесса ядра Добавлено через 5 минут и 36 секунд niXman libusb работает с файлами устройств /dev/usbdev* грубо говоря когда устройство подключается к USB шине, для него ищется драйвер драйвер проводит инициализацию устройства и его регистрацию в иерархии объектов kobject ядра при регистрации генерируется KOBJECT_ADD событие и соответствующее ему сообщение с описаним общих и специфичных параметров регистрируемого устройства демон udev через netlink сокет получает пакет с этим сообщением и через вызов mknod() создает файл устройства в /dev (major и minor номера беоет из данных полученного пакета) libusb находит нужное устройство в /dev и через обычные файловые операции ioctl()/read()/write()/... работает с ним -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 1 Всего: 0 |
MAKCim, Понял. Спасибо.
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
DrHex |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Идея такая была вот только обращений в 100 милисекунд может быть 1000(В винде добился в 15 милисекунд 1000 запросов).... и конец асинхронных ответов (1000 ответов) около 63 милисекунд. Но вот когда була очередь то скорость отправки и приема (асинхронного конечно) выходила около 250 милисек.(Начальника ругаться начинал.... )) )
А извезщению модулю приходят?? Если да то какие??? --------------------
google.com и это все. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |