Страниц: [1]
  Печать  
Автор Тема: Драйвер QNX. Вопросы.  (Прочитано 5565 раз)
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« : Ноября 22, 2013, 04:36:54 pm »

День добрый, форумчане.
Есть несколько вопросов по драйверам, но для начала вводная информация.
Есть некое устройство на шине PCI, устройство по командам от моей программы формирует
4 выборки значений, т.е мне необходимо записывать и считывать информацию с этого устройства.
У меня в наличии есть драйвер под Linux, но заказчик настаивает на QNX.
В этом драйвере, идея взаимодействия заключалась в создании файлов ссылок
на нужные области памяти на устройстве, таким образом и было организована работа.
Теперь вопросы:
1. Есть ли возможность с помощью одного менеджера ресурсов использовать несколько файлов? Или придётся плодить несколько менеджеров?
2. Как в менеджере ресурсов правильно добавить пользовательскую функцию(например разрешение прерываний) (как её вызывать?)?
3. Почему может может не работать функция open(...), файл физически появляется, путь к нему верный, а вот open возвращает -1.

P.s сильно не пинайте, никогда драйвера раньше не писал вообще...
« Последнее редактирование: Ноября 22, 2013, 04:42:12 pm от denmor86 » Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #1 : Ноября 22, 2013, 05:32:38 pm »

Обнаружилась интересная особенность...
Из другой программы функции open() и read() работают, ну по крайней мере дергают обработчики моего менеджера ресурсов...
Появился ещё один вопрос, почему из моей программы с инициализированным драйвером и менеджером ресурсов в отдельном потоке, нет доступа к файлу менеджера? Неужели придётся драйвер выносить в отдельную программу?
Записан
oder
Гость
« Ответ #2 : Ноября 22, 2013, 09:34:03 pm »

1. Есть. Можно на менеджер зарегистрировать несколько файлов или целый каталог с файлами. Читайте хелп.
3. Не указан параметр инициализации, разрешающий открывать файлы из своего же процесса. Читайте хелп.
4. Если указать параметр (см.3), то не придется.
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #3 : Ноября 23, 2013, 12:00:16 am »

А в чем прелесть драйвера если он не ввиде отдельной программы? Как по мне это очень разумное разделение мух от котлет.
Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #4 : Ноября 23, 2013, 08:07:51 am »

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

Прелесть оставлять драйвер в программе для удобства отладки. По окончанию отладки, драйвер будет оформлен ввиде отдельного модуля.
Записан
oder
Гость
« Ответ #5 : Ноября 23, 2013, 03:22:23 pm »

http://www.qnx.com/developers/docs/6.5.0_sp1/topic/com.qnx.doc.neutrino_lib_ref/about.html?cp=13_5
http://www.qnx.com/developers/docs/6.5.0_sp1/topic/com.qnx.doc.neutrino_resmgr/about.html?cp=13_9
Записан
denmor86
Участник
*
Offline Offline

Сообщений: 35


Просмотр профиля
« Ответ #6 : Ноября 23, 2013, 03:35:33 pm »

Спасибо, буду курить мануалы...
Записан
T_i_m_u_r_l_a_n
Участник
*
Offline Offline

Сообщений: 30


Просмотр профиля
« Ответ #7 : Апреля 22, 2015, 01:24:52 pm »

Почитайте также про команду nice. С драйверами надо понимать все насчет приоритетов, учитывать приоритеты других программ, запускаемых в системе. Иначе драйвер может захватить весь ресурс и обслуживающие серверные процессы не смогут выполнить свои задачи. Также понимайте - на что нацелена работа драйвера - на прием или на выдачу. Это критично.
Записан
da-nie
Full Member
***
Offline Offline

Сообщений: 216



Просмотр профиля
« Ответ #8 : Января 24, 2018, 02:56:41 pm »

Что-то я не обращал никогда внимания, что в QNX если драйвер падает, то клиент застревает на операции ввода-вывода. То есть, если клиент сделал open, а затем делает read для драйвера и тут драйвер я закрыл, то клиент повисает на read. Если после этого драйвер запустить, то клиент получит ошибку. Но не раньше. Никто не знает, как это исправить и сделать, чтобы клиент сразу замечал отсутствие драйвера и не подвисал?
Записан

И день и ночь в пути
da-nie
Full Member
***
Offline Offline

Сообщений: 216



Просмотр профиля
« Ответ #9 : Января 25, 2018, 08:14:52 am »

 Cheesy Вопрос снимаю. Это не файловые операции застревают - они как раз чётко замечают потерю файла драйвера. Это я забыл, что у меня и драйвер и программа RTC используют и при закрытии отключают прерывания от RTC. Я на прерывании застревал.
« Последнее редактирование: Января 25, 2018, 11:52:16 am от da-nie » Записан

И день и ночь в пути
da-nie
Full Member
***
Offline Offline

Сообщений: 216



Просмотр профиля
« Ответ #10 : Марта 19, 2018, 11:51:19 am »

А никто не знает, как сделать, чтобы resmgr_block работала с таймаутом?
Записан

И день и ночь в пути
da-nie
Full Member
***
Offline Offline

Сообщений: 216



Просмотр профиля
« Ответ #11 : Марта 24, 2018, 11:59:28 am »

Переделал на

Код:
struct timespec time_out;
 time_out.tv_sec=0;
 time_out.tv_nsec=1000000;
 dispatch_timeout(dpp,&time_out);

и dispatch_block.

В чём разница с resmgr_block не знаю (и то и то для меня магия - я взял пример драйвера из help и смутно понимаю, что эти функции делают и в чём их различие), но работает и с той и с этой функцией, хотя аргументы у них разные. Cool
Записан

И день и ночь в пути
Страниц: [1]
  Печать  
 
Перейти в: