2010-02-08 6 views
50

Ich möchte lernen, wie man Gerätetreiber schreibt, weil ich denke, dass es Spaß machen würde. Ich benutze ein Mac OS X Macbook, aber ich habe auch einen Ubuntu-Rechner (läuft auf einem Mac Min). Ich bin ziemlich vertraut mit C und lese gerade this book. Ich habe einige Links online gefunden wie Mac Dev Center. Ich mache das, weil es Spaß machen würde. Ich denke, es wäre eine echte Genugtuung zu sehen, dass Hardware aufgrund von Software funktioniert, die ich geschrieben habe.Wie sollte ich mit dem Schreiben von Gerätetreibern beginnen?

Ich denke, was ich möchte, ist ein paar Tipps oder Ratschläge und Anleitung, und jemand weiß von einer Liste von Geräten, die keine Treiber haben oder kann ich einen Treiber für etwas, das bereits unterstützt wird schreiben (würde die ehemalige so bevorzugen Ich biete tatsächlich Wert). Was ist ein gutes Gerät für den Einstieg? Schneide ich mehr ab, als ich kauen kann? Ich habe keine Angst vor Low-Level-Programmierung oder Montage oder was auch immer Aufwand ist erforderlich. Ich möchte wirklich eine Herausforderung!

+1

Da Sie sowohl * OS X * als auch * Linux * erwähnt haben, für welches Betriebssystem wären diese Gerätetreiber gedacht? – jschmier

+0

Entweder ich würde OS X bevorzugen, weil das der Laptop ist, den ich benutze. –

+0

"Geräte, die keine Treiber haben ..." Ein solches Gerät wäre nicht verwendbar! Ein Gerätehersteller ** muss ** einen Treiber erstellen, oder er kann sein Produkt nicht verkaufen. Abgesehen davon gibt es einige sehr, sehr einfache Geräte. – jpaugh

Antwort

26

Für Linux, könnten Sie in das O'Reilly Linux Device Drivers Buch lesen oder PDFs online lesen. Meiner Meinung nach ist es einer der besseren Texte rund um das Thema.

The Linux Kernel Module Programming Guide ist eine weitere gute Ressource.

Sie können auch ein Buch speziell auf dem Linux-Kernel abholen. Ich nahm zu diesem Zweck eine Kopie von Robert Loves Linux Kernel Development (2nd Edition) (3rd Edition auf dem Weg).

+0

Danke! 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 jeden gefragt, der diese Frage beantwortet hat, weil ich wirklich eine Antwort möchte. Danke noch einmal! –

+1

Die Schwierigkeit und der Umfang der Arbeit hängen von der Komplexität des Geräts ab. Ein * tty * -Gerätetreiber ist möglicherweise weniger komplex als ein * usb * - oder * pci * -Gerätetreiber. – jschmier

+4

Beginnen Sie damit, zuerst ein Kernel-Modul als Treiber zu schreiben. Basic Hallo Weltprogramm. und Einfügen in Ihrem Ubuntu/Mac. Sehen Sie sich die Kernel-Logs 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 zum Hinzufügen weiterer Funktionen wie Lese- und IOCTL-Aufrufe. Schließlich können komplexere Aufrufe von Power-Management-Hooks, Ruhezustand, Herunterfahren zu implementieren. Auch wenn Sie an Embedded, Plattform-Treiber und DMA arbeiten, ist auch eine interessante Lektüre. – Anirudh

2

Für Mac können Sie einen Blick auf Mac OS X Internals buchen. Es ist überlegt und schwer, aber es macht Spaß, es zu lesen. Es handelt sich hauptsächlich um PowerPC-basierte Macs, aber es gibt einen Anhang über Intel-basierte. Für Linux werfen Sie einen Blick auf Linux Device Drivers, 3rd Edition - es ist leichter (kostenlose PDFs online :) und ist wirklich Gerätetreiber-orientiert, könnte ein besserer Start sein.

+0

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

+2

Hmm, in beiden Fällen müssen Sie wissen, was Sie tun, also müssen Sie die Umgebung verstehen, und das kommt von der Erfahrung, die Sie nicht bekommen, bis Sie es versuchen :) Arbeiten Sie durch mehrere Beispiele von LDDv3, der Quelle Der Code ist online, aber für die aktuellen Kernel etwas veraltet, Sie werden ein Gefühl dafür bekommen, worum es geht und was Sie als nächstes lernen möchten. –

4

Wenn Sie für die Linux-Gerätetreiberentwicklung gehen wollen, ist das frei verfügbare O'Reilly-Buch Linux Device Drivers, Third Edition ein Muss.

Um nicht unterstützte Hardware-Teile zu finden, für die Sie einen Treiber schreiben könnten, fragen Sie nach dem Linux mailing lists. Vielleicht ein USB 3.0 Gerät? ;)

+0

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? –

17

Schreiben eines Gerätetreibers kann ziemlich einfach sein, oder es kann fast beliebig kompliziert sein. Zum Beispiel war ich an einem Projekt beteiligt, bei dem wir sechs von fast drei Jahren brauchten, um einen Fehler in einem Gerätetreiber zu lösen. Natürlich haben wir Dutzende andere Fehler beseitigt, während wir danach gesucht haben ... der Code hat sich enorm verbessert. Der Fix erwies sich als ein Patch mit acht Zeilen, der konservativ ungefähr eine Million Dollar kostete.

Aber als Nebenprojekt schrieb ich in einer Woche einen Ethernet-Treiber aus dem Chip-Datenblatt, und es dauerte eine weitere Woche, um es zu debuggen. Ich brauchte es seither nicht mehr zu berühren.

Es gibt keine Möglichkeit, allgemein zu sagen, wie viel Arbeit ein Treiber sein wird; Ein GPU-Treiber könnte Hunderte von Millionen kosten, ein Treiber für eine einzelne LED kostet höchstens ein paar Stunden Arbeit.

+5

Können Sie weitere Details teilen. Würde lieben, den Patch zu verstehen und warum es so schwer war zu debuggen. Welche Geräteklasse war der Treiber? – Anirudh

Verwandte Themen