не получить cntl к приложению - PullRequest
0 голосов
/ 29 сентября 2010

Я программист драйвера устройства Linux.

Недавно я пишу драйвер для оборудования анализатора.

Это оборудование анализатора будет непрерывно считывать данные с шины.

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

Я использую преобразование адресов dma для хранения данных.

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

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

Моему приложению не удалось получить cntl для получения данных от драйвера.

Обработчик прерываний не дал cntlсторона приложения.Bcoz непрерывных не останавливая прерывание.

Что я могу сделать?Пожалуйста, помогите мне.

Спасибо Сундар

Ответы [ 2 ]

0 голосов
/ 11 мая 2011

Используйте NAPI-подобный метод - когда вы получаете прерывание, которое уведомляет вас о существующих данных, вы:

  1. Отключить прерывание Rx.
  2. Запуск / пробуждение потока / рабочей очереди ядра, чтобы начать сбор данных с устройства. Продолжайте делать это, пока вы не соберете все данные в кольцевом буфере. Удостоверьтесь, что вы даете время от времени запускать приложение (например, спать в течение X мс каждые 1000 пакетов).
  3. Только после того, как вы закончите сбор всех входящих данных, убейте / уложите в спящий поток ядра / рабочую очередь и повторно включите прерывания Rx.
0 голосов
/ 30 сентября 2010

Похоже, вам нужно выяснить, как ускорить ваш обработчик прерываний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...