Betrachtet man den Quelltext des Linuxkerns, entfallen knapp 50 Prozent auf das drivers/ Unterverzeichnis, enthalten also Programm-Module, mit deren Hilfe auf die Hardware zugegriffen wird. Bestandteil des Gerätetreiberanteils des Kerns sind auch umfassendere Subsysteme wie z.B. das SCSI-Subsystem.
Abb. 2.6 verdeutlicht die Einteilung der Gerätetreiber unter Linux. Auf der obersten Ebene wird in die beiden besprochenen Klassen block und char sowie in Netzgeräte unterteilt. Da der Zugriff auf die letztgenannten nur indirekt über BSD-Sockets (und den Netzwerk-Protokollstack) stattfindet, werden sie in eine eigene Gruppe ausgelagert.
Blockgeräte unter Linux können verschiedenster Natur sein. Es werden SCSI-Blockgeräte unterstützt und solche an der IDE-Schnittstelle. Weiterhin existieren auch Gerätetreiber für proprietäre Lösungen, wie z.B. ältere Schnittstellen für CD-ROMs.
Zeichengeräte werden in tty, misc und raw Geräte unterteilt. Genau genommen sind Geräte der ersten beiden Gruppen auch raw. Es wird aber noch eine Softwareschicht zwischen Gerätetreiber und Schnittstelle gelegt, die im Falle von tty Terminalgeräte ansteuert und für misc Hardware wie z.B. eine PS/ 2-Maus.
Bei der Identifikation der benötigten Subsysteme ist diese Unterteilung nicht ausreichend. Es ist zwar gut zu erkennen, daß eine Terminal-Treiber nicht ohne das Terminal-Subsystem, bestehend aus Registry und Line Discipline, funktioniert, ein raw Gerät wie ein SCSI-Streamer aber benötigt das SCSI-Subsystem bzw. bestimmte Komponenten dessen.
Eine einheitliche Unterteilung läßt sich also nur ansatzweise bzw. in Schritten durchsetzen:
Die Subsysteme können auch mehrere Treiber mit unterschiedlicher Schnittstelle gleichzeitig unterstützen. Das oben erwähnte Beispiel beschreibt diesen Fall: SCSI-Streamer und SCSI-Festplatte in einem System benutzen dasselbe Subsystem, exportieren aber verschiedene Schnittstellen.