Предположим, pci-драйвер для linux-kernel. Это устройство может иметь несколько каналов, которые могут быть «повышены» или «понижены» по отдельности.
Каждое «вверх» вызывает функцию .ndo_open
, а каждое «вниз» вызывает .ndo_stop
.
Для этого устройства требуется только одна линия прерывания, которую можно запросить с помощью request_irq ()
. Каждый запрос создаст одну строку прерывания.
Здесь важно отметить, что строки прерываний редки и не должны создаваться бездумно.
Мой вопрос к этой ситуации, где я должен использовать request_irq()
?
На мой взгляд, у меня есть два возможных решения для этого.
- Прямо в
probe()
. Это создаст только одну линию прерывания, но она всегда будет создаваться при включении компьютера. Так что это может быть не использовано.
- В
.ndo_open
. Это создаст линию прерывания только тогда, когда это необходимо, но многоканальное устройство может создавать множественные вызовы .ndo_open
, что приведет к множественным вызовам request_irq()
Мне не удалось найти какую-либо информацию об этой ситуации в документации по ядру. Если для этого есть какое-то руководство, не могли бы вы объяснить / показать его мне? Я также проверил другие pci-драйверы из git-repo , но ни у одного (или, по крайней мере, у тех, которые я проверял) не было этой проблемы.