Проблемы при вызове массовой рассылки USB внутри USB-устройства. Модуль ядра Linux. - PullRequest
2 голосов
/ 02 января 2012

У меня есть модуль ядра, в котором я имею дело с USB-устройствами.

Бывает, что я могу успешно отправить массовое сообщение USB на устройство, но эта операция выполняется при обратном вызове двоичного атрибута..

Однако есть определенная операция, которую мне нужно сделать, когда что-то происходит.Когда это произойдет, мне нужно отправить массовое сообщение на устройство.Место, в котором это происходит, является обратным вызовом дохода данных собственного устройства.Если я отправляю массовое сообщение в это место, у меня возникает паника ядра.

Может кто-нибудь сказать мне, почему?

Если это не подходящее место для такой операции, где я могу безопасно это сделать?Это?Как я могу сигнализировать операцию, которая будет сделана в другом месте?Таймер?

Пожалуйста, дайте совет относительно этой конкретной проблемы.

1 Ответ

4 голосов
/ 05 января 2012

Мне удалось решить проблему, с которой я столкнулся, с помощью следующего подхода:

  • Создал рабочую задачу
  • Поместил обработку, которая превращалась в подпрограмму рабочей задачи
  • Я планирую эту рабочую задачу каждый раз, когда у меня достаточно данных для обработки того, что мне нужно.

Я думаю, что этот подход приводит к лучшему дизайну, так как время, затрачиваемое на обработку прерывания, таким образом сокращается.

Теперь я могу спокойно вызывать usb_bulk_msg(...), поскольку я больше не нахожусь в контексте прерывания.Это была действительно проблема.

...