Bindeglieder
Experimentelle DVB-Treiber einbinden
Listen aufteilen
In der Liste der DVB-Karten trennen Tabulatoren die einzelnen Geräte voneinander, während die IDs der jeweiligen Devices mit Kommas separiert sind (Zeile 25). Diese unterschiedliche Trennung nutzt die Zeile 43 aus, indem die Trennungsvariable IFS zunächst nur an Tabulatoren und Zeilenumbrüchen auftrennt – dementsprechend arbeitet die for-Schleife in Zeile 44 die einzelnen Geräte ab, die IDs bilden für die Schleife jedoch eine Einheit.
Dies ändert sich erst in Zeile 45, wenn IFS nun auch das Komma als Trennzeichen interpretiert – Zeile 46 betrachtet daher jede einzelne ID des jeweiligen Geräts als einzelnen Parameter und ordnet diesen einer der Variablen $1 bis $5 zu. Die gleiche Methode, nur mit Leerzeichen als Trenner, hatte bereits Zeile 33 verwendet und ebenfalls die Variablen $1 bis $7 als Zwischenspeicher benutzt. Die in Zeile 33 zugewiesenen Werte werden daher in Zeile 45 überschrieben – daher speichert das Skript die Variablen $1 bis $7 in den Zeilen 35 bis 41 in andere Variablen um.
Generische Treiber
Die Zeilen 48 und 49 vergleichen die Vendor- und Product-ID aus der Treiberliste mit den IDs des Geräts – stimmen sie überein, ist der Treiber für das Gerät zuständig. Dabei berücksichtigt das Skript auch generische Treiber, die etwa eine ganze Geräteklasse unterstützen, wie etwa den USB-Treiber uhci-hcd.
Als zweites Kriterium werden die Sub-Vendor- und Sub-Device-IDs herangezogen – nur wenn hier ebenfalls die Daten aus der Liste mit den IDs des Geräts übereinstimmen, eignet sich der Treiber tatsächlich für die gerade untersuchte Karte. Auch hier gibt es generische Treiber, beispielsweise stradis.
Die Geräteklasse interessiert eigentlich nur für generische Treiber, denen keine Vendor-, Product-, Sub-Vendor- und Sub-Device-ID zugeordnet ist. DVB-Treiber fallen aktuell nicht darunter – das Prüfen der Klassenangabe und Bitmaske in den Zeilen 52 und 53 ist daher derzeit nicht notwendig, könnte es aber in Zukunft werden. Die Schleife von Zeile 54 bis 57 unterbindet doppelte Moduleinträge. Externe Programme wie sort und uniq lassen sich dazu nicht heranziehen, da sie auch die Reihenfolge der Liste verändern würden.
Stimmten alle Angaben zwischen Treiberliste und Gerät überein, ist der Treiber für dieses Gerät zuständig und muss geladen werden. Dementsprechend fügt ihn Zeile 60 ans Ende der bisherigen Treiberliste an. Zeile 29 hat diese Treiberliste bereits mit den in der Variablen FIXEDMODULES angegebenen Kernel-Modulen initialisiert, Tabulatoren trennen hier die einzelnen Modulnamen.



