2. Versuch - Display-Treiber

Aufgabe

Ziel dieses Versuches ist es, den Display-Controller des Sharp ARM9 Prozessors (LH7A404) so zu programmieren, dass das angeschlossene Display sinnvoll angesteuert wird. Es soll dazu ein Linux-Treiber entwickelt werden, der es einer Applikation erlaubt, bestimmte Dinge auf das Display auszugeben. Dazu sind verschiedene Arbeitschritte erforderlich.
  • Studium der Datenblätter des Sharp-Prozessors und des TFT-Moduls
  • Programmierung des Display-Controllers
  • Entwicklung eines Linux-Treibers. Der Linux Treiber kann auf verschiedene Weise der Applikation ermöglichen, Daten auf dem Display auszugeben. Beispiele sind hier:
    • eine Kombination aus read/write/seek
    • verschiedene ioctrl-Aufrufe zum Setzen bestimmter Pixel oder zum Aufruf höherwertiger Grafik-Funktionen wie z.B. zeichne Linie

Sie sollten in jedem Fall darauf achten, dass möglichst wenig Daten zwischen dem User-Space und dem Kernel-Space kopiert werden müssen.

Der von Ihnen entwickelte Linux-Geräte-Treiber, soll neben dem Schicken der Pixel-Daten von der Anwendung zum Geräte-Treiber, wenigstens die folgenden Primitive bereitstellen:
  • Zeichne Linie
  • Zeichne Rechteck (gefüllt)
  • Zeichne Kreis (gefüllt)
  • Zeichne Pixel
  • Stelle Text dar

Zudem ist auch eine Test-Anwendung zu schreiben, die den Treiber benutzt, um das Display anzusteuern. Insbesondere sind dabei die vom Treiber implementierten Primitive zu testen. Zusätzlich soll die Anwendung in der Lage sein, mit einem Farbverlauf alle möglichen Farben auf dem Display darzustellen.

Anleitung

Da das Board unter Linux läuft, ist in jedem Fall eine Linux-Geräte-Treiber zu entwickeln, praktischerweise gleich als so genanntes Kernel-Modul. Falls Sie noch nie ein Kernel-Modul, geschweige denn einen Treiber unter Linux entwickelt haben, können Sie sich im Buch Linux-Treiber(external link) entwickeln gut informieren.

Ein weiteres Buch zu dem Thema: Linux Device Drivers(external link). Hier ist insbesondere die Linux-Speicherverwaltung besser beschrieben. Sie werden sich mit dem Thema auseinandersetzen müssen, wenn Sie den Framebuffer allozieren wollen.

Hier sind noch zwei weitere Links zum Thema Linux-Gerätetreiber:

Das Prozessor-Board, welches Sie nutzen, besteht aus zwei Teilen: der so genannten Card-Engine (das Aufsteck-Modul) und dem SDK-Board, welches die Card-Engine aufnimmt. Informationen über Card-Engine und SDK-Board finden Sie weiter unten im Abschnitt Datenblätter.

Das Linux-Betriebssystem für den Sharp ARM9 Prozessor ist bereits fertig konfiguriert. Das root-Verzeichnis befindet sich dabei auf dem Entwicklungsrechner (nigel) wo es über NFS eingebunden wird. Sowohl Bootvorgang als auch das Laden von Programmen erfolgt über die Ethernet-Schnittstelle. Alternativ kann die root-Konsole (Ziel sämtlicher Kernel-Ausgaben) über die serielle RS232-Schnittstelle des Boards erreicht werden.

Zugang zu den Boards:
  • Zugang ist nur per Telnet möglich und deshalb nur innerhalb unseres Intranets möglich (von außerhalb: ssh auf nigel (141.76.92.36) und dann telnet auf die Boards)
  • Im Moment läuft nur ein Board (Hostname: sharp-arm9-1 IP: 141.76.92.146)
  • Grundsätzlich existiert ein Backup-Board (sharp-arm9-2) welches aber im Moment nicht in Betrieb ist.
  • An nigel ist auch die serielle Schnittstelle für die Konsole angeschlossen, mittels minicom (115200, 8N1) ist sie dann auch zu sehen. (starten mit minicom -D /dev/ttyS0)
  • Auf nigel gibt es ein Verzeichnis /opt/sharp-arm9-1 mit verschiedenen Unterverzeichnissen:
    • Im Verzeichnis crosscompiler findet man den Crosscompiler :-)
    • Im Verzeichnis kernel den aktuellen Kernel (wen es interessiert)
    • Im Verzeichnis rootfs befindet sich das Root-Filesystem, welches per NFS an das Board angebunden wird. Dahin muss man dann seine entwickelten Kernel-Module und Applikationen schaffen. Am besten legen Sie unter /home (im rootfs) ein Unterverzeichnis für Ihre Gruppe an.
    • unter .../rootfs/home/example gibt es ein kleines "Hello World" Kernel-Module mit Makefile um den Umgang mit der Cross-Compiler-Toolkette zu demonstrieren.

Datenblätter

Sharp-Prozessor

Evaluation-Board

Card Engine
SDK

TFT-Modul


SpartanMC