Ich möchte einen Linux-Gerätetreiber für ein echtes Hardwaregerät schreiben. Welche Raspberry Pi-Peripheriegeräte passen gut? Grundsätzlich brauche ich folgendes:
Es muss klein genug für einen Anfänger sein (höchstens einige Monate, besser einige Wochen).
Datenblatt muss vorhanden sein. Zuerst habe ich über USB-Ethernet-Adapter nachgedacht, aber es sieht so aus, als hätte es ein sehr begrenztes Datenblatt.
Irgendwelche Ideen? Ist es vielleicht so, dass die serielle Konsole über GPIO funktioniert?
Antworten:
Es kann schwierig sein, das Schreiben von Treibern zu erlernen, wenn eine Schnittstelle zu komplizierten Geräten und / oder komplizierten Bussen besteht. Aus diesem Grund würde ich empfehlen, entweder einige einfache und bekannte Geräte zu verwenden (wobei die vorhandene Implementierung ihrer Treiber im Kernel ignoriert wird), wie I²C / SPI-Geräte, die normalerweise mit Mikrocontrollern verwendet werden. Zum Beispiel könnten Sie jedes Gerät finden, das von der Arduino-Community "unterstützt" wird (dh, es gibt eine Bibliothek / Dokumentation dafür) und versuchen, es mit RaspberryPi zu verwenden.
Wenn das nicht ausreicht oder Sie nicht zu viel Hardware kaufen möchten, können Sie eine selbst erstellen. Besorgen Sie sich einfach einen Mikrocontroller (wie atmega oder so), erstellen Sie ein Programm, um ein Gerät daraus zu machen, und versuchen Sie dann, mit Linux-Treibern eine Verbindung herzustellen. Auf diese Weise können Sie problemlos Programme erstellen, die verschiedene Geräteklassen emulieren. Und da Sie Ihre "Firmware" selbst schreiben, hilft sie Ihnen beim Debuggen von Problemen.
Sie benötigen einige Programmierkenntnisse für Mikrocontroller, aber es ist nicht schwer, das Programmieren mit Arduino zu erlernen, und ich glaube, es ist sowieso ein nützliches Wissen für Treiberprogrammierer.
quelle
BCM2835 ARM Peripherals
Dokument enthalten sind. Denken Sie jedoch daran, dass Sie zuerst den vorhandenen Treiber im Kernel deaktivieren müssen, um ihn verwenden zu können.Persönlich würde ich mit einem sehr einfachen Gerät beginnen, wie einer oder mehreren LEDs, die direkt an GPIO-Pins angeschlossen sind.
Sie können entweder ein anschlussfertiges Gerät kaufen oder ein eigenes verkabeln.
Der Grund, warum ich dies vorschlagen würde, ist, dass das Debuggen von Treibern im Allgemeinen viel schwieriger ist als ein normales Programm. Daher ist eine einfache Aufforderung zum Starten nützlich. Sie können diesen Code auch als Debugging - Methode für komplexere Geräte verwenden (Status out to) einen GPIO-Pin zum Anschließen an ein Oszilloskop), bei dem das Timing wichtig ist.
Wenn es von Interesse ist, dass hier ein Kernel-Treiber für LedBorg verfügbar ist , sollte die Quelle ein relativ einfaches Beispiel für die regelmäßige Ansteuerung von GPIO-Pins sein.
quelle
Das einfachste "Gerät", für das Sie einen Hardwaretreiber schreiben können (wenn Sie sich für die Entwicklung von Hardwaretreibern interessieren), kann auch so einfach wie eine LED sein (ich habe die Anführungszeichen hinzugefügt, weil eine LED technisch gesehen kein Gerät ist, aber immer noch ein Teil davon Hardware), wie @PiBorg vorgeschlagen hat.
Andere Möglichkeiten wären einfach zu bedienende Geräte / Komponenten wie Fotowiderstände, passive Infrarotsensoren (kurz: PIR), Temperatursensoren und PC-Lüfter (vorzugsweise ein 4-Draht-Lüfter, mit dem Sie nicht nur überwachen, sondern auch steuern können RPM), LED-Punktmatrizen und so weiter. Grundsätzlich ermöglichen solche einfachen Geräte, dass Sie das Minimum an Hardware haben (damit Sie sehen und anfassen können, was Sie tatsächlich erreicht haben) und gleichzeitig eine Menge Themen kennenlernen, die für viel komplexere Geräte verwendet werden Die Komplexität ergibt sich hauptsächlich aus dem verwendeten Protokoll.
Denken Sie auch daran, dass Sie nicht extra in die Kernelmodule graben müssen. Wenn du das willst, hält dich natürlich niemand auf. :)
Hier ist ein Beispiel für die Anbindung eines passiven Infrarotsensors (ich werde es bald testen, wenn mein PIR geliefert wird: 3). Sie können dies nehmen und tiefer in die Welt des Linux-Kernels eintauchen, um zu sehen, wie Sie beispielsweise einen Kerneltreiber erstellen können, der mit dem PIR funktioniert.
quelle