Forum: Mikrocontroller und Digitale Elektronik Embedded Linux Treiberprogrammierung


von MarekS (Gast)


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

von Berti (Gast)


Lesenswert?

zum Einstieg:

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

du benötigst einen char Driver

von MarekS (Gast)


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

von do13 (Gast)


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

von MarekS (Gast)


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

von Berti (Gast)


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.

von yalu (Gast)


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.

von Scouty (Gast)


Lesenswert?

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

von bartsch (Gast)


Lesenswert?

Eine weitere gute Anlaufstelle ist: http://kernelnewbies.org/

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.