ответ

5

Что происходит после request_irq()?

Драйвер устройства регистрирует обработчик прерываний и позволяет заданную линию прерывания для обработки путем вызова request_irq().

потоки вызовов: -

  1. request_irq() -> setup_irq(), чтобы зарегистрировать STRUCT irqaction.
  2. setup_irq() -> start_irq_thread() для создания потока ядра для обслуживания строки прерывания.

Работа потока реализована в do_irqd(). Только один поток может быть создан для каждой строки прерывания, а общие прерывания по-прежнему обрабатываются одним потоком.

через request_irq() использовать ISR (обработчик прерываний) передается start_irq_thread(). start_irq_thread() создать поток ядра, который вызывает ваш ISR.

Как особый обработчик получает вызов при получении прерывания?

При возникновении прерывания контроллер ПИК передает информацию о прерывании в CPU.

Устройство отправляет микросхему PIC прерывание, а PIC сообщает CPU о возникновении прерывания (прямо или косвенно). Когда ЦП подтверждает сигнал «прерывание», микросхема ПИК отправляет номер прерывания (между 00h и FFh, или 0 и 255 десятичными) в CPU. этот номер прерывания используется индекс таблицы векторов прерываний.

Процессор обычно отображает каждый тип прерывания на соответствующий указатель в нижней памяти. Набор указателей для всех типов прерываний является вектором прерывания. Каждый указатель в векторе указывает на ISR для соответствующего типа прерывания (строка IRQ). "Вектор прерывания является только ОДНОМ адресом памяти одного обработчика прерываний. Таблица векторов прерываний представляет собой группу из нескольких адресов памяти."

для дальнейшего чтения http://wiki.osdev.org/Interrupts

+1

Четкий и лаконичный ответ, спасибо – achoora

Смежные вопросы