Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенос Win WDM драйвера на Linux…  (Прочитано 22520 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
sabbatazh
Помогающий

ua
Offline Offline

« : 15-07-2012 09:55 » 


Здравствуйте Уважаемые Знатоки!
Кто-то занимался безболезненным переносом драйвера из  под Win на Linux???
Я просто не знаю с чего начать … как осуществить поставленную задачу? С чего начать, только путного?!
Есть драйвер WDM PCI, соответственно под Win… как его перекрутить под Linux???
Спасибо!
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 15-07-2012 11:16 » 

начинать, наверное, с разработки интерфейса между драйвером и приложениями... особенно если требуется поддержать хоть какое то подобие работы.

все что я слышал о линуксе, это то что там вроде для обмена есть ioctl и read|write. мельком читал какую то статью по написанию драйвера под линукс, но задача отпала, чему я был несказанно рад, честно говоря.
думаю основная проблема будет не в поиске "аналогов" функций win (там они все должны быть) а в попытке разделить код драйвера на OC-зависимую часть, и независимую. в идеале - первого должно быть мало, а второго - много)

опять же, если стоит не разовая задача, а с дальнейшей поддержкой кросплатформенного проекта..

PS может быть при разработке интерфейса, стоит обратить внимание на права пользователей... я, например, на ioctl в винде основывал, потом наткнулся на грабли доступа.
« Последнее редактирование: 15-07-2012 11:19 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 15-07-2012 11:44 » 

Все, что могу предложить: почитать Linux Device Drivers.

read, write, ioctl - эти системные вызовы применимы только к файлам, но не к самим драйверам. Например, драйвер регистрирует в системе файл устройства - есть такая категория файлов в среде Unix вообще, не только Linux. Они идентифицируются тремя компонентами: числами uint8 - major и minor, и типом (символьное или блочное устройство). Через такой файл можно общаться с драйвером через стандартные системные вызовы, применимые к файлам. Специфичное общение организуют через ioctl.

Есть и другие механизмы общения с драйверами из user space. Например, создание файлов в "/proc" (procfs).

Ochkarik, права на файл разве имеют отношение к драйверу? Это уровень файловой системы.


Ну и нужно помнить, что kernel space драйвер критичен к ошибкам и может завалить всю систему.
« Последнее редактирование: 15-07-2012 11:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #3 : 15-07-2012 19:09 » 

Ochkarik, RXL, Спосибо!
Вот теперь как у разбитого корыта… читало про создание файлов в "/proc" и обмен данными через них… а разобрался с ioctl по винду… и то не полностью… и драйвер под винду использует технологию обмена ioctl…
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 15-07-2012 21:54 » 

RXL, ну.. в винде когда создается объект устройства... доступ к нему из User - теми же API функциями что и к фалу: Create/Read/Write. и для специфических операций - IOCTL) и для взаимодействия между драйверами - Internal IOCTL.
но чтобы приложение могло обращаться к созданному объекту через IOCTL - ему повыше права нужны.
в драйвер эти запросы доходят в виде IRP с разными IRP_MJ_XXX кодами.
насколько я понимаю в Linux - идея та же?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 16-07-2012 04:14 » 

В Линуксе разделение прав I/O и ioctl не делается. Файл открыть удалось - значит удастся выполнить и другие операции на этом дескрипторе. Правда, есть такая супернавороченная штука - SELinux: управление доступом вплоть до системного вызова, номера TCP порта или конкретной операции на конкретном файле, но этим пользоваться очень сложно и зачастую SElinux административно отключают.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #6 : 16-07-2012 05:29 » 

в драйвер эти запросы доходят в виде IRP с разными IRP_MJ_XXX кодами.
насколько я понимаю в Linux - идея та же?
В Linux нет IRP, просто можно зарегистрировать свой обработчик ioctl(), и если будет вызван системный вызов ioctl() с дескриптором файла, относящегося к драйверу - будет вызвана функция этого драйвера. Аналогично и другие функции.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 16-07-2012 09:08 » 

я имел в виду не IRP а набор функций для общения с драйвером со стороны приложения)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #8 : 16-07-2012 09:15 » 

я имел в виду не IRP а набор функций для общения с драйвером со стороны приложения)
такое - есть, но так практически в любой системе. Просто, насколько я знаю, в win - можно хоть одну функцию написать - у всех функций прототип один и тот-же - указатель на объект устройства и указатель на пакет IRP, а в linux - свои прототипы для функций чтения/записи, свои для открытия/закрытия и свои для ioctl()
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 16-07-2012 09:22 » 

то что свои обработчики - не принципиально) принципиально - привести оба интерфейса к общему знаменателю, чтоб не тянуть два, одинаковых по сути, но разошедшихся по реализации проекта, под обе ОС.
один интерфейс со стороны приложения, второй со стороны HAL ОС.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #10 : 18-07-2012 15:43 » new

Так Ребята, Вы меня запутали!)
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 19-07-2012 07:43 » 

да неее... короче, что Windows что Linux - все едино по большому счету)))
начинай писать - оно само все перенесется)))
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #12 : 19-07-2012 07:49 » 

sabbatazh, для того, чтобы портировать драйвер с Windows на Linux надо более-менее представлять как оно устроено и там и там, и, при наличии соответствующих знаний и опыта, попытаться выделить часть, независящую от окружения (например протокол работы с устройством), чтобы сделать её максимально общей, а уже обвязку (например пользовательский интерфейс с драйвером и функции работы с портами) делать зависящую от ОС.
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #13 : 06-08-2012 06:19 » 

Любой системный модуль под Linux, регистрирующий свои обработчики read/write/ioctl, становится доступен через данный интрефейс.
Кроме того, имеются procFS и VirtualFS, являющийеся kernel mode layers, облегчающие и стандартизирующие работу system modules и
user applications. Рекомендую почитать что нибудь на эту тему Сержа Яковлева (в поисковик забивать латиницей). Сам пользовался его
выкладками. но пока это не "покопаешь" в течении полугода, ничего ясно не будет.
Записан
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #14 : 28-11-2012 08:11 » 

Ochkarik, oleshii, darkelf, Спасибо! разбираюсь... (не мог раньше ответить - болел...((( )
может подскажите среду разработки подобную Visual Studio + DDK + VisualDDK, или может подобие VisualDDK встречалось...
Спасибо!
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 28-11-2012 17:21 » 

sabbatazh, Под Linux? (Если да, то зачем тут DDK?)
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #16 : 28-11-2012 19:29 » 

Finch, я имел в виду в какой среде лучше разрабатывать модули; отлавливать сообщения, ошибки модуля; дебаггер и т.п.... 
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 28-11-2012 19:54 » 

под какую ОС?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
oleshii
Участник

ru
Offline Offline

« Ответ #18 : 29-11-2012 04:52 » 

sabbatazh,
Под Linux при наличии 2 хостов и соединительного "шланга" (COM or USB) можно использовать gdb для отадки,
KDE или CodeBlocks for development. Для "выброса" сообщений из модуля, "поднятого" на post-boot-stages
существует функция printk (Print Kernel) Прототип ее - как у обычной printf. Для early-boot-stages существует earlyprintk с ОБЯЗАТЕЛЬНЫМ
redirect output в tty№ in the kernel start command line. А вообще то еще "папа" Линус Торвальдс говаривал (c кавказским акцентом):
"Дядя sabbatazh, debugger - не нужен !" Вот линк на сайт Сержа Яковлева: http://www.iakovlev.org/
Записан
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #19 : 29-11-2012 08:33 » 

Ochkarik, Linux....
oleshii, )))) Спасибо!))) со "шлангом" работал - а ля терминал...
Ребята, Огромное Спасибо, за истолкование!!!! Лед тронулся!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines