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

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

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

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

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

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

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


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


Ответы (1)


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

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

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

person artless noise    schedule 13.03.2014
comment
Спасибо @artlessnoise и только что прочитал ответ. У меня есть сомнения, я видел, что в большинстве модулей в моей среде используется request_threaded_irq() вместо request_irq(). Это какая-то конкретная причина для того же? - person Amit Singh Tomar; 15.03.2014
comment
Просто request_threaded_irq() — это более новая версия, позволяющая быстро выполнить первую часть, за которой следует вторая «потоковая» часть. Исходный request_irq() просто передает NULL для потока. - person artless noise; 17.03.2014