Hardware IO unter Linux und C

(Firma: S.) #1998692
Lesenswert?

Hi Community,

seid ein paar Wochen beschäftige ich mich mit der Programmierung von 
eingebetteten systemen und Mikrokontrollern. Ich besitze ein 
AT91SAM9RL-EK und habe schon einige bare-metal Programme (LEDs 
ansteuern, Interrupts durch Taster am Board auslösen) in C geschrieben 
und auf dem board laufen gehabt.

Nun läuft auf meinem Board als OS ein Linux 2.6.3 buildroot.
Wie kann ich denn nun meine LEDs wieder ansprechen oder auf Hardware 
Interrupts (Taster) reagieren?
Gast #1998778
Lesenswert?

Cloud Strife schrieb:
> Hi Community,
>
> seid ein paar Wochen beschäftige ich mich mit der Programmierung von
> eingebetteten systemen und Mikrokontrollern. Ich besitze ein
> AT91SAM9RL-EK und habe schon einige bare-metal Programme (LEDs
> ansteuern, Interrupts durch Taster am Board auslösen) in C geschrieben
> und auf dem board laufen gehabt.
>
schön dann hast du ja fast alles was du brauchts ;-)

> Nun läuft auf meinem Board als OS ein Linux 2.6.3 buildroot.
> Wie kann ich denn nun meine LEDs wieder ansprechen oder auf Hardware
> Interrupts (Taster) reagieren?

Hi,
du hast wirklich einen 2.6.3 Kernel am laufen ?

gib mal bitte auf der cmdline das folgende Kommando ein
1
 cat /proc/version

wenn das system mit 2.6.3 antwortet würde ich dir dringend ans herz 
legen dein linux als zu alt zu betrachten und mich nach was neueren 
umsehen
denn der Kernel 2.6.3 würde irgendwann 2004 bis 2005 fertig gestellt, 
ist also ganz gut abgehangen und dort hilfe zu bekommen ist echt nicht 
einfach.

was deine Fragen angeht. Die LEDs solltest du recht einfach ansteueren 
können. Finde heraus an welchen GPIOS sie hängen. dann kannst du mit
1
 echo <NR> > /sys/class/gpio/export

Die GPIOS zum export freigeben. dann musst du die entsprechenden GPIOS 
mit
1
echo out > /sys/class/gpio/gpio<NR>/direction

auf Ausgang stellen und mit Schalten.
1
echo 1 > /sys/class/gpio/gpio<NR>/value
2
echo 0 > /sys/class/gpio/gpio<NR>/value

Alternativ kannst du auch einen LED treiber für deine LEDS Schalten. Der 
Taster macht dir schon mehr probleme weil der einen Interrupt auslöst 
kannst du diesen leider nicht im Userspace direckt abfragen. Das ist der 
Nachteil an Linux auf ein embedded System. Hier wirst du wohl eine 
Treiber schreiben müssen welcher den Taster betreut. Dieser Stellt dann 
über denn input layer ein Event zur Verfügung welches von deinen 
Programm wahrgenommen wird.

Ich würde denn Taster einfach einen gültigen Tastertur code liefern 
lassen wenn er gedrückt wird kann kannst du mit allen Funktionen wie 
getc() und Co in dein Programm auf denn Taster warten und must dir keine 
gedanken machen wie der taster zu interpretieren ist. Ausserdem ist ein 
So geschriebenes Programm leicht zu Protieren und kann am PC getestet 
werden.
Das ist der Vorteil von Linux auf ein Embedded System.
(Firma: S.) #1999034
Lesenswert?

hi und danke für die Antwort,

also zu cat /proc/version :
Linux version 2.6.30 ... (gcc version 4.4.4 (Buildroot 2010.05) ) #1 Wed 
Dec 15 06:31:32 EST 2010

zu den LEDS
das Verzeichnis mit den Leds habe ich gefunden
/sys/class/leds
und über die von dir beschriebenen befehle die leds ein/aus geschaltet

zu den Taster / Interrupts
da ich ja ein buildroot von Atmel mit einer Konfiguration für mein board 
verwende könnte es sein das evtl auch schon ein treiber für die Taster 
mitinstalliert wurde, wie kann ich das denn prüfen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren