Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модуль ядра для USB, Что посоветуете посмотреть поп модулям 
:(
    Опции темы
DrHex
Дата 27.10.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Написал драйвер для Windows для работы с USB устройством, теперь будет портация на Linux.
Где и что можно почитать(посмотреть исходинки) для создание модуля ядра???

Очень интересует AIO операции для обращания к модулю ядра. Так же резистрация и поиск устройств(inf файлы для windows а как для Linux???) 

Переход в режим сна.....
--------------------
google.com и это все.
PM MAIL   Вверх
niXman
Дата 27.10.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 1
Всего: 0



Цитата(DrHex @  27.10.2009,  14:24 Найти цитируемый пост)
(inf файлы для windows а как для Linux???)

Где-то в /etc положи файл конфигурации.
Цитата(DrHex @  27.10.2009,  14:24 Найти цитируемый пост)
Где и что можно почитать(посмотреть исходинки) для создание модуля ядра???

http://www.google.ru/#hl=ru&source=hp&...e4313e544833b95
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
MAKCim
Дата 27.10.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін д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'ами связываются файловые операции-обработчики, которые вызываются при выполнении операций ввода-вывода с соответствующими файловыми дескриптором
мы устанавливаем эти обработчики и тем самым реализуем нужное поведение


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
niXman
Дата 27.10.2009, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 1
Всего: 0



Цитата(MAKCim @  27.10.2009,  19:40 Найти цитируемый пост)
3. теперь по операциям ввода-вывода
обычно взаимодействие user <-> kernel происходит посредством /proc файлов, устройств в /dev и объектов kobject в /sys
при регистрации устройства в /dev, создании файла в /proc или kobject'а в /sys с их inode'ами связываются файловые операции-обработчики, которые вызываются при выполнении операций ввода-вывода с соответствующими файловыми дескриптором
мы устанавливаем эти обработчики и тем самым реализуем нужное поведение 

Огого smile 
Это стандартный принцип?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
MAKCim
Дата 27.10.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



рекомендуемый
примеры: /dev/ppp, /dev/net/tun, /dev/kvm


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
niXman
Дата 28.10.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 1
Всего: 0



MAKCim, Так а если мне просто нужно чтоб моя программа могла общаться с неким USB девайсом, я же просто могу написать модуль ядра, или использовать libusb.

Выше, то все относится к "настоящему" драйверу?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
DrHex
Дата 28.10.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



MAKCim  спасибо за регистрацию модуля...

Вот только вопрос как сделать асинхронный ioctl на модуль ядра?? (в идеале кросс платформленый может boost(write/read точно есть))

В винде я делал DeviceIoControl(SomeParam, SomeParam, SomeParam, SomeParam, SomeParam, SomeParam, SomeParam , Ovellaped)

А вот в Ovellaped хранился callback как это сделатль в Линуксе???(Или такого в Линуксе нет??? Я не знаток в *nix, но хоть использую это слово...)

--------------------
google.com и это все.
PM MAIL   Вверх
MAKCim
Дата 28.10.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін д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()/... работает с ним


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
niXman
Дата 28.10.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: 1
Всего: 0



MAKCim, Понял. Спасибо.
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
DrHex
Дата 28.10.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Цитата

тебе грубо говоря нельзя блокироваться на ioctl()?
тогда тупо сделай очередь в девайсе, куда через ioctl() будут класться сообщения
создай процесс ядра, который будет при наличии необработанных сообщений в очереди их обрабатывать
т. е. алгоритм такой: юзер вызывает ioctl(), данные помещаются в очередь, осуществляется вызов try_to_wake_up() для процесса ядра

Идея такая была вот только обращений в 100 милисекунд может быть 1000(В винде добился в 15 милисекунд 1000 запросов).... и конец асинхронных ответов (1000 ответов) около 63 милисекунд. Но вот когда була очередь то скорость отправки и приема (асинхронного конечно)
выходила около 250 милисек.(Начальника ругаться начинал.... )) )


Цитата

libusb работает с файлами устройств /dev/usbdev*
грубо говоря когда устройство подключается к USB шине, для него ищется драйвер
драйвер проводит инициализацию устройства и его регистрацию в иерархии объектов kobject ядра
при регистрации генерируется KOBJECT_ADD событие и соответствующее ему сообщение с описаним общих и специфичных параметров регистрируемого устройства
демон udev через netlink сокет получает пакет с этим сообщением и через вызов mknod() создает файл устройства в /dev
(major и minor номера беоет из данных полученного пакета)
libusb находит нужное устройство в /dev и через обычные файловые операции ioctl()/read()/write()/... работает с ним 

А извезщению модулю приходят?? Если да то какие???

--------------------
google.com и это все.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0771 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.