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.