реклама на сайте
подробности

 
 
> Передача данных в приложение user-spase по прерыванию
AlexMatyu
сообщение Oct 15 2015, 09:43
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 14-10-15
Пользователь №: 88 851



Есть плата на PCI шине. После разрешения прерывания для девайса, начинают сыпаться данные по DMA, по получению каждого пакета выставляется прерывание что данные поступили. Далее требуется передать данные(или указатель, где хранятся данные) в программу из user-spase. Вопрос в том, как сделать это правильно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
krux
сообщение Oct 15 2015, 11:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



обычно со стороны драйвера непосредственно в ISR делается только самый необходимый минимум, плюс шедулится вызов либо tasklet-а либо work queue.
что выбрать в конкретном случае - зависит от "тяжеловесности" обработки, которую нужно совершить.

для передачи больших объемов информации обычно пользуются либо bsd-сокетами, либо netlink-ом.

и примите как данность, что данные из кернелспейса в юзерспейс передаются копированием, и передать указатель вы не сможете, а если всё же передадите, то ядро срубит userspace-процесс, полезший в память, выделенную в kernelspace.
в linux это by design, для обеспечения безопасности в смысле security.
поэтому заранее оценивайте падение производительности.

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


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 20 2015, 11:58
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(krux @ Oct 15 2015, 15:01) *
обычно со стороны драйвера непосредственно в ISR делается только самый необходимый минимум, плюс шедулится вызов либо tasklet-а либо work queue.
что выбрать в конкретном случае - зависит от "тяжеловесности" обработки, которую нужно совершить.

для передачи больших объемов информации обычно пользуются либо bsd-сокетами, либо netlink-ом.

и примите как данность, что данные из кернелспейса в юзерспейс передаются копированием, и передать указатель вы не сможете, а если всё же передадите, то ядро срубит userspace-процесс, полезший в память, выделенную в kernelspace.
в linux это by design, для обеспечения безопасности в смысле security.
поэтому заранее оценивайте падение производительности.

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


Со всем согласен, но если использовать расшаренную область памяти, то можно без копирования передавать данные между кернелспейсом и юзерспейсом. Для полноты картины добавил.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016