Разница между request_irq и __interrupt

#c #linux #kernel #interrupt #irq

#c #linux #ядро #прерывание #irq

Вопрос:

Из того, что я прочитал, оба используются для регистрации обработчиков прерываний. Я видел множество request_irq вызовов в коде ядра, но ни одного __interrupt вызова. Есть __interrupt какой-нибудь способ зарегистрировать обработчик из пользовательского пространства?

Ответ №1:

request_irq по сути, это вызов-оболочка для request_threaded_irq , который выделяет ресурсы IRQ и включает IRQ. Это перефразировано из блока комментариев в kernel/irq/manage.c , строке # 1239.

В принципе, вы хотите использовать request_irq , если вам нужно настроить обработку прерываний для какого-либо устройства. Убедитесь, что любая подсистема, в которой вы работаете, также не предоставляет оболочку для request_irq любой подсистемы. Т.е., если вы работаете над драйвером устройства, рассмотрите возможность использования devm_* семейства вызовов для автоматического управления деталями, такими как освобождение неиспользуемых переменных и тому подобное. Смотрите devm_request_threaded_irq в строке #29 в kernel/irq/devres.c для лучшего объяснения. Его эквивалентный вызов (и тот, который вы, скорее всего, использовали бы) devm_request_irq .

Ответ №2:

Насколько я помню, __interrupt() используется для объявления функции как ISR в пользовательском пространстве. Я не уверен, откуда у меня это, но я вернусь к вам, как только найду нужное место.