19.05.2008hwsetup - Hardwareerkennung1 Hardwareerkennung und Konfiguration betreut duch Dirk von...

Preview:

Citation preview

19.05.2008 hwsetup - Hardwareerkennung 1

Hardwareerkennung und Konfiguration

betreut duch Dirk von Suchodoletz

Martin Bauer

19.05.2008 hwsetup - Hardwareerkennung 2

Inhaltsangabe

Motivation Voraussetzungen

Hardware Linux Kernel und Module hwsetup und kudzu

Implementierung von hwsetup Zusammenfassung

19.05.2008 hwsetup - Hardwareerkennung 3

Motivation (1)

Hardwareerkennung für Diskless Client System

19.05.2008 hwsetup - Hardwareerkennung 4

Bootvorgang Terminal

DHCP/PXE der Netzwerkkarte tftp download des Kernel/initial RAM Disk Laden Kernel Laden Initrd (busybox) * rootfs per nfs einbinden Startvorgang init V *

* Hardwareerkennung möglich

19.05.2008 hwsetup - Hardwareerkennung 5

Motivation (2)

speichersparend und kompakt portabel und flexibel, damit universell

einsetzbar einfache Implementierung für einfach

Erweiterbarkeit auf Standards basierend, Vermeidung

von Abhängigkeiten an Kernelpatchs oder Bibliotheken

schnelle Erkennungsgeschwindigkeit

19.05.2008 hwsetup - Hardwareerkennung 6

Aufbau Hardware

CPU <–> PCI-Bus <-> USB-Bus Geräte hängen an Bus Brücken

verbindenBusse

Baum-struktur

19.05.2008 hwsetup - Hardwareerkennung 7

Aufbau von Linux

Kernel System.map

Module modules.dep ; Abhängigkeiten modules.pcimap ; Zuordnung modules.usbmap ; Geräte-Nr. <-> Module modprobe

19.05.2008 hwsetup - Hardwareerkennung 8

Voraussetzung

Kernel >= 2.6 hotplug udev

hwsetup aus Knoppix basierend auf libkudzu

19.05.2008 hwsetup - Hardwareerkennung 9

hwsetup

Erkennen und Laden von Modulen Nutzung von Funktionsaufrufen der kudzu

Bibliothek Geräteerkennung Auflösen der PCI Gerätebezeichnung

Erstellung einiger Gerätedateien (/dev/mouse)

X System konfiguration

19.05.2008 hwsetup - Hardwareerkennung 10

libkudzu (1)

Konfiguration von Hardware (modprobe) Ausgabe in Datenbank

/etc/sysconfig/hwconfig leistungsfähige Ausnahmebehandlung Auflösung der PCI IDs

pci.ids pcitable Cards

19.05.2008 hwsetup - Hardwareerkennung 11

libkudzu (2)

Erkennung einer Vielzahl an Hardwareklassen PCI/USB/Firewire/ISAPNP/ IDE/SCSI/PCMCIA seriell/parallel/psaux/keyboards SBUS/DDC S390/VIO

19.05.2008 hwsetup - Hardwareerkennung 12

hotplug

hotplug: Hardwarewechsel im laufenden Betrieb

Module werden durch Kernel geladen Erkennung neu eingesteckter Hardware Unterstützung nicht für aller Busse

verfügbar (nur sysfs)

19.05.2008 hwsetup - Hardwareerkennung 13

udev

Konfiguration und Gerätedateihandling aus sysfs

läuft im userspace regelbasierend bietet keine Hardwareerkennung

(hwsetup/hotplugd)

19.05.2008 hwsetup - Hardwareerkennung 14

hwsetup + hotplug + udev

19.05.2008 hwsetup - Hardwareerkennung 15

Implementierung

19.05.2008 hwsetup - Hardwareerkennung 16

19.05.2008 hwsetup - Hardwareerkennung 17

Optimierungen (1)

Verzicht auf libkudzu Nachbildung von

struct device **deviceList; deviceList probeDevices(device);

Zeiger auf Funktionen probeDevice = probeDeviceXXX // XXX={PCI,USB}

erweiterbar durch weitere Geräteklassen (firewire..)

19.05.2008 hwsetup - Hardwareerkennung 18

Optimierung (2)

Repräsentation eines Gerät als Struktur

struct device {struct device* next; /* SLL */enum deviceClass type; /* type of Device */enum deviceBus bus; /* bus it's attached to */char* module; /* driver name, else NULL */char* desc; /* a description */int vendorId;int deviceId;

};

19.05.2008 hwsetup - Hardwareerkennung 19

Optimierungen (3)

weiterer Verzicht auf: X Server Konfiguration Ausgabe in Datenbank

/etc/sysconfig/hwconfig pcitable/Cards Erkennungsdatenbanken umfangreiche Ausnahmebehandlungen

(IRQ/MEM)

19.05.2008 hwsetup - Hardwareerkennung 20

Optimierungen (4)

Auflösen der Geräte IDs in Namen durch Methode getDescription(device) deviceID, vendorID -> Gerätename /usr/share/misc/pci.ids

http://pciids.sf.net/pci.db /usr/share/misc/usb.ids

http://linux-usb.sourceforge.net/usb.ids auch für Bildschirm/Grafikkarten erhältlich... für Hardwareerkennung nur optional

19.05.2008 hwsetup - Hardwareerkennung 21

Optimierungen (5)

Steuerung von Verhalten durch: Kommandozeilenparameter Konfigurationsdatei

modprobe.conf Syntax alias blacklist verbose

19.05.2008 hwsetup - Hardwareerkennung 22

Optimierungen (6)

Lokalität der Daten in RAM-Speicher Einlesen der Datei modules.*map

*={pci,usb} Einlesen der Geräte-ID in verketteten Listen Einlesen der Blacklist/Aliases aus

Konfigurationsdatei Ziel: beschleunigter Lookup

Nutzung von verketteten Listen

19.05.2008 hwsetup - Hardwareerkennung 23

19.05.2008 hwsetup - Hardwareerkennung 24

19.05.2008 hwsetup - Hardwareerkennung 25

19.05.2008 hwsetup - Hardwareerkennung 26

Quellen RedHat kudzu

http://elvis.redhat.com/kudzu

The PCI Utilities

http://mj.ucw.cz/pciutils.shtml

libusb Developers Guide

http://libusb.sourceforge.net/

“Linux Gerätetreiber”, O'Reilly

Allessandro Rubini, Jonathan Corbet

“Programmieren in C, ANSI C“, Hanser Verlag

Kernighan, Ritchie

Die Netzstarter, Diskless Clients unter Linux“, Linux Magazin 01/03

Dirk von Suchodoletz

19.05.2008 hwsetup - Hardwareerkennung 27

Zusammenfassung & Fragen

Vielen Dank für die Aufmerksamkeit

Recommended