denmor86
Участник
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
Сообщений: 35
|
 |
« Ответ #1 : Ноября 22, 2013, 05:32:38 pm » |
|
Обнаружилась интересная особенность... Из другой программы функции open() и read() работают, ну по крайней мере дергают обработчики моего менеджера ресурсов... Появился ещё один вопрос, почему из моей программы с инициализированным драйвером и менеджером ресурсов в отдельном потоке, нет доступа к файлу менеджера? Неужели придётся драйвер выносить в отдельную программу?
|
|
|
Записан
|
|
|
|
oder
Гость
|
 |
« Ответ #2 : Ноября 22, 2013, 09:34:03 pm » |
|
1. Есть. Можно на менеджер зарегистрировать несколько файлов или целый каталог с файлами. Читайте хелп. 3. Не указан параметр инициализации, разрешающий открывать файлы из своего же процесса. Читайте хелп. 4. Если указать параметр (см.3), то не придется.
|
|
|
Записан
|
|
|
|
ed1k
|
 |
« Ответ #3 : Ноября 23, 2013, 12:00:16 am » |
|
А в чем прелесть драйвера если он не ввиде отдельной программы? Как по мне это очень разумное разделение мух от котлет.
|
|
|
Записан
|
|
|
|
denmor86
Участник
Offline
Сообщений: 35
|
 |
« Ответ #4 : Ноября 23, 2013, 08:07:51 am » |
|
Спасибо за ответы. Если не сложно скиньте ссылку на хелп. Сейчас ковыряюсь с привязкой разных файлов на разные области памяти устройства, может в хелпе найду ответы.
Прелесть оставлять драйвер в программе для удобства отладки. По окончанию отладки, драйвер будет оформлен ввиде отдельного модуля.
|
|
|
Записан
|
|
|
|
oder
Гость
|
 |
« Ответ #5 : Ноября 23, 2013, 03:22:23 pm » |
|
|
|
|
Записан
|
|
|
|
denmor86
Участник
Offline
Сообщений: 35
|
 |
« Ответ #6 : Ноября 23, 2013, 03:35:33 pm » |
|
Спасибо, буду курить мануалы...
|
|
|
Записан
|
|
|
|
T_i_m_u_r_l_a_n
Участник
Offline
Сообщений: 30
|
 |
« Ответ #7 : Апреля 22, 2015, 01:24:52 pm » |
|
Почитайте также про команду nice. С драйверами надо понимать все насчет приоритетов, учитывать приоритеты других программ, запускаемых в системе. Иначе драйвер может захватить весь ресурс и обслуживающие серверные процессы не смогут выполнить свои задачи. Также понимайте - на что нацелена работа драйвера - на прием или на выдачу. Это критично.
|
|
|
Записан
|
|
|
|
da-nie
|
 |
« Ответ #8 : Января 24, 2018, 02:56:41 pm » |
|
Что-то я не обращал никогда внимания, что в QNX если драйвер падает, то клиент застревает на операции ввода-вывода. То есть, если клиент сделал open, а затем делает read для драйвера и тут драйвер я закрыл, то клиент повисает на read. Если после этого драйвер запустить, то клиент получит ошибку. Но не раньше. Никто не знает, как это исправить и сделать, чтобы клиент сразу замечал отсутствие драйвера и не подвисал?
|
|
|
Записан
|
И день и ночь в пути
|
|
|
da-nie
|
 |
« Ответ #9 : Января 25, 2018, 08:14:52 am » |
|
 Вопрос снимаю. Это не файловые операции застревают - они как раз чётко замечают потерю файла драйвера. Это я забыл, что у меня и драйвер и программа RTC используют и при закрытии отключают прерывания от RTC. Я на прерывании застревал.
|
|
« Последнее редактирование: Января 25, 2018, 11:52:16 am от da-nie »
|
Записан
|
И день и ночь в пути
|
|
|
da-nie
|
 |
« Ответ #10 : Марта 19, 2018, 11:51:19 am » |
|
А никто не знает, как сделать, чтобы resmgr_block работала с таймаутом?
|
|
|
Записан
|
И день и ночь в пути
|
|
|
da-nie
|
 |
« Ответ #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 и смутно понимаю, что эти функции делают и в чём их различие), но работает и с той и с этой функцией, хотя аргументы у них разные. 
|
|
|
Записан
|
И день и ночь в пути
|
|
|
|