2013-01-17 9 views
5

Dla wspólnej linii przerwań, mogę mieć kilka obsługi przerwań. Jądro będzie kolejno wywoływać wszystkie programy obsługi dla tej konkretnej linii wspólnej. O ile wiem, każdy program obsługi po wywołaniu informuje jądro, czy był to właściwy handler do wywołania, czy nie.Dla wspólnej linii przerwań, w jaki sposób znaleźć obsługi przerwania do użycia?

Moje pytanie brzmi: w jaki sposób jest to określone, czy istnieje sposób, w jaki sprawdza on rejestr odwzorowany w pamięci, który informuje o stanie określonego urządzenia lub czy jest jakiś inny mechanizm sprzętowy? W jaki sposób przewodnik wie, że odpowiednie urządzenie wydało przerwanie, czy nie?

Czy ta informacja jest przekazywana przez kontroler przerwań pomiędzy urządzeniami a linią przerwań procesora?

+0

http://unix.stackexchange.com/questions/47306/how-does-the-linux-kernel-handle-shared-irqs –

Odpowiedz

3

Jądro będzie kolejno wywoływać wszystkie procedury obsługi dla konkretnej linii wspólnej.

Dokładnie. Powiedz, że Dev1 i Dev2 dzielą się z IRQ10. Po wygenerowaniu przerwania ISR zarejestrowane w tym wierszu będą wywoływane jeden po drugim.

W naszym scnario powiedzmy, że Dev2 generuje przerwanie. Jeśli ISR ​​Dev1 jest zarejestrowany jako pierwszy, to ISR jest tylko pierwszy. W tym ISR rejestr statusu przerwań zostanie zweryfikowany pod kątem przerwania. Jeśli nie zostanie ustawiony żaden bit przerwań, możemy potwierdzić, że przerwanie nie jest Dew2. więc następny ISR (tj. Dev1's ISR) zostanie wywołany.

Aby uzyskać więcej informacji, zobacz wartości zwracane IRQ_NONE/IRQ_HANDLED.

W jaki sposób przewodnik wie, że odpowiednie urządzenie wysłało przerwanie, czy nie?

Odczytywanie rejestru stanu przerywającego.

Czy ta informacja jest przekazywana przez kontroler przerwań między urządzeniami a linią przerwań procesora?

Nie jestem tego pewien. System operacyjny zajmie się jednak wywoływaniem ISR w oparciu o wartości zwracane z ISR.

+0

Hi Jeyram, jeśli dev1 i dev2 są tego samego typu urządzenia, ale inna urządzenia (na przykład dev1 to zwykła mysz, powiedzmy, że dev2 to mysz do gier). Następnie może znać typ urządzenia, ale w jaki sposób program obsługi przerwań dla dev1 potwierdzi, że nie jest prawidłowym programem obsługi w swojej wartości zwracanej? – Rohit

+0

'ten sam typ urządzenia' ... u oznacza ten sam sterownik dla obu urządzeń ??? – Jeyaram

+0

zwraca wartość ISR używaną przez system operacyjny. Nie ISR następnego urządzenia. Na podstawie tylko wartości zwracanej, system operacyjny decyduje, czy wywołać, czy nie wywołać następnego ISR zarejestrowanego dla tej linii IRQ. – Jeyaram

Powiązane problemy