Forum: Mikrocontroller und Digitale Elektronik (embedded) linux frage


von frank (Gast)


Lesenswert?

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ß

von Oliver J. (skriptkiddy)


Lesenswert?

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

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

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.

von sw1ft (Gast)


Lesenswert?


von frank (Gast)


Lesenswert?

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

von Rudi (Gast)


Lesenswert?

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 :-)

von Thomas B. (briddl)


Lesenswert?

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

von Oliver J. (skriptkiddy)


Lesenswert?

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
Noch kein Account? Hier anmelden.