Chapter 18. Il sistema hotplug

Table of Contents

18.1. Dispositivi e interfacce
18.2. Eventi hotplug
18.3. Agenti hotplug
18.4. Caricamento automatico di moduli
18.5. Hotplug con PCI
18.6. Script di boot coldplug e hotplug
18.7. Il debug

Abstract

Il sistema hotplug di deriva dal Linux Hotplug Project anche se per alcuni aspetti si differenzia da esso. La differenza principale consiste nel fatto che sotto non viene utilizzato il multiplexer degli eventi /etc/hotplug.d ma gli script hotplug vengono invocati direttamente. Inoltre /sbin/hwup e /sbin/hwdown servono a inizializzare o fermare dei dispositivi.

Il sistema hotplug non viene utilizzato solo per connettere e disconnettere dei dispositivi con il sistema in esecuzione ma anche per tutti i dispositivi che vengono rilevati solo dopo l'avvio del kernel. Questi dispositivi sono riportati nel file system sysfs che ha /sys come punto di montaggio. Prima dell'avvio del kernel vengono inizializzati solo i dispositivi assolutamente necessari come il sistema di bus, dischetti di avviamento o tastiera.

Solitamente i dispositivi vengono rilevati da un driver e viene innescato un evento hotplug che viene gestito dagli script adatti. Vi sono però dei dispositivi che non vengono rilevati automaticamente. In questi casi vi è vi è il coldplug, che applica senza distinzione alcuna una configurazione statica ai dispositivi non rilevati.

Fatta l'eccezione per un numero ristretto di dispositivi, la maggiore parte dei dispositivi viene inizializzata al boot o al momento della connessione. Al processo di inizializzazione segue spesso la registrazione dell'interfaccia. Registrando l'interfaccia vengono innescati degli eventi hotplug a sua volte degli eventi hotplug che comportano una configurazione automatica dell'interfaccia in questione. Mentre in passato si partiva da un set di dati di configurazione applicando i quali produceva l'inizializzazione dei dispositivi, oggi si procede in modo esattamente inverso, ovvero si parte dai dispositivi presente e si cercano i dati di configurazione adatti. Questo approccio consente di maneggiare in modo più flessibile i dispositivi hotplug.

Le principali funzionalità hotplug vengono configurate tramite due file: in /etc/sysconfig/hotplug trovate le variabili che determinano il comportamento di hotplug e coldplug. Ogni variabile viene illustrata da un commento. Il file /proc/sys/kernel/hotplug contiene il nome del programma eseguibile che viene invocato dal kernel. Le configurazione dei dispositivi sono reperibili sotto /etc/sysconfig/hardware.

18.1. Dispositivi e interfacce

Un dispositivo (ingl. device) è sempre connesso ad una interfaccia; un bus può essere considerato un'interfaccia multipla. Oltre a dispositivi fisici vi sono anche dispositivi virtuali (ad es. tunnel di rete). Ogni interfaccia (ingl. interface) è connessa ad un ulteriore dispositivo o ad una applicazione. Ai fini di una migliore compresione del concetto nel suo insieme è essenziale distinguere tra dispositivo e interfaccia.

I dispositivi registrati in sysfs sono riportati sotto /sys/devices, le interfacce si trovano sotto /sys/class o /sys/block. Tutte le interfacce del file sysfs dovrebbero avere un riferimento (ingl. link) che punta sul rispettivo dispositivo, tuttavia vi sono ancora dei driver che non creano questo riferimento in modo automatico.

I dispositivi vengono indirizzati tramite una descrizione del dispositivo. Può trattarsi della “devicepath” in sysfs (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0) la descrizione del punto di connessione (bus-pci-0000:02:00.0), un proprio ID (id-32311AE03FB82538) o qualcosa di simile. Le interfaccia finora venivano indirizzate tramite il loro nome. Questo nome è in fin dei conti solo un numero nella sequenza dei dispositivi presenti e quindi possono cambiare se si aggiunge un dispositivo o se ne si rimuove uno. Quindi anche le interfaccia possono essere indirizzate tramite la descrizione del rispettivo dispositivo. Di solito è il contesto a chiarire se si intende la descrizione del dispositivo o la rispettiva interfaccia. Ecco degli esempi tipici per dispositivi, interfacce e rispettiva descrizione:

Scheda di rete PCI

Un dispositivo connesso al bus PCI (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0 o bus-pci-0000:02:00.0) e che dispone di una interfaccia di rete (eth0, id-00:0d:60:7f:0b:22 o bus-pci-0000:02:00.0). L'interfaccia viene utilizzata dai servizi di rete o è connessa a dispositivi di rete virtuali come tunnel o VLAN, che a sua volta ha una propria interfaccia.

Controller SCSI PCI

Un dispositivo (/sys/devices/pci0000:20/0000:20:01.1 etc.) che mette a disposizione diverse interfacce fisiche sotto forma di un bus (/sys/class/scsi_host/host1).

Dischi rigidi SCSI

Un dispositivo (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0) con diverse interfacce (/sys/block/sda*).