связь между контроллером прерывания нет и прерывания нет в ядре Linux - PullRequest
0 голосов
/ 06 марта 2019

Я разрабатываю наш собственный модуль ядра CAN в процессоре i.mx6. Теперь мы хотим написать ISR для CAN TX и RX. Мы можем написать ISR, но мой вопрос заключается в том, чтобы зарегистрировать мой ISR с помощью функции request_irq , что я должен дать. Какая связь между прерыванием no, указанным в спецификации контроллера, и irq no в вышеуказанной функции.

Спасибо заранее, NSN

1 Ответ

0 голосов
/ 08 марта 2019

Речь идет о встроенном FlexCAN или это подключенный извне CAN-контроллер, такой как MCP2515? В ядре уже есть драйвер FlexCAN. Для встроенных периферийных устройств IRQ уже определены в Техническом справочном руководстве. Для iMX6D / Q смотрите Главу 3 Прерывания и события DMA. Прерывания указываются в дереве устройств и извлекаются с использованием request_irq. Для контроллера CAN, скажем, подключенного через SPI, в качестве прерывания можно использовать GPIO, и прерывание будет указано в дереве устройств с использованием свойств «interrupt-parent» и «interrupts».

Для точного отношения рассмотрим пример. Узел CAN1 здесь со свойством «interrupts», имеющим номер 110. Если вы посмотрите на Раздел 3 TRM, предполагается, что FlexCAN1 имеет номер IRQ 142. Поскольку доменные номера ARM Cortex A9 начать с 32, просто вычтите это из 142, чтобы получить число 110.

Редактировать: Кажется, я не совсем ясно и говорил из дерева устройств POV. Номер IRQ для request_irq должен был поступить из вызова platform_get_irq, который возвращает номера Linux IRQ. Также см. это .

...