View previous topic :: View next topic |
Author |
Message |
motaboy Developer
Joined: 15 Dec 2003 Posts: 1483
|
Posted: Thu Jul 08, 2004 2:03 pm Post subject: [HOWTO] Cosa é, e come funziona hotplug. |
|
|
Cosa é, e come funziona hotplug.
Introduzione.
Ho deciso di scrivere questa mini documentazione per cercare di chiarire vari dubbi sul funzionamento di hotplug e su cosa É in realtá hotplug. Infatti solo oggi mi é capitato di leggere vari post in cui vi fosse un pó di confusione. E mi é sembrato bello cercare di fare un pó di chiarezza.
Ovviamente lo so che a molti non gliene frega niente dei dettagli (l'importante é che vada), peró se cé qualcuno curioso questo dovrebbe tornare utile.
Ma allora cosa é hotplug?
Hotplug non é un programma e basta, hotplug é tante cose.
Quando il kernel interroga i vari bus (PCI, USB, ISAPNP, FIREWIRE, INPUT, PCMCIA(in arrivo)) o quando crea interfacce di rete, trova block devices (harddisk, chiavi usb etc...), esso genera un evento.
Ossia chiama un programma denominato appunto "hotplug" (solitamento presente in /sbin/hotplug, ma settabile in /proc/sys/kernel/hotplug) passandogli varie variabili d'ambiente e come argomento il tipo di evento (usb, pci, isapnp, net, ieee1394, printer, disk, parport, input, ide, cpu, system ecc...).
Le variabili d'ambiente variano in base al tipo di evento.
Per esempio per un evento di tipo PCI esse sono:
Code: |
ACTION=%s [add or remove]
PCI_CLASS=%06X
PCI_ID=%04X:%04X
PCI_SLOT_NAME=%s
PCI_SUBSYS_ID=%04X:%04X
|
Cosa avviene una volta che il kernel ha invocato "hotplug"?
Questo programma, in una installazione standard non é altro che uno script di qualche riga che richiama gli script (o programmi) contenuti in /etc/hotplug.d
Qua ci sono varie directory, ognuna col nome del tipo di evento (come sempre pci, usb, block etc...). Vi é anche una directory chiamata "default" e invocata per qualsiasi evento.
Gli script, per essere invocati, devono avere estensione .hotplug.
Tutti gli script relativi all'evento (quelli in default sempre) vengono chiamati con le stesse variabili d'ambiente passate dal kernel ad hotplug.
Ora c'é da fare una precisazione.
Molti pensano che hotplug sia "il programma che carica i moduli delle periferiche trovate".
NIENTE DI PIÚ SBAGLIATO. Esso é solo una piccola parte di quello che puó fare hotplug.
Se per caso avete installato "udev" vedrete con in /etc/hotplug.d/default esiste anche un link chiamato udev.hotplug che punta ad "udevsend", infatti anche udev utilizza hotplug. Lo stesso lo fa "hal".
Come fa hotplug a caricare i moduli delle periferiche.
Se guardate in /etc/hotplug.d/default vedrete uno script chiamato default.hotplug. QUESTO é colui che si occupa di chiamare gli agenti (altri script) presenti in /etc/hotplug (NON /etc/hotplug.d). Sono essi che si occupano di caricare i moduli relativi a quell'evento (come funzionano lo spiego dopo).
MA QUESTO AVVIENE solo quando una periferica viene inserita a kernel giá completamente avviato (tipo quelle usb).
Ma molte periferiche vengono viste dal kernel mentre si sta avviando, quando esso non puó ancora accedere all'harddisk e quindi invocare hotplug (oltre al fatto che non sarebbe ancora configurato dagli script di init).
Allora come fanno a essere caricati i moduli?
Questa funzione viene detta "ColdPlug" per distinguerla dall'hotplug. In pratica il servizio in /etc/init.d/hotplug invoca tutti gli script con estensione ".rc" presenti in /etc/hotplug.
Questi script ".rc" guardano nel procfs (kernel 2.4) o nel sysfs (kernel 2.6) per ricavare le variabili di ambiente necessarie e chiamano gli script ".agent".
Come funzionano gli "agenti" ?
Un agente riceve in pratica le informazioni necessarie per discriminare una periferica (ogni periferica possiede uno o piú id che la identifica in modo abbastanza univoco, ovvviamente il metodo cambia da tipo a tipo, quelle con piú informazioni sono quelle usb).
Da queste informazioni esso deve ricavare il modulo associato a quella periferica.
Per fare ció esso va a vedere nei files presenti in /lib/module/`uname -r`/modules.XXXXmap (XXXX = pci, usb ...) .
Questi file vengono generati da depmod solitamente quando si da un "make modules_install", e comunque ogni volta che viene avviato il sistema viene lanciato depmod dagli script di init, quando dice "Calculating modules dependencies".
Se guardate questi file vedrete che ogni riga inizia col nome del modulo e in seguito ci sono vari numeri esadecimali, essi sono gli id di tutte le periferiche supportate da quel modulo.
Confrontando questi valori con quelli passati, l'agente riesce a determinare il modulo e a caricarlo (con modprobe).
I moduli, per esportare gli id, utilizzano al loro interno la macro MODULE_DEVICE_TABLE, a cui passano uno struttura dati (definita in un determinato modo) contenente gli id. Grazie a questo depmod riesce a generare i file con gli id.
Conclusione.
Ci sarebbero tante altre cose da dire, ma mi sembra giá troppo lungo, comunque per ogni dubbio chiedete e (se lo so) vi risponderó.
Spero comunque che vi ritorni utile. _________________ ...
Last edited by motaboy on Sun Jul 11, 2004 3:19 pm; edited 4 times in total |
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 30917 Location: here
|
Posted: Thu Jul 08, 2004 2:08 pm Post subject: |
|
|
Ottimo howto direttamente nei post utilissimi _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
motaboy Developer
Joined: 15 Dec 2003 Posts: 1483
|
Posted: Thu Jul 08, 2004 2:12 pm Post subject: |
|
|
Grassie! (emozione...) _________________ ... |
|
Back to top |
|
|
marco86 Guru
Joined: 04 Jun 2004 Posts: 574 Location: /italy/torino/valli_di_Lanzo
|
Posted: Thu Jul 08, 2004 2:27 pm Post subject: |
|
|
motaboy wrote: | Infatti solo oggi mi é capitato di leggere vari post in cui vi fosse un pó di confusione. E mi é sembrato bello cercare di fare un pó di chiarezza.
Ovviamente lo so che a molti non gliene frega niente dei dettagli (l'importante é che vada), peró se cé qualcuno curioso questo dovrebbe tornare utile.
|
Suppongo che ti riferivi anvhe a me, adesso mi è più chiaro, bell'idea, grazie! Questo mini HOW-TO chiarirà sicuramente le idee a chi aveva le idee un pò confuse come me
P.S.sono io il genio che aveva detto...
Quote: | Molti pensano che hotplug sia "il programma che carica i moduli delle periferiche trovate". |
Adesso mi è chiaro, GRAZIE _________________ Se il destino è contro di noi...bhe, peggio per lui....!! |
|
Back to top |
|
|
motaboy Developer
Joined: 15 Dec 2003 Posts: 1483
|
Posted: Thu Jul 08, 2004 2:36 pm Post subject: |
|
|
Non mi riferivo solamente a te ma anche a me stesso, prima che mi mettessi li a cercare di capire come funzionava.
Credo che la confusione sia dovuta ai nomi che sono sempre gli stessi (hotplug) ma utilizzati per varie cose.
Probabilmente una scelta un pó piú oculata dei nomi ne avrebbe creata di meno.
P.S. Tu avevi detto che hotplug fa lo scan dell'hardware _________________ ... |
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Thu Jul 08, 2004 2:47 pm Post subject: |
|
|
Molto interessante, grassie _________________ Ciao da me! |
|
Back to top |
|
|
theRealMorpheu5 l33t
Joined: 26 Feb 2004 Posts: 841 Location: Vicenza, IT
|
Posted: Thu Jul 08, 2004 3:12 pm Post subject: |
|
|
Dove cacchio è la faccina che applaude? |
|
Back to top |
|
|
Panda Apprentice
Joined: 31 Jul 2003 Posts: 223 Location: Cremona <=> Catania
|
Posted: Sat Jul 10, 2004 8:53 pm Post subject: |
|
|
Spettacolo! Mi tornera' utile per il mio OSDhotplug, appena finiti sti cacchio di esami |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Sat Jul 10, 2004 9:26 pm Post subject: |
|
|
tu sei un grande.
EDIT: puoi aggiungere degli esempi pratici su come agganciare a usb.usermap degli script a device specifici (es. chiavette usb, fotocamere) e come sono strutturati gli script? (es. $REMOVER) _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
motaboy Developer
Joined: 15 Dec 2003 Posts: 1483
|
Posted: Sun Jul 11, 2004 9:53 am Post subject: |
|
|
FonderiaDigitale wrote: | tu sei un grande.
EDIT: puoi aggiungere degli esempi pratici su come agganciare a usb.usermap degli script a device specifici (es. chiavette usb, fotocamere) e come sono strutturati gli script? (es. $REMOVER) |
Ooook. Se siete interessati posso aggiungere qualcosa. Comunque anche tu fonderia sei ben informato quindi se vuoi mettere qualcosa ben venga!
EDIT: Potrei prendere come esempio gli script installati da sane, per cercare di spiegarne l'utilitá. _________________ ... |
|
Back to top |
|
|
SilverXXX l33t
Joined: 18 Sep 2004 Posts: 885
|
Posted: Wed Dec 15, 2004 7:36 pm Post subject: |
|
|
GRANDE! Stavo cercando di fare uno script per gli usb-storage, e mi stavo arenando inesorabilmente (anche perchè non ho trovato una guida chiara), ma adesso aspetto le tue aggiunte, che magari riesco a cavarci qualcosa. _________________ about:mozilla |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|