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
zum Einstieg: linux device drivers, Hier der Link zum ebook: http://lwn.net/Kernel/LDD3/ du benötigst einen char Driver
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
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
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
@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.
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.
Was brauch ich denn, wenn ich einen Touchscreentreiber auf einem eLinux (avr32) schreiben will?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.