Gestatten, Sherlock Bash

Hardware-Erkennung per Bash-Skript

01.03.2005
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
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 09/2015: Paketverwaltung

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

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

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

Tipp der Woche

Grammatikprüfung in LibreOffice nachrüsten
Grammatikprüfung in LibreOffice nachrüsten
Tim Schürmann, 24.04.2015 19:36, 2 Kommentare

LibreOffice kommt zwar mit einer deutschen Rechtschreibprüfung und einem guten Thesaurus, eine Grammatikprüfung fehlt jedoch. In ältere 32-Bit-Versionen ...

Aktuelle Fragen

Scanner EPSON Perfection V 300 photo und VueScan
Roland Welcker, 19.08.2015 09:04, 1 Antworten
Verehrte Linux-Freunde, ich habe VueScan in /usr/local/src/vuex_3295/VueScan installiert, dazu d...
Empfehlung gesucht Welche Dist als Wirt für VM ?
Roland Fischer, 31.07.2015 20:53, 2 Antworten
Wer kann mir Empfehlungen geben welche Distribution gut geeignet ist als Wirt für eine VM für Win...
Plugins bei OPERA - Linux Mint 17.1
Christoph-J. Walter, 23.07.2015 08:32, 3 Antworten
Beim Versuch Video-Sequenzen an zu schauen kommt die Meldung -Plug-ins und Shockwave abgestürzt-....
Wird Windows 10 update/upgrade mein Grub zerstören ?
daniel s, 22.07.2015 08:31, 9 Antworten
oder rührt Windows den Bootloader nicht an? das ist auch alles was Google mir nicht beantw...
Z FUER Y UND ANDERE EINGABEFEHLER AUF DER TASTATUR
heide marie voigt, 10.07.2015 13:53, 2 Antworten
BISHER konnte ich fehlerfrei schreiben ... nun ist einiges drucheinander geraten ... ich war bei...