mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Embedded Linux Treiberprogrammierung


Autor: MarekS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein COBRA5485 Board der Firma Sentec, auf dem Linux läuft.
Nun würde ich gerne die auf dem Board befindlichen GPIO's ansprechen.
Leider gibt es dafür keine Treiber.

Hat jemand schon mal einen Linux Treiber für ein EmbeddedSystem 
geschrieben?

Ich finde keinen Einstieg, schön wäre es wenn ich das Datenblatt eines 
µC hätte und die dortigen Register sich im SourceCode des Treibers 
wieder spiegeln könnten.

Ich bin für jede Hilfe dankbar

Gruß

Marek

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zum Einstieg:

linux device drivers, Hier der Link zum ebook: 
http://lwn.net/Kernel/LDD3/

du benötigst einen char Driver

Autor: MarekS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Berti,

vielen Dank für den Link.
Hast du Erfahrungen in dem Bereich, wenn ja würde ich gerne mit dir in
mail kontakt tretten.


Gruß und Danke nochmals

Marek

Autor: do13 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Buch "linux device drivers" ist auf jeden Fall gut.
Beispiele für registerzugriffe findest du in den Kernelsourcen.
Unter drivers/char zumindest den Uart Treiber.
Damit kannst du dann einen einfachen Treiber nachbauen.

Dirk

Autor: MarekS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

mein Problem ist dass folgende.
Ich habe den ColdFire MCF5485 (auf dem Cobra5485) nun habe ich es 
geschaft auf das System Linux zu installieren(was nicht besonders schwer 
war) ich habe es auch geschaft eine Client-Server kommunikation via TCP 
zu realisieren.
Aber mir fehlt so ziemlich jeder bezug zu linux, ich arbeite mich 
langsam in die Systematik ein. Wenn ich nun ein expliziertes 
Beispielprojekt hätte, wo ein Treiber erzeugt wird und anschließend aus 
dem Hauptprogramm aufgerufen wird würde mir das sehr helfen.

Gruß

Marek

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@MarekS: Ich bin auch gerade am einarbeiten, habe allerdings im Zuge 
meiner Ausbildung in diese thematik schnuppern können. Ich hoffe das 
nächste Woche mein Board (Atmel 32Bit Prozessor) kommt, aber das Buch 
zuerst lesen kann ja mal nicht schaden.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast drei Möglichkeiten, die Aufgabe anzugehen:

Du schreibst

1. einen Kernel-Device-Treiber,

2. einen Userspace-Device-Treiber oder

3. gar keinen Device-Treiber.


Kernel-Device-Treiber
=====================

Möchtest du die Aufgabe mit einem Device-Treiber lösen, solltest du
dir von den bestehenden Treibern einen aussuchen, der eine dem GPIO
ähnliche Hardware ansteuert. Diese Hardware könnte bspw. eine
Digital-I/O-Karte bzw. der darauf befindliche PIO-Chip sein. Auf einem
normalen PC würde sich auch der Parallelport (parport-Device)
anbieten. Ich weiß nicht genau, was der Coldfire-Kernel da anbietet,
aber da ist sicher etwas passendes darunter.

Wenn du einen geeigneten Mustertreiber gefunden hast, solltest du in
sehr kleinen Schritten vorgehen und die Zwischenlösungen immer wieder
testen.

Das erste Ziel ist es, eine Kopie des Originaltreibers mit neuem Namen
überhaupt kompiliert zu bekommen. Wie das geht und wie die Makefiles
aufgebaut sein müssen, steht u.a. in o.g. Buch.

Der nächste Schritt ist es, den Treiber als Modul fehler- und
crashfrei laden zu können.

Im dritten Schritt kannst du dann die Zugriffe auf I/O-Adressen
innerhalb des Treibers für deine Belange modifizieren. An der Struktur
des Treiber solltest du nach Möglichkeit nichts ändern, da das mehr
Ahnung erfordert.

Bei normaler Softwareentwicklung stellt printf die wichtigste
Debug-Hilfe dar. Bei der Kernel-/Treiberprogrammierung heißt das
Pendant printk. Die Ausgaben gehen nicht direkt auf den Bildschirm,
können aber mit dem Befehl dmesg abgerufen werden.

Wenn du so vorgehst, brauchst du das Buch nicht unbedingt durchzule-
sen. Du nutzt es allenfalls als Nachschlagewerk für Detailinforma-
tionen. Dieses Nachschlagewerk kann aber auch Google heißen.


Userspace-Device-Treiber
========================

Um einem Userspace-Treiber zu schreiben, muss man wahrscheinlich
weniger Ahnung als für einen Kernel-Treiber haben, und die Gefahr,
durch die Frickelei ständig das System zu crashen, ist nicht so groß.
Das Konzept ist aber wohl noch ziemlich neu, und ich weiß nicht genau,
inwieweit es durch die aktuellen Kernels schon unterstützt wird. Am
besten liest du dir folgendes durch:

  http://lwn.net/Articles/232575


Kein Device-Treiber
===================

Vielleicht brauchst du aber auch gar keinen Device-Treiber. Wenn es
nur darum geht, ein paar I/O-Register zu beschreiben und zu lesen und
du keine Interruptbehandlung brauchst, kannst du das auch aus dem
Userspace tun.

Falls dein System keine MMU verwendet und damit keinen Speicherschutz
hat, geht das direkt über C-Pointer. Falls eine MMU verwendet wird,
kannst du über bestimmte Systemfunktionen, deren Namen ich gerade
nicht im Kopf habe, bestimmte Adressbereiche für Lese- und Schreibzu-
griffe vorher freischalten lassen. Dazu muss die Anwendung natürlich
mit Root-Rechten laufen oder sich zumindest für die Freischaltaufrufe
kurzzeitig per setuid() Root-Rechte verschaffen.

Autor: Scouty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was brauch ich denn, wenn ich einen Touchscreentreiber auf einem eLinux 
(avr32) schreiben will?

Autor: bartsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine weitere gute Anlaufstelle ist: http://kernelnewbies.org/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.