101.1 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
101 Systemarchitektur |
Lernziel: |
101.1 Hardwareeinstellungen ermitteln und konfigurieren |
Lektion: |
1 von 1 |
Einführung
Seit den frühen Jahren der elektronischen Datenverarbeitung haben Hersteller von Business- und Personalcomputern eine Vielzahl von Hardwarekomponenten in ihre Maschinen integriert, die wiederum vom Betriebssystem unterstützt werden müssen. Das würde Betriebssystementwickler jedoch überfordern, wenn die Industrie keine Standards für Befehlssätze und Gerätekommunikation festgelegen würde. Ähnlich wie die standardisierte Abstraktionsschicht, die das Betriebssystem einer Anwendung zur Verfügung stellt, erleichtern diese Standards das Schreiben und Warten eines Betriebssystems, das nicht an ein bestimmtes Hardwaremodell gebunden ist. Die Komplexität der integrierten Hardware erfordert jedoch manchmal Anpassungen hinsichtlich der Art und Weise, wie die Ressourcen dem Betriebssystem zugeteilt werden sollten, damit es installiert werden und korrekt funktionieren kann.
Einige dieser Anpassungen sind auch ohne ein installiertes Betriebssystem möglich. Die meisten Maschinen bieten ein Konfigurationsprogramm, das beim Einschalten der Maschine ausgeführt werden kann. Bis Mitte der 2000er Jahre war das Konfigurationsprogramm im BIOS (Basic Input/Output System) implementiert, dem Standard für Firmware, der die grundlegenden Konfigurationsroutinen von x86-Motherboards enthält. Ab dem Ende des ersten Jahrzehnts der 2000er Jahre begannen Maschinen, die auf der x86-Architektur basierten, das BIOS durch eine neue Implementierung namens UEFI (Unified Extensible Firmware Interface) zu ersetzen. Diese verfügt im Gegensatz zum BIOS über Funktionen zur Identifizierung, zum Testen, zur Konfiguration und zu Firmware-Upgrades. Trotz der Änderung ist es nicht ungewöhnlich, das Konfigurationsprogramm weiterhin BIOS zu nennen, da beide Implementierungen denselben grundlegenden Zweck erfüllen.
Note
|
Weitere Einzelheiten zu den Ähnlichkeiten und Unterschieden zwischen BIOS und UEFI werden in einer späteren Lektion behandelt. |
Geräteaktivierung
Das Systemkonfigurationsprogramm wird nach dem Drücken einer bestimmten Taste beim Einschalten des Computers angezeigt. Welche Taste zu drücken ist, variiert von Hersteller zu Hersteller, aber normalerweise ist es Entf oder eine der Funktionstasten, wie z.B. F2 oder F12. Die zu verwendende Tastenkombination wird häufig auf dem Bildschirm beim Einschalten angezeigt.
In den BIOS-Einstellungen ist es möglich, integrierte Peripheriegeräte ein- oder auszuschalten, grundlegende Schutzmechanismen zu aktivieren und Hardwareeinstellungen wie IRQ (Interrupt Request) und DMA (Direct Memory Access) zu ändern. Eine Änderung dieser Einstellungen ist auf modernen Maschinen selten erforderlich, aber es kann notwendig sein, Anpassungen vorzunehmen, um spezifische Probleme zu lösen. Es gibt z.B. RAM-Technologien, die mit schnelleren Datenübertragungsraten als den Standardwerten kompatibel sind, daher wird empfohlen, sie auf die vom Hersteller angegebenen Werte einzustellen. Einige CPUs bieten Funktionen, welche für die jeweilige Installation möglicherweise nicht erforderlich sind und deaktiviert werden können. Deaktivierte Funktionen verringern den Stromverbrauch und können den Systemschutz erhöhen, da CPU-Funktionen, die bekannte Fehler enthalten, ebenfalls deaktiviert werden können.
Ist das Gerät mit vielen Speichermedien ausgestattet, ist es wichtig zu definieren, welches den erforderlichen Bootloader enthält und das erste Gerät in der Bootreihenfolge darstellt. Das Betriebssystem wird möglicherweise nicht geladen, wenn das falsche Gerät in der BIOS-Bootreihenfolge an erster Stelle steht.
Geräteüberprüfung unter Linux
Sobald die Geräte korrekt identifiziert sind, obliegt es dem Betriebssystem, ihnen die jeweils benötigten Softwarekomponenten zuzuordnen. Wenn eine Hardwareoption nicht wie erwartet funktioniert, ist es wichtig zu erkennen, wo genau das Problem auftritt. Wird eine Hardware vom Betriebssystem nicht erkannt, ist es sehr wahrscheinlich, dass das Gerät — oder der Steckplatz, an den es angeschlossen ist — defekt ist. Wird eine Hardwarekomponente zwar korrekt erkannt, funktioniert aber nicht richtig, kann ein Problem seitens des Betriebssystems vorliegen. Daher ist einer der ersten Schritte beim Umgang mit hardwarebezogenen Problemen zu prüfen, ob das Betriebssystem das Gerät korrekt erkennt. Es gibt zwei grundlegende Möglichkeiten, Hardwareressourcen auf einem Linux-System zu identifizieren: spezielle Befehle oder das Lesen bestimmter Dateien in besonderen Dateisystemen.
Befehle zur Überprüfung
Die beiden grundlegenden Befehle zur Identifizierung angeschlossener Geräte in einem Linux-System sind:
lspci
-
Zeigt alle Geräte an, die aktuell an den PCI-Bus (Peripheral Component Interconnect) angeschlossen sind. Bei PCI-Geräten handelt es sich entweder um Komponenten, die an die Hauptplatine angeschlossen sind (z.B. Festplatten-Controller), oder um Erweiterungskarten, die in einen PCI-Steckplatz eingesteckt ist (z.B. eine externe Grafikkarte).
lsusb
-
Listet USB-Geräte (Universal Serial Bus) auf, die aktuell an das System angeschlossen sind. Obwohl es USB-Geräte für fast jeden erdenklichen Zweck gibt, wird die USB-Schnittstelle meist für den Anschluss von Eingabegeräten — Tastaturen, Zeigegeräte — und Wechselspeichermedien verwendet.
Die Ausgabe der Befehle lspci
und lsusb
besteht aus einer Liste aller vom Betriebssystem identifizierten PCI- und USB-Geräte. Es kann jedoch sein, dass das Gerät noch nicht voll funktionsfähig ist, da jede Hardware- eine Softwarekomponente zur Steuerung des jeweiligen Geräts benötigt. Diese Softwarekomponente wird als Kernelmodul bezeichnet und kann Teil des offiziellen Linux-Kernels sein oder separat aus anderen Quellen hinzugefügt werden.
Linux-Kernelmodule, die sich auf Hardwaregeräte beziehen, werden auch Treiber (Driver) genannt, wie in anderen Betriebssystemen auch. Treiber für Linux werden jedoch nicht immer vom Hersteller des Geräts geliefert. Während einige Hersteller ihre eigenen binären Treiber zur Verfügung stellen, die separat installiert werden müssen, werden viele Treiber von unabhängigen Entwicklern geschrieben. Früher hatten Geräte, die zum Beispiel unter Windows funktionierten, oft kein entsprechendes Kernelmodul für Linux. Heutzutage haben Linux-basierte Betriebssysteme eine breite Hardwareunterstützung, und die meisten Geräte funktionieren problemlos.
Befehle, die unmittelbar auf die Hardware zugreifen, erfordern oft Root-Rechte zur Ausführung oder zeigen nur begrenzte Informationen an, wenn sie von normalen Benutzenden ausgeführt werden. So kann es notwendig sein, sich als root anzumelden oder derartige Befehle mit sudo
auszuführen.
Die folgende Ausgabe des Befehls lspci
zeigt zum Beispiel einige identifizierte Geräte:
$ lspci 01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2) 04:02.0 Network controller: Ralink corp. RT2561/RT61 802.11g PCI 04:04.0 Multimedia audio controller: VIA Technologies Inc. ICE1712 [Envy24] PCI Multi-Channel I/O Controller (rev 02) 04:0b.0 FireWire (IEEE 1394): LSI Corporation FW322/323 [TrueFire] 1394a Controller (rev 70)
Die Ausgabe solcher Befehle kann Dutzende von Zeilen umfassen, so dass das vorige und das nächste Beispiel nur ausgewählte Abschnitte enthalten. Die hexadezimalen Zahlen am Anfang jeder Zeile sind die eindeutigen Adressen des jeweiligen PCI-Geräts. Der Befehl lspci
zeigt mehr Details über ein bestimmtes Gerät, wenn dessen Adresse mit der Option -s
angegeben wird, begleitet von der Option -v
:
$ lspci -s 04:02.0 -v 04:02.0 Network controller: Ralink corp. RT2561/RT61 802.11g PCI Subsystem: Linksys WMP54G v4.1 Flags: bus master, slow devsel, latency 32, IRQ 21 Memory at e3100000 (32-bit, non-prefetchable) [size=32K] Capabilities: [40] Power Management version 2 kernel driver in use: rt61pci
Die Ausgabe zeigt nun deutlich mehr Details zum Gerät an der Adresse 04:02.0
. Es handelt sich um einen Netzwerkcontroller mit der internen Bezeichnung Ralink corp. RT2561/RT61 802.11g PCI
. Das Subsystem
ist mit der Marke und dem Modell des Geräts verbunden — Linksys WMP54G v4.1
— und kann für Diagnosezwecke hilfreich sein.
Das Kernelmodul ist der Zeile kernel driver in use
zu entnehmen, die das Modul rt61pci
anzeigt. Ausgehend von den gesammelten Informationen ist folgendes anzunehmen:
-
Das Gerät wurde identifiziert.
-
Ein passendes Kernelmodul wurde geladen.
-
Das Gerät sollte einsatzbereit sein.
Eine weitere Möglichkeit zu überprüfen, welches Kernelmodul für das angegebene Gerät verwendet wird, bietet die Option -k
, die neuere Versionen von lspci
bereitstellen:
$ lspci -s 01:00.0 -k 01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2) kernel driver in use: nvidia kernel modules: nouveau, nvidia_drm, nvidia
Für das gewählte Gerät, ein GPU-Board von NVIDIA, teilt lspci
mit, dass das verwendete Modul nvidia
heißt (siehe Zeile kernel driver in use: nvidia
); alle entsprechenden Kernelmodule sind in der Zeile kernel modules: nouveau, nvidia_drm, nvidia
aufgeführt.
Der Befehl lsusb
ist lspci
ähnlich, listet aber ausschließlich USB-Informationen auf:
$ lsusb Bus 001 Device 029: ID 1781:0c9f Multiple Vendors USBtiny Bus 001 Device 028: ID 093a:2521 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 020: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter Bus 001 Device 011: ID 04f2:0402 Chicony Electronics Co., Ltd Genius LuxeMate i200 Keyboard Bus 001 Device 007: ID 0424:7800 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Der Befehl lsusb
zeigt die verfügbaren USB-Kanäle und die daran angeschlossenen Geräte an. Wie bei lspci
liefert die Option -v
eine detailliertere Ausgabe. Ein bestimmtes Gerät wählen Sie zur Überprüfung aus, indem Sie seine ID mit der Option -d
angeben:
$ lsusb -v -d 1781:0c9f Bus 001 Device 029: ID 1781:0c9f Multiple Vendors USBtiny Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.01 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x1781 Multiple Vendors idProduct 0x0c9f USBtiny bcdDevice 1.04 iManufacturer 0 iProduct 2 USBtiny iSerial 0 bNumConfigurations 1
Mit der Option -t
zeigt der Befehl lsusb
die aktuellen USB-Gerätezuordnungen als hierarchischen Baum an:
$ lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M |__ Port 2: Dev 11, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 20, If 0, Class=Wireless, Driver=btusb, 12M |__ Port 3: Dev 20, If 1, Class=Wireless, Driver=btusb, 12M |__ Port 3: Dev 20, If 2, Class=Application Specific Interface, Driver=, 12M |__ Port 1: Dev 7, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M |__ Port 2: Dev 28, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 29, If 0, Class=Vendor Specific Class, Driver=, 1.5M
Es ist möglich, dass nicht allen Geräten entsprechende Module zugeordnet sind. Die Kommunikation mit bestimmten Geräten kann von einer Anwendung direkt, ohne die Vermittlung durch ein Modul, abgewickelt werden. Dennoch enthält die Ausgabe von lsusb -t
wichtige Informationen. Wird ein entsprechendes Modul existiert, erscheint sein Name am Ende der Zeile, wie in Driver=btusb
. Class
identifiziert die allgemeine Gerätekategorie, wie z.B. Human Interface Device
, Wireless
, Vendor Specific Class
, Mass Storage
usw. Um zu überprüfen, welches Gerät das Modul btusb
verwendet, das in der vorhergehenden Auflistung genannt ist, sollten sowohl die Bus
- als auch die Dev
-Nummer der Option -s
des Befehls lsusb
übergeben werden:
$ lsusb -s 01:20 Bus 001 Device 020: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter
Es ist üblich, in einem Standard-Linux-System jederzeit über einen großen Satz geladener Kernelmodule zu verfügen. Die Interaktion mit diesen erfolgt meist über Befehle, die das Paket kmod
zur Verfügung stellt. Dies ist ein Satz von Werkzeugen, um allgemeine Aufgaben mit Linux-Kernelmodulen wie Einfügen, Entfernen, Auflisten, Überprüfen von Eigenschaften, Auflösen von Abhängigkeiten und Aliassen zu erledigen. Der Befehl lsmod
zeigt zum Beispiel alle aktuell geladenen Module an:
$ lsmod Module Size Used by kvm_intel 138528 0 kvm 421021 1 kvm_intel iTCO_wdt 13480 0 iTCO_vendor_support 13419 1 iTCO_wdt snd_usb_audio 149112 2 snd_hda_codec_realtek 51465 1 snd_ice1712 75006 3 snd_hda_intel 44075 7 arc4 12608 2 snd_cs8427 13978 1 snd_ice1712 snd_i2c 13828 2 snd_ice1712,snd_cs8427 snd_ice17xx_ak4xxx 13128 1 snd_ice1712 snd_ak4xxx_adda 18487 2 snd_ice1712,snd_ice17xx_ak4xxx microcode 23527 0 snd_usbmidi_lib 24845 1 snd_usb_audio gspca_pac7302 17481 0 gspca_main 36226 1 gspca_pac7302 videodev 132348 2 gspca_main,gspca_pac7302 rt61pci 32326 0 rt2x00pci 13083 1 rt61pci media 20840 1 videodev rt2x00mmio 13322 1 rt61pci hid_dr 12776 0 snd_mpu401_uart 13992 1 snd_ice1712 rt2x00lib 67108 3 rt61pci,rt2x00pci,rt2x00mmio snd_rawmidi 29394 2 snd_usbmidi_lib,snd_mpu401_uart
Die Ausgabe des Befehls lsmod
umfasst drei Spalten:
Module
-
Name des Moduls
Size
-
Menge des vom Modul belegten RAM-Speichers in Bytes
Used by
-
Abhängige Module
Einige Module benötigen andere Module, um korrekt zu funktionieren, beispielsweise Module für Audiogeräte:
$ lsmod | fgrep -i snd_hda_intel snd_hda_intel 42658 5 snd_hda_codec 155748 3 snd_hda_codec_hdmi,snd_hda_codec_via,snd_hda_intel snd_pcm 81999 3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel snd_page_alloc 13852 2 snd_pcm,snd_hda_intel snd 59132 19 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_hda_codec_via,snd_pcm,snd_seq,snd_hda_codec,snd_hda_intel,snd_seq_device
Die dritte Spalte, Used by
, zeigt die Module, die das Modul in der ersten Spalte benötigen, um richtig zu funktionieren. Viele Module der Linux-Soundarchitektur, denen das snd
vorangestellt ist, sind voneinander abhängig. Bei der Problemsuche während der Systemdiagnose kann es nützlich sein, bestimmte Module, die gerade geladen sind, zu entladen. Der Befehl modprobe
dient sowohl dem Laden als auch dem Entladen von Kernelmodulen: Zum Entladen eines Moduls und seiner verwandten Module — solange diese nicht von einem laufenden Prozess benutzt werden — nutzen Sie den Befehl modprobe -r
. Um etwa das Modul snd-hda-intel
(das Modul für ein HDA-Intel-Audiogerät) und andere Module, die mit dem Soundsystem zusammenhängen, zu entladen, lautet der Befehl:
# modprobe -r snd-hda-intel
Neben dem Laden und Entladen von Kernelmodulen bei laufendem System ist es möglich, Modulparameter beim Laden des Kernels zu ändern; dies unterscheidet sich nicht sehr von der Übergabe von Optionen an Befehle. Jedes Modul akzeptiert bestimmte Parameter, aber in den meisten Fällen empfehlen sich die Standardwerte — zusätzliche Parameter werden nicht benötigt. Manchmal ist es jedoch notwendig, Parameter zu verwenden, um das Verhalten eines Moduls so zu ändern, dass es wie erwartet funktioniert.
Mit dem Modulnamen als einzigem Argument zeigt der Befehl modinfo
eine Beschreibung, die Datei, den Autor, die Lizenz, die Identifikation, die Abhängigkeiten und die verfügbaren Parameter für das jeweilige Modul an. Angepasste Parameter für ein Modul werden persistent, indem Sie diese in die Datei /etc/modprobe.conf
oder in einzelne Dateien mit der Erweiterung .conf
im Verzeichnis /etc/modprobe.d/
schreiben. Die Option -p
veranlasst das Kommando modinfo
, alle verfügbaren Parameter anzuzeigen und die anderen Informationen zu ignorieren:
# modinfo -p nouveau vram_pushbuf:Create DMA push buffers in VRAM (int) tv_norm:Default TV norm. Supported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J, hd480i, hd480p, hd576i, hd576p, hd720p, hd1080i. Default: PAL NOTE Ignored for cards with external TV encoders. (charp) nofbaccel:Disable fbcon acceleration (int) fbcon_bpp:fbcon bits-per-pixel (default: auto) (int) mst:Enable DisplayPort multi-stream (default: enabled) (int) tv_disable:Disable TV-out detection (int) ignorelid:Ignore ACPI lid status (int) duallink:Allow dual-link TMDS (default: enabled) (int) hdmimhz:Force a maximum HDMI pixel clock (in MHz) (int) config:option string to pass to driver core (charp) debug:debug string to pass to driver core (charp) noaccel:disable kernel/abi16 acceleration (int) modeset:enable driver (default: auto, 0 = disabled, 1 = enabled, 2 = headless) (int) atomic:Expose atomic ioctl (default: disabled) (int) runpm:disable (0), force enable (1), optimus only default (-1) (int)
Die Beispielausgabe zeigt alle verfügbaren Parameter für das Modul nouveau
, ein Kernelmodul, das vom Nouveau Project als Alternative zu den proprietären Treibern für NVIDIA-GPU-Karten zur Verfügung gestellt wird. Mit der Option modeset
steuern Sie beispielsweise, ob Bildschirmauflösung und -tiefe im Kernelspace statt im Userspace gesetzt werden. Das Hinzufügen von options nouveau modeset=0
in die Datei /etc/modprobe.d/nouveau.conf
deaktiviert die Modeset-Kernelfunktion.
Verursacht ein Modul Probleme, kann die Datei /etc/modprobe.d/blacklist.conf
dazu dienen, das Laden des Moduls zu blockieren. Um zum Beispiel das automatische Laden des Moduls nouveau
zu verhindern, fügen Sie die Zeile blacklist nouveau
in die Datei /etc/modprobe.d/blacklist.conf
ein. Diese Aktion ist erforderlich, wenn das proprietäre Modul nvidia
installiert ist und das Standardmodul nouveau
nicht verwendet werden soll.
Note
|
Sie können die Datei |
Informationsdateien und Gerätedateien
Die Befehle lspci
, lsusb
und lsmod
fungieren als Frontend zum Lesen der vom Betriebssystem gespeicherten Hardwareinformationen. Diese Informationen werden in speziellen Dateien in den Verzeichnissen /proc
und /sys
gespeichert. Diese Verzeichnisse sind Einhängepunkte zu Dateisystemen, die nicht in einer Gerätepartition liegen, sondern nur in einem RAM-Bereich, der vom Kernel benutzt wird, um die Laufzeitkonfiguration und Informationen über laufende Prozesse zu speichern. Solche Dateisysteme sind nicht für die konventionelle Dateispeicherung vorgesehen und werden daher Pseudo-Dateisysteme genannt. Sie existieren nur, während das System läuft. Das Verzeichnis /proc
enthält Dateien mit Informationen über laufende Prozesse und Hardwareressourcen. Einige wichtige Dateien in /proc
zur Überprüfung der Hardware sind:
/proc/cpuinfo
-
Listet detaillierte Informationen über die vom Betriebssystem gefundene(n) CPU(s) auf.
/proc/interrupts
-
Eine Liste mit den Nummern der Interrupts pro Eingabe/Ausgabe-Baustein für jede CPU.
/proc/ioports
-
Listet die aktuell registrierten und verwendeten Eingabe/Ausgabe-Port-Bereiche auf.
/proc/dma
-
Listet die registrierten DMA-Kanäle (Direct Memory Access) auf, die verwendet werden.
Dateien im /sys
-Verzeichnis haben eine ähnliche Funktion wie jene in /proc'. Das Verzeichnis `/sys
hat jedoch den besonderen Zweck, Geräteinformationen und Kerneldaten bezüglich der Hardware zu speichern, während /proc
auch Informationen über verschiedene Kerneldatenstrukturen enthält, einschließlich laufender Prozesse und Konfiguration.
Ein weiteres Verzeichnis, das sich direkt auf Geräte in einem Standard-Linux-System bezieht, ist /dev
. Jede Datei in /dev
ist mit einem Systemgerät verbunden, insbesondere mit Speichergeräten. Eine ältere, an den ersten IDE-Kanal des Motherboards angeschlossene IDE-Festplatte wird beispielsweise durch die Datei /dev/hda
repräsentiert. Jede Partition auf dieser Platte wird durch /dev/hda1
, /dev/hda2
etc. identifiziert — bis zur letzten gefundenen Partition.
Wechselmedien verwaltet das Subsystem udev, das die entsprechenden Geräte in /dev
erstellt. Der Linux-Kernel fängt Hardwareerkennungsereignisse ab und übergibt diese an den udev-Prozess, der dann das Gerät identifiziert und dynamisch entsprechende Dateien in /dev
unter Verwendung definierter Regeln erstellt.
In aktuellen Linux-Distributionen ist udev für die Identifizierung und Konfiguration der bereits beim Einschalten des Rechners vorhandenen Geräte (Coldplug Detection) und der im laufenden Betrieb identifizierten Geräte (Hotplug Detection) verantwortlich. Udev stützt sich auf SysFS, das Pseudo-Dateisystem für hardwarebezogene Informationen, die in /sys
eingehängt sind.
Note
|
Unter Hotplug versteht man die Erkennung und Konfiguration eines Geräts im laufenden Betrieb, z.B. beim Einstecken eines USB-Geräts. Der Linux-Kernel unterstützt Hotplug-Funktionen seit Version 2.6, so dass die meisten Systembusse (PCI, USB usw.) Hotplug-Ereignisse auslösen können, wenn ein Gerät angeschlossen oder abgesteckt wird. |
Werden neue Geräte erkannt, sucht udev in den vordefinierten Regeln, die im Verzeichnis /etc/udev/rules.d/
gespeichert sind, nach einer passenden Regel. Die wichtigsten Regeln werden von der Distribution zur Verfügung gestellt, aber für spezielle Fälle können neue Regeln hinzugefügt werden.
Speichergeräte
Unter Linux werden Speichergeräte allgemein als Blockgeräte bezeichnet, da die Daten in Blöcken unterschiedlicher Größen und Positionen von diesen Geräten gelesen werden. Jedes Blockgerät wird durch eine Datei im Verzeichnis /dev
identifiziert, wobei der Name der Datei vom Gerätetyp (IDE, SATA, SCSI usw.) und seinen Partitionen abhängt. CD/DVD- und Diskettenlaufwerke zum Beispiel haben entsprechende Namen in /dev
: Ein CD/DVD-Laufwerk, das an den zweiten IDE-Kanal angeschlossen ist, wird als /dev/hdc
identifiziert (/dev/hda
und /dev/hdb
sind für die Master- und Slave-Geräte des ersten IDE-Kanals reserviert) und ein altes Diskettenlaufwerk wird als /dev/fd0
, /dev/fd1
usw. identifiziert.
Ab Linux-Kernel Version 2.4 werden die meisten Speichergeräte unabhängig von ihrem Hardwaretyp so identifiziert, als seien sie SCSI-Geräte. IDE-, SSD- und USB-Blockgeräte werden mit dem Präfix sd
gekennzeichnet. Auch für IDE-Platten dient das Präfix sd
, aber der dritte Buchstabe markiert, ob das Laufwerk ein Master oder Slave ist (im ersten IDE-Kanal wird Master sda
und Slave sdb
sein). Partitionen werden numerisch aufgelistet. Die Pfade /dev/sda1
, /dev/sda2
stehen für die erste und zweite Partition des zuerst identifizierten Blockgeräts — /dev/sdb1
, /dev/sdb2
stehen für die erste und zweite Partition des als zweites identifizierten Blockgeräts. Ausnahmen von diesem Muster bilden Speicherkarten (SD-Karten) und NVMe-Geräte (an den PCI-Express-Bus angeschlossene SSD): Bei SD-Karten werden die Pfade /dev/mmcblk0p1
, /dev/mmcblk0p2
für die erste und zweite Partition des zuerst identifizierten Geräts verwendet — /dev/mmcblk1p1
, /dev/mmcblk1p2
für die erste und zweite Partition des als zweites identifizierten Geräts. NVMe-Geräte erhalten das Präfix nvme
, wie in /dev/nvme0n1p1
und /dev/nvme0n1p2
.
Geführte Übungen
-
Ein Betriebssystem kann nach dem Hinzufügen einer zweiten SATA-Platte zum System nicht mehr booten. Mit dem Wissen, dass keine Komponente defekt ist, was könnte die mögliche Ursache für diesen Fehler sein?
-
Sie möchten sicherstellen, dass die externe Grafikkarte, die an den PCI-Bus Ihres neu erworbenen Desktop-Computers angeschlossen ist, wirklich die vom Hersteller beworbene ist, aber das Öffnen des Computergehäuses führt zum Erlöschen der Garantie. Welchen Befehl können Sie verwenden, um die Details der Grafikkarte aufzulisten, wie sie vom Betriebssystem erkannt wurden?
-
Die folgende Zeile ist Teil der von dem Befehl
lspci
erzeugten Ausgabe:03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2208 [Thunderbolt] (rev 05)
Welchen Befehl sollten Sie ausführen, um das Kernelmodul zu identifizieren, das für dieses spezielle Gerät verwendet wird?
-
Sie möchten verschiedene Parameter für das
bluetooth
-Kernelmodul ausprobieren, ohne das System neu zu starten. Jeder Versuch, das Modul mitmodprobe -r bluetooth
zu entladen, führt jedoch zu folgendem Fehler:modprobe: FATAL: Module bluetooth is in use.
Was ist die mögliche Ursache für diesen Fehler?
Offene Übungen
-
Ältere Maschinen in Produktionsumgebungen sind nicht ungewöhnlich, z.B. wenn einige Geräte eine veraltete Verbindung zur Kommunikation mit dem steuernden Computer nutzen. Darum müssen einige Besonderheiten dieser älteren Maschinen besonders beachtet werden. Einige x86-Server mit älterer BIOS-Firmware booten zum Beispiel nicht, wenn eine Tastatur nicht erkannt wird. Wie lässt sich dieses spezielle Problem vermeiden?
-
Betriebssysteme, die um den Linux-Kernel herum aufgebaut sind, sind auch für eine Vielzahl anderer Computerarchitekturen als x86 verfügbar, wie z.B. auf Einplatinencomputern, die auf der ARM-Architektur basieren. Sie werden feststellen, dass der Befehl
lspci
auf solchen Maschinen, wie beispieslweise dem Raspberry Pi, nicht zur Verfügung steht. Welcher Unterschied zu x86-Maschinen rechtfertigt dieses Fehlen? -
Viele Netzwerkrouter verfügen über einen USB-Port, an den ein externes Gerät, wie z.B. eine USB-Festplatte, angeschlossen werden kann. Wie wird, da die meisten Router ein Linux-basiertes Betriebssystem nutzen, eine externe USB-Festplatte im Verzeichnis
/dev/
benannt, wenn kein anderes konventionelles Blockgerät im Router vorhanden ist? -
Im Jahr 2018 wurde die als Meltdown bekannte Hardwareschwachstelle entdeckt. Sie betrifft fast alle Prozessoren vieler Architekturen. Neuere Versionen des Linux-Kernels können darüber informieren, ob das aktuelle System verwundbar ist. Wie erhalten Sie diese Informationen?
Zusammenfassung
Diese Lektion behandelt die allgemeinen Konzepte, wie der Linux-Kernel mit Hardwareressourcen umgeht, hauptsächlich für die x86-Architektur. Die Lektion geht auf die folgenden Themen ein:
-
Wie im BIOS- oder UEFI-Konfigurationsprogramm definierte Einstellungen die Art und Weise beeinflussen, wie das Betriebssystem mit der Hardware interagiert.
-
Wie man die von einem Standard-Linux-System bereitgestellten Tools verwendet, um Informationen über die Hardware zu erhalten.
-
Wie man permanente und entfernbare Speichergeräte im Dateisystem identifiziert.
Die behandelten Befehle und Verfahren lauten:
-
Befehle zur Überprüfung der erkannten Hardware:
lspci
undlsusb
. -
Befehle zur Verwaltung von Kernelmodulen:
lsmod
undmodprobe
. -
Hardwarebezogene Spezialdateien im Verzeichnis
/dev/
oder in den Pseudo-Dateisystemen/proc/
und/sys/
.
Lösungen zu den geführten Übungen
-
Ein Betriebssystem kann nach dem Hinzufügen einer zweiten SATA-Platte zum System nicht mehr booten. Mit dem Wissen, dass keine Komponente defekt ist, was könnte die mögliche Ursache für diesen Fehler sein?
Die Reihenfolge der Bootgeräte sollte im BIOS-Setup konfiguriert werden, andernfalls kann das BIOS den Bootloader möglicherweise nicht ausführen.
-
Sie möchten sicherstellen, dass die externe Grafikkarte, die an den PCI-Bus Ihres neu erworbenen Desktop-Computers angeschlossen ist, wirklich die vom Hersteller beworbene ist, aber das Öffnen des Computergehäuses führt zum Erlöschen der Garantie. Welchen Befehl können Sie verwenden, um die Details der Grafikkarte aufzulisten, wie sie vom Betriebssystem erkannt wurden?
Der Befehl
lspci
listet detaillierte Informationen über alle Geräte auf, die aktuell an den PCI-Bus angeschlossen sind. -
Die folgende Zeile ist Teil der von dem Befehl
lspci
erzeugten Ausgabe:03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2208 [Thunderbolt] (rev 05)
Welchen Befehl sollten Sie ausführen, um das Kernelmodul zu identifizieren, das für dieses spezielle Gerät verwendet wird?
Den Befehl
lspci -s 03:00.0 -v
oderlspci -s 03:00.0 -k
. -
Sie möchten verschiedene Parameter für das
bluetooth
-Kernelmodul ausprobieren, ohne das System neu zu starten. Jeder Versuch, das Modul mitmodprobe -r bluetooth
zu entladen, führt jedoch zu folgendem Fehler:modprobe: FATAL: Module bluetooth is in use.
Was ist die mögliche Ursache für diesen Fehler?
Das Modul
bluetooth
wird von einem laufenden Prozess verwendet.
Lösungen zu den offenen Übungen
-
Ältere Maschinen in Produktionsumgebungen sind nicht ungewöhnlich, z.B. wenn einige Geräte eine veraltete Verbindung zur Kommunikation mit dem steuernden Computer nutzen. Darum müssen einige Besonderheiten dieser älteren Maschinen besonders beachtet werden. Einige x86-Server mit älterer BIOS-Firmware booten zum Beispiel nicht, wenn eine Tastatur nicht erkannt wird. Wie lässt sich dieses spezielle Problem vermeiden?
Das BIOS-Konfigurationsprogramm verfügt über eine Option zum Deaktivieren der Sperre des Computers, wenn keine Tastatur gefunden wird.
-
Betriebssysteme, die um den Linux-Kernel herum aufgebaut sind, sind auch für eine Vielzahl anderer Computerarchitekturen als x86 verfügbar, wie z.B. auf Einplatinencomputern, die auf der ARM-Architektur basieren. Sie werden feststellen, dass der Befehl
lspci
auf solchen Maschinen, wie beispieslweise dem Raspberry Pi, nicht zur Verfügung steht. Welcher Unterschied zu x86-Maschinen rechtfertigt dieses Fehlen?Im Gegensatz zu den meisten x86-Maschinen haben die meisten ARM-basierten Computer wie der Raspberry Pi keinen PCI-Bus, so dass der Befehl
lspci
nicht benötigt wird. -
Viele Netzwerkrouter verfügen über einen USB-Port, an den ein externes Gerät, wie z.B. eine USB-Festplatte, angeschlossen werden kann. Wie wird, da die meisten Router ein Linux-basiertes Betriebssystem nutzen, eine externe USB-Festplatte im Verzeichnis
/dev/
benannt, wenn kein anderes konventionelles Blockgerät im Router vorhanden ist?Moderne Linux-Kernel identifizieren USB-Festplatten als SATA-Geräte, so dass die entsprechende Datei
/dev/sda
heißen wird, da kein anderes konventionelles Blockgerät im System existiert. -
Im Jahr 2018 wurde die als Meltdown bekannte Hardwareschwachstelle entdeckt. Sie betrifft fast alle Prozessoren vieler Architekturen. Neuere Versionen des Linux-Kernels können darüber informieren, ob das aktuelle System verwundbar ist. Wie erhalten Sie diese Informationen?
Die Datei
/proc/cpuinfo
hat eine Zeile mit den bekannten Fehlern für die entsprechende CPU, wie z.B.bugs: cpu_meltdown
.