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 02/2017: SICHER IM NETZ

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

Samba-Server für Win-Daten & Linux-Dateirechte
Gerd Grundmann, 12.01.2017 18:25, 0 Antworten
Hallo Gemeinde, ich habe ewig gegooo.. aber nicht wirklich gefunden, was ich suche. Auf mei...
LM Cinnamon 18.1Serena 64 bit
Herwig Ameisbichler, 11.01.2017 13:02, 6 Antworten
Hallo an alle. Bin Linux Neuling.Habe auf meiner SSD neben W10 (finde ich nicht mehr)LM17.2 auch...
Bilder in E-Mail einbinden?
Werner Hahn, 23.12.2016 12:18, 4 Antworten
Dell Latitude E6510, Ubuntu 16.04, Mozilla Firefox Ich bitte um eine leicht verständliche Anle...
Linux Mint 17.2
Herwig Ameisbichler, 17.12.2016 11:19, 4 Antworten
Wer kann mir helfen? Hab seit gestern Linux am Pc.Wie kann ich diese Miniaturschrift im Menü,Lei...
Linux 17.2 Treiber f. PC Drucker installieren
Ernst Malitzki, 11.12.2016 13:04, 7 Antworten
Habe einen PC Drucker von HP. Möchte diesen PC Drucker an meinen PC anschließen. Hierzu benötige...