Schnellreferenz

Dieser Abschnitt faßt wie üblich die in diesem Kapitel eingeführten Symbole zusammen.

#include <linux/config.h>, CONFIG_PCI

Dieses Makro sollte für die bedingte Kompilation von PCI-Code verwendet werden. Wenn ein PCI-Modul in einen Nicht-PCI-Kernel geladen wird, beschwert sich insmod über eine Reihe nicht aufgelöster Symbole.

#include <linux/pci.h>

Diese Header-Datei enthält symbolische Namen für die PCI-Register und viele Werte für vendor und deviceID.

int pci_present(void);

Diese Funktion gibt einen Booleschen Wert zurück, der bangibt, ob der Rechner einen PCI-Bus hat oder nicht.

struct pci_dev;, struct pci_bus;, struct pci_driver;, struct pci_device_id;

Diese Strukturen repräsentieren die in der PCI-Verwaltung verwendeten Objekte. Das Konzept von pci_driver ist neu in Linux 2.4; struct pci_device_id ist hier ein zentrales Element.

struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, struct pci_dev *from);, struct pci_dev *pci_find_class(unsigned int class, struct pci_dev *from);

Diese Funktionen werden dazu verwendet, in der Geräteliste nach Geräten mit bestimmten Signaturen oder bestimmten Klassen zu suchen. Wenn keine gefunden werden, wird NULL zurückgegeben. from wird verwendet, um eine Suche fortzusetzen; dieser Parameter muß beim ersten Aufruf NULL sein und bei jedem weiteren Aufruf auf das zuletzt gefundene Gerät verweisen.

int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);, int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);, int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);, int pci_write_config_byte (struct pci_dev *dev, int where, u8 *val);, int pci_write_config_word (struct pci_dev *dev, int where, u16 *val);, int pci_write_config_dword (struct pci_dev *dev, int where, u32 *val);

Diese Funktionen werden zum Lesen oder Schreiben eines PCI-Konfigurationsregisters verwendet. Auch wenn der Linux-Kernel sich um die Byte-Reihenfolge kümmert, muß man als Programmierer vorsichtig sein, wenn man mehr-bytige Werte aus einzelnen Bytes zusammensetzt. Der PCI-Bus verwendet die Little-Endian-Reihenfolge.

int pci_register_driver(struct pci_driver *drv);, int pci_module_init(struct pci_driver *drv);, void pci_unregister_driver(struct pci_driver *drv);

Diese Funktionen unterstützen das Konzept eines PCI-Treibers. Einkompilierter Code verwendet pci_register_driver (das eine Reihe von Geräten zurückgibt, die von diesem Treiber verwaltet werden), modularisierter Code sollte statt dessen pci_module_init aufrufen (das 0 zurückgibt, wenn eines oder mehrere Geräte vorhanden sind, sowie -ENODEV, wenn kein passendes Gerät in das System eingesteckt ist).

#include <linux/usb.h>, #include <linux/input.h>

Die erste Datei enthält alles zu USB und muß von USB-Gerätetreibern eingebunden werden. Die zweite Datei definiert den Kern des Eingabe-Subsystems. Keine dieser Dateien gibt es in Linux 2.0.

struct usb_driver;, int usb_register(struct usb_driver *d);, void usb_deregister(struct usb_driver *d);

usb_driver ist der wichtigste Baustein von USB-Gerätetreibern. Eine solche Struktur muß beim Laden beziehungsweise Entladen des Moduls registriert beziehungsweise deregistriert werden.