Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Почему заголовки ядра не хотят предоставлять прерывания модулям?

Автор вопроса: Amit Singh TomarОтветов: 1

Я просто просматриваю нижеприведенную ветку, в которой говорится, что заголовки ядра не хотят предоставлять irq модулям.

Доступ к массиву описания IRQ в модуле и отображение действия имена

но я не уверен, почему это так?

Кроме того, я вижу некоторые драйверы, которые не используют прерывания. Значит ли это, что эти устройства не управляются прерываниями?

Один из таких драйверов предназначен для датчиков lm73 linux/drivers/hwmon/lm73.c, который в основном привязан к шине i2c и снова является модулем.

Итак, как же все это происходит, как устройство решает не работать с прерываниями?

  • lm73 просто подключается поверх подсистемы i2c, а драйвер i2c (существует множество различных вариантов), скорее всего, управляется прерываниями. nos 13.03.2014
  • @nos Но устройство также должно каким-то образом прерывать свою шину. Разве это не так? Amit Singh Tomar 13.03.2014
  • Возможно. Это зависит от подсистемы. Если вы пишете модуль, который находится поверх слоя i2c, вы бы предпочли вызывать функции, определенные на уровне i2c. И, при необходимости, этот уровень позаботится о передаче шины независимо от того, нуждается ли она в прерывании или нет. Таким образом, вы не привязаны к какому-либо конкретному чипу i2c. Это относится к модулю lm73, это драйвер для датчика на удаленном конце шины i2c, ему не нужно знать, как работает локальный конец шины i2c, пока он может отправлять сообщения на другой конец. nos 13.03.2014
  • Спасибо @nos за ценные комментарии. Было бы очень полезно, если бы вы могли добавить его в качестве ответа и графического представления на lm73, например, драйверы взаимодействуют с шиной i2c с удаленного конца. Amit Singh Tomar 13.03.2014
  • хорошо @nos, не проблема. Amit Singh Tomar 13.03.2014
  • возможный дубликат Доступ к массиву описания IRQ в модуле и отображение названий действий artless noise 14.03.2014

clinux-kernellinux-device-driver

Ответы

Ответ 1 · рейтинг 1 · artless noise

В модуле можно использовать IRQ номеров. Вопрос имеет две концепции; один из них - Описание IRQ, которое ядро ​​Linux использует для управления прерываниями.

Сам номер IRQ используется в любом модуле с request_threaded_irq() и выполняет аналогичные функции. Обычно драйверу передается номер IRQ либо через platform_data, либо через дерево устройств.

Вы не можете использовать описания IRQ в модуле (и я не знаю, почему вам это нужно). Точнее, преобразование номера IRQ в описание IRQ в модуле не допускается. Обычно описание представляет собой просто большой массив, индексированный по номеру IRQ, поэтому irq_to_desc() в некоторых случаях является макросом и никогда не экспортируется.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы