Я хотел знать, как работает обработка прерываний с момента прерывания любого устройства. Я знаю обработку прерываний по частям и хотел бы иметь четкую сквозную картину обработки прерываний. Позвольте мне рассказать то немногое, что я знаю об обработке прерываний. .
Предположим, что устройство FPGA прерывается через электрические линии и получает некоторые данные. Драйвер устройства для этого устройства FPGA уже имеет код (обработчик прерывания), зарегистрированный с помощью функции request_irq.
Итак, теперь у устройства FPGA есть линия IRQ, которую оно получает после вызова request_irq, с помощью этого устройства линии IRQ отправляет данные в контроллер общих прерываний, а GIC будет выполнять много преобразований в одну линию IRQ и отправлять сигнал в ядро ЦП, которое затем вызывает ниже минимальный код
IRQ_handler
SUB lr, lr, #4 ; modify LR
SRSFD #0x12! ; store SPSR and LR to IRQ mode stack
PUSH {r0-r3, r12} ; store AAPCS registers on to the IRQ mode stack
BL IRQ_handler_to_specific_device
POP {r0-r3, r12} ; restore registers
RFEFD sp! ; and return from the exception using pre-modified LR
IRQ_handler_to_specific_device - это не то, что мы зарегистрировали в драйвере устройства с помощью вызова request_irq ().
Я до сих пор не понимаю, как ядро процессора узнает об источнике прерывания? (От какого устройства исходит прерывание)
И какова роль вызова, такого как do_irq и общие прерывания?
Нужна помощь в понимании сквозной картины обработки прерываний в архитектуре ARM?