(embedded) linux frage

Gast #2761627
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ß
#2761661
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
Gast #2761707
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
Gast #2761724
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 :-)
#2761725
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

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