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?
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.
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?
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.