Hi, ich beschäftige mich seit einer weile hobbymäßig mit elektronik/ AVR 8-bit programmierung. Linux erfahrung im pc bereich ist auch ansatzweise vorhanden. Meine frage: ohne os kann ich auf die einzelnen hardwarebestandteile meines µC einfach direkt per register zugreifen. wie geht sowas wenn ein linux kernel zwischen µC und benutzer liegt? wie komme ich dann an beispielsweise den ADC oder SPI oder ganz banal wie gebe ich ein signal auf einem pin aus? existieren jeweils treiber/kernel für jeden einzelnen µC die funktionen anbieten die sowas ermöglichen? neben einer generellen erklärung würde auch ein einfaches beispiel "pin an aus" weiter helfen. das dürfte doch für alle µCs gleich aussehen, da die hardware unterschiede durch den kernel ausgebügelt werden, oder? gruß
frank schrieb: > neben einer generellen erklärung würde auch ein einfaches beispiel "pin > an aus" weiter helfen. Da sehe ich spontan mehrere Möglichkeiten. (A) Such mal nach GPIO-Lib. (B) Kann man auch über ein selbst geschriebenes Kernel-Modul machen. Da hat man die Möglichkeit auf Registern rumzuhacken. (C) Über "/dev/mem" kommt man auch an Register. (D) Es gibt auch LED-Unterstützung im Kernel mit netten Blinkfunktionen. > wie > komme ich dann an beispielsweise den ADC oder SPI oder ganz banal wie > gebe ich ein signal auf einem pin aus? Im Grunde gibt es für solche Sachen in der Regel Treiber im Kernel. Gruß Oliver
frank schrieb: > wie > komme ich dann an beispielsweise den ADC oder SPI guck dir mal HAL (Hardware Abstraction Layer) an, da wird einiges verwurschtelt. Ansonsten : Kernel-Treiber.
jaaaa. das buch/ die bücher von o'reilly bzgl. linux hab ich mir schon seit längerem vorgenommen :/ die faulheit >_< (C) Über "/dev/mem" kommt man auch an Register. was vermutlich nicht im einklang mit kompatibler programmierung steht. gilt alles was ihr hier schreibt auch 1zu1 für linux auf x86/x64 systemen? soll heißen /dev/mem erlaubt mir freien zugriff auf sämtliche prozessor register? O_O ich werde mich mal durch eure links arbeiten. ty für die hilfe
Bin zwar auch kein Spezialist für Embedded Linux, aber imho hängt der Zugriff auf die Hardware auch ziemlich vom verwendeten Controller ab. Angenommen, du hättest ein Linux auf einem Atmel laufen (ja, es gibt keinen Port, aber ein Workaround, tut hier aber nichts zur Sache): Da der Atmel nur einen Speicherbereich kennt kannst du wahrscheinlich direkt auf die Register zugreifen (über deren Adressen). Das OS hat ja keine Möglichkeit, dir das zu verbieten. Auf größeren Controllern mit verschiedenen Speicherbereichen schauts anders aus. Da wirst du die Schnittstellen benutzen müssen, die dir Linux zur Verfügung stellt. Also zB ein Device File, Kernelmodul etc. Alles natürlich ohne Gewähr :-)
bei elinux sind die meisten sachen wie SPI, I2C oder GPIO als "dateien" unter /sys/class angelegt. dort kannst über consolenbefehle z.B cut oder echo. werte reinschreiben z.b. bei einem MINI2440 eval board kannst mit #!/bin/sh echo 0 > /sys/class/leds/led1/brightness echo $1 > /sys/class/leds/led1/brightness leds an und ausschalten
frank schrieb: > soll heißen /dev/mem erlaubt mir freien zugriff auf sämtliche prozessor > register? O_O Nein das soll nur heißen, dass man damit memory-mapped Register befeuern kann, denn CPU-Register sind nicht im Addressraum anzufinden. Gruß Oliver
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.