Я просто просматриваю нижеприведенную ветку, в которой говорится, что заголовки ядра не хотят предоставлять irq модулям.
Доступ к массиву описания IRQ в модуле и отображение действия имена
но я не уверен, почему это так?
Кроме того, я вижу некоторые драйверы, которые не используют прерывания. Значит ли это, что эти устройства не управляются прерываниями?
Один из таких драйверов предназначен для датчиков lm73 linux/drivers/hwmon/lm73.c, который в основном привязан к шине i2c и снова является модулем.
Итак, как же все это происходит, как устройство решает не работать с прерываниями?
Ответ 1 · рейтинг 1 · artless noise
В модуле можно использовать IRQ номеров. Вопрос имеет две концепции; один из них - Описание IRQ, которое ядро Linux использует для управления прерываниями.
Сам номер IRQ используется в любом модуле с request_threaded_irq() и выполняет аналогичные функции. Обычно драйверу передается номер IRQ либо через platform_data, либо через дерево устройств.
Вы не можете использовать описания IRQ в модуле (и я не знаю, почему вам это нужно). Точнее, преобразование номера IRQ в описание IRQ в модуле не допускается. Обычно описание представляет собой просто большой массив, индексированный по номеру IRQ, поэтому irq_to_desc() в некоторых случаях является макросом и никогда не экспортируется.