Hardware-Erkennung per Bash-Skript

Gestatten, Sherlock Bash

Die automatische Hardware-Erkennung beherrschen die meisten Distributionen erst seit wenigen Jahren. Dem Benutzer erscheint sie oft mystisch und magisch. Dabei kann jeder mit wenigen Zeilen Bash-Code eine eigene Hardware-Erkennung programmieren.

Zur Jahrtausendwende beherrschte kaum eine Distribution die automatische Hardware-Erkennung, oft genug musste man die nötigen Module selbst heraussuchen und in Konfigurationsdateien eintragen. Dabei ist es keine Hexerei, den passenden Treiber für ein Gerät zu finden.

Den Schlüssel zur die Hardware-Erkennung stellt die Liste der PCI-Geräte in den Unterverzeichnissen von /proc/bus/pci/. Hier gibt es für jedes PCI-Gerät eine eigene Pseudo-Datei mit detaillierten Informationen über die Konfiguration.

Abbildung 1 zeigt den Aufbau der dort abgelegten Konfigurationsdateien. Für die Hardware-Erkennung benötigen wir Angaben über den Hersteller und das Gerät: Die Vendor-ID und die Device-ID.

Abbildung 1: Für jedes PCI-Gerät gibt es in /proc/bus/pci eine Pseudo-Konfigurationsdatei. Sie enthält die für die Hardware-Erkennung wichtigen Vendor-, Device- und Class-IDs.

Genormte IDs

Beide IDs sind in der PCI-ID-Liste auf Sourceforge [1] hinterlegt und werden vom PCI-Konsortium für jedes Gerät einzeln zugewiesen. Auch die Linux-Treiber verlassen sich auf die Vendor- und Device-ID, um festzustellen, welche Geräte sie jeweils unterstützen und welche nicht.

Die PCI-ID-Liste von [1] lässt sich sehr einfach parsen, da die einzelnen Spalten jeweils mit Tabulator getrennt sind. Die Zeilen 20 bis 35 aus Listing 1 übernehmen diese Aufgabe.

Insgesamt gibt es fünf Spalten; die ersten drei sind für uns interessant. In der ersten steht entweder ein "v" für einen Hersteller-Namen oder ein "d" für eine Gerätebezeichnung. Die zweite Spalte enthält die Vendor-ID als vierstellige hexadezimale Zahl und bei Geräte-Einträgen zusätzlich die an die Vendor-ID angehängt Device-ID – also eine achtstellige hexadezimale Zahl. In der dritten Spalte findet sich der Herstellername oder die Gerätebezeichnung als Klartext. Diese Spalte verwenden wir später für die Ausgabe.

Skalare Variablen statt Arrays

Das Einlesen der PCI-ID-Liste erfordert einen Trick: Zweidimensionale Arrays nach dem Muster d[Vendor-ID][Device-ID] beherrscht die Bash nicht, und bei eindimensionalen Arrays ist der Index nicht groß genug, um 32-Bit-Werte nach dem Muster d[Vendor-ID/Device-ID] aufzunehmen.

Die Lösung bieten "Variablennamen mit Variablen", also einfache skalare Variablen: Der Herstellername oder die Gerätebezeichnung landet in einer Variablen, die mit "v" respektive mit "d" beginnt und dann die vierstellige hexadezimale Vendor-ID oder die achtstellige hexadezimale Vendor- und Device-ID trägt. In den Zeilen 28 und 32 sehen Sie die diese Zuweisungen – das Schlüsselwort declare ist erforderlich, damit die Bash aus v${2} respektive d${2} den vollen Variablennamen vor der Zuweisung auflöst.

Doch zurück zur PCI-ID-Datenbank: Spalte 4 hat noch eine besondere Bedeutung: Eine "0" signalisiert, dass es sich um einen von den Moderatoren der Liste verifizierten Geräteeintrag handelt, eine "1" zeigt einen noch nicht überprüften Eintrag eines Benutzers per Web-Formular. Das Skript verwendet bei den Herstellernamen lediglich geprüfte Einträge, siehe Zeile 27.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 03/2017: EFFIZIENTES BÜRO

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Probleme mit der Maus
Thomas Roch, 21.02.2017 13:43, 1 Antworten
Nach 20 Jahren Windows habe ich mich zu Linux Ubuntu probeweise durchgerungen!!! Installation - k...
KWin stürzt ab seit Suse Leap 42.2
Wimpy *, 21.02.2017 09:47, 4 Antworten
OpenSuse 42.2 KDE 5.8.3 Framework 5.26.0 QT 5.6.1 Kernel 4.4.46-11-default 64-bit Open-GL 2....
Shell-Befehl zur Installation von Scanner-Treiber
Achim Zerrer, 15.02.2017 12:13, 10 Antworten
Hallo, ich habe Einen Brother Drucker mit Scanner. Nachdem ich mit Hilfe der Community den Druck...
kiwix öffnet ZIM Datei nicht
Adrian Meyer, 13.02.2017 18:23, 1 Antworten
Hi, ich nutze Zim Desktop für mein privates Wiki. Fürs Handy habe ich mir kiwix heruntergelade...
registration
Brain Stuff, 10.02.2017 16:39, 2 Antworten
Hallo, Das Capatcha auf der Registrierungsseite von linux-community ist derartig schlecht gema...