(embedded) linux frage

Gast #2761627
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.