Wie sollte ich mit dem Schreiben von Gerätetreibern beginnen? [closed]

Lesezeit: 5 Minuten

Ich würde gerne lernen, wie man Gerätetreiber schreibt, weil ich denke, dass es Spaß machen würde. Ich verwende ein Mac OS X Macbook, aber ich habe auch eine Ubuntu-Maschine (die auf einem Mac Min läuft). Ich bin ziemlich vertraut mit C und lese gerade dieses Buch. Ich habe einige Links online gefunden, wie z Mac Dev Center. Ich mache das, weil es Spaß machen würde. Ich denke, es wäre eine echte Genugtuung, Hardware aufgrund von Software, die ich geschrieben habe, funktionieren zu sehen.

Ich denke, ich hätte gerne ein paar Tipps oder Ratschläge und Anleitungen, und kennt jemand eine Liste von Geräten, die keine Treiber haben, oder kann ich einen Treiber für etwas schreiben, das bereits unterstützt wird (wäre ersteres vorzuziehen, also bin ich eigentlich Wert schaffen). Was ist ein gutes Gerät für den Einstieg? Beiße ich mehr ab, als ich kauen kann? Ich habe keine Angst vor Low-Level-Programmierung oder Assemblierung oder was auch immer für Aufwand erforderlich ist. Ich hätte wirklich gerne eine Herausforderung!

  • Da du beides erwähnt hast OSX und Linuxfür welches Betriebssystem wären diese Gerätetreiber?

    – jschmier

    8. Februar 2010 um 15:52 Uhr

  • In jedem Fall würde ich OS X bevorzugen, da ich diesen Laptop verwende.

    – Björn

    8. Februar 2010 um 16:03 Uhr

  • “Geräte, die keine Treiber haben …” Ein solches Gerät wäre nicht verwendbar! Ein Gerätehersteller hat um einen Treiber zu erstellen, sonst können sie ihr Produkt nicht verkaufen. Allerdings gibt es da draußen einige sehr, sehr einfache Geräte.

    – jpaugh

    19. Januar 2018 um 22:50 Uhr


  • eudyptula-challenge.org und github.com/agelastic/eudyptula (Liesmich hat die Aufgaben, nicht gleich die Lösungen anschauen 😉 )

    – sjas

    22. April 2018 um 13:18 Uhr

  • @jpaugh “In vielen Fällen wird ein Gerät gemäß einem veröffentlichten Hardwarestandard entworfen. Das bedeutet, dass der Treiber von Microsoft geschrieben werden kann und der Gerätedesigner keinen Treiber bereitstellen muss.” von docs.miscrosoft.com

    – Elisha Habinsky

    6. September 2020 um 2:56 Uhr

Benutzeravatar von jschmier
jschmier

Für Linux können Sie sich das Buch oder die Lektüre von O’Reilly Linux Device Drivers zulegen PDFs online. Meiner Meinung nach einer der besseren Texte zu diesem Thema.

Das Linux-Kernel-Modul-Programmierhandbuch ist eine weitere gute Ressource.

Vielleicht möchten Sie auch ein Buch speziell zum Linux-Kernel lesen. Ich habe mir zu diesem Zweck eine Kopie von Robert Loves Linux Kernel Development (2. Auflage) besorgt (3. Auflage ist unterwegs).

  • Vielen Dank! Wie viel Arbeit ist es, einen Gerätetreiber zu schreiben? Ist es mehr oder weniger Arbeit, als eine große, komplexe Anwendung zu schreiben? Ich habe alle gefragt, die diese Frage beantwortet haben, weil ich wirklich eine Antwort haben möchte. Danke noch einmal!

    – Björn

    8. Februar 2010 um 16:34 Uhr

  • Die Schwierigkeit und der Arbeitsaufwand hängen von der Komplexität des Geräts ab. EIN tty Gerätetreiber kann viel weniger komplex sein als a USB oder PCI Gerätetreiber.

    – jschmier

    8. Februar 2010 um 16:54 Uhr

  • Beginnen Sie damit, zuerst ein Kernel-Modul als Treiber zu schreiben. Grundlegendes Hallo-Welt-Programm. und Einfügen in Ihr Ubuntu/Mac. Sehen Sie sich die Kernel-Protokolle an und verstehen Sie, was passiert. Versuchen Sie dann, einen Dummy-Treiber auf einem Bus wie (PCI oder USB) zu registrieren, und gehen Sie dann dazu über, weitere Funktionen wie Lese-Schreib- und IOCTL-Aufrufe hinzuzufügen. Schließlich können komplexere Aufrufe von Power-Management-Hooks, Sleep, Shutdown zur Implementierung übergehen. Auch wenn Sie an eingebetteten Plattformtreibern und DMA-Dosen arbeiten, ist dies eine interessante Lektüre.

    – Anirudh

    7. September 2015 um 6:56 Uhr

Das Schreiben eines Gerätetreibers kann ziemlich einfach oder fast beliebig kompliziert sein. Ich war zum Beispiel an einem Projekt beteiligt, bei dem sechs von uns fast drei Jahre gebraucht haben, um EINEN Fehler in einem Gerätetreiber zu lösen. Natürlich haben wir Dutzende anderer Fehler behoben, während wir danach gesucht haben … der Code hat sich enorm verbessert. Es stellte sich heraus, dass es sich bei der Lösung um einen achtzeiligen Patch handelte, der vorsichtig ungefähr eine Million Dollar kostete.

Aber als Nebenprojekt dazu habe ich in einer Woche einen Ethernet-Treiber aus dem Chip-Datenblatt geschrieben und eine weitere Woche gebraucht, um ihn zu debuggen. Seitdem musste ich es nicht mehr anfassen.

Es lässt sich nicht pauschal sagen, wie viel Arbeit ein Fahrer machen wird; ein GPU-Treiber kann Hunderte von Millionen kosten, ein Treiber für eine einzelne LED kostet höchstens ein paar Stunden Arbeit.

  • Kannst du ein paar mehr Details teilen. Würde gerne den Patch verstehen und warum das Debuggen so schwierig war. Welche Geräteklasse war der Treiber von ?

    – Anirudh

    7. September 2015 um 6:52 Uhr

Wenn Sie sich für die Entwicklung von Linux-Gerätetreibern entscheiden möchten, empfiehlt sich das frei verfügbare O’Reilly-Buch Linux-Gerätetreiber, dritte Ausgabe ist ein Muss.

Um nicht unterstützte Hardwareteile zu finden, für die Sie einen Treiber schreiben könnten, fragen Sie auf der Linux-Mailinglisten. Vielleicht ein USB 3.0-Gerät? 😉

  • Vielen Dank! Wie viel Arbeit ist es, einen Gerätetreiber zu schreiben? Ist es mehr oder weniger Arbeit, als eine große, komplexe Anwendung zu schreiben?

    – Björn

    8. Februar 2010 um 16:33 Uhr

Benutzeravatar von Nikolai Fetissov
Nikolai Fetissov

Für Mac möchten Sie vielleicht einen Blick darauf werfen Mac OS X Interna Buchen. Es ist nachdenklich und schwer, aber es macht Spaß zu lesen. Es geht hauptsächlich um PowerPC-basierte Macs, hat aber einen Anhang über Intel-basierte Macs. Für Linux werfen Sie einen Blick auf Linux-Gerätetreiber, 3. Ausgabe – Es ist leichter (kostenlose PDFs online 🙂 und ist wirklich gerätetreiberorientiert, könnte ein besserer Anfang sein.

1419010cookie-checkWie sollte ich mit dem Schreiben von Gerätetreibern beginnen? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy