mboost-dp1

Embedded Linux, fra fysisk interaktion til registreret tryk! how?


Gå til bund
Gravatar #1 - Qw_freak
21. jul. 2012 14:21
Hey, jeg troede jeg viste det, men åbenbart ikke godt nok.

Er der nogen der kan forklare i form af trin hvordan et tryk på en knap siddende på en gpio bliver til en besked i consollen...

det er noget med at trykket genererer en irq som trigger en printk, men hvor er det den irq samles op og fortolkes?
Gravatar #2 - hundeboll
21. jul. 2012 20:08
#1 Qw_freak:

One word: "Linux Device Drivers".

Den bog svarer på nærmest alle dine spørgsmål...
Gravatar #3 - Qw_freak
21. jul. 2012 20:16
hundeboll (2) skrev:
#1 Qw_freak:

One word: "Linux Device Drivers".

Den bog svarer på nærmest alle dine spørgsmål...


Ved jeg godt, har den, men håbede nogen der vidste det kunne opridse grund trindene for hvordan det gøres...

Gravatar #4 - Mnc
22. jul. 2012 07:31
hundeboll (2) skrev:
One word: "Linux Device Drivers".


Du skal da vist tilbage til børnehaveklassen og lege med matematik igen. :D
Gravatar #5 - hundeboll
22. jul. 2012 11:14
Qw_freak (3) skrev:
Ved jeg godt, har den, men håbede nogen der vidste det kunne opridse grund trindene for hvordan det gøres...

Det vil jeg skam også gerne, men dit spørgsmål er så bredt, at man skulle skrive et helt kapitel for at svare fyldestgørende...

I korte træk:
IRQ'et har et nummer.
Driveren registrerer en interrupt-handler til det nummer.
Kernen får et interrupt.
Kernen kigger efter registrerede handlers til det nummer.
Kernen kalder _flere_ handlers indtil en af dem "consumer" interruptet.
Handleren printer med printk.
Gravatar #6 - kasperd
22. jul. 2012 14:21
Qw_freak (1) skrev:
Er der nogen der kan forklare i form af trin hvordan et tryk på en knap siddende på en gpio bliver til en besked i consollen...

det er noget med at trykket genererer en irq som trigger en printk, men hvor er det den irq samles op og fortolkes?
Så vidt jeg ved er det ikke normalt for en GPIO enhed at generere interrupts. Rent teknisk kan det selvfølgelig lade sig gøre, men jeg tror bare det kræver en lidt mere avanceret GPIO enhed. Så allerførst synes jeg du skal checke dit datasheet for at finde ud af om GPIO enheden overhovedet understøtter interrupts.

hundeboll (5) skrev:
Kernen kalder _flere_ handlers indtil en af dem "consumer" interruptet.
Jep, det bliver straks interessant hvis ingen af handlerne er interesseret i det interrupt. Det er vist den situation der resulterer i beskeder i kerneloggen om spurious interrupt. Hvis det sker flere gange i træk er kernen nødt til at afbryde interruptet for at undgå en interrupt storm som lægger hele systemet ned. Så vil ingen af driverne modtage interrupts.

Det var vist lidt af et sidespor, men det er godt nok at vide, hvis man selv skal i gang med at skrive handlers, specielt hvis man skal skrive handlers til delte interrupts.
Gravatar #7 - Qw_freak
22. jul. 2012 17:43
hundeboll (5) skrev:
Det vil jeg skam også gerne, men dit spørgsmål er så bredt, at man skulle skrive et helt kapitel for at svare fyldestgørende...

I korte træk:
IRQ'et har et nummer.
Driveren registrerer en interrupt-handler til det nummer.
Kernen får et interrupt.
Kernen kigger efter registrerede handlers til det nummer.
Kernen kalder _flere_ handlers indtil en af dem "consumer" interruptet.
Handleren printer med printk.

Tak, lige præcis det jeg manglede... :)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login