Forum: PC-Programmierung Hardware IO unter Linux und C


von Cloud S. (Firma: S.) (gobliins)


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?

von Imon (Gast)


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.

von Cloud S. (Firma: S.) (gobliins)


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?

von vlad (Gast)


Lesenswert?

Cloud Strife schrieb:
> Linux version 2.6.30 ... (gcc version 4.4.4 (Buildroot 2010.05) ) #1 Wed

das sind aber 27 mehr als 3 ;)

von Cloud S. (Firma: S.) (gobliins)


Lesenswert?

vlad schrieb:
> Cloud Strife schrieb:
>> Linux version 2.6.30 ... (gcc version 4.4.4 (Buildroot 2010.05) ) #1 Wed
>
> das sind aber 27 mehr als 3 ;)

ups stimmt natürlich. Vor lauter lauter...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.