Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] Cosa é, e come funziona hotplug.
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
motaboy
Developer
Developer


Joined: 15 Dec 2003
Posts: 1483

PostPosted: Thu Jul 08, 2004 2:03 pm    Post subject: [HOWTO] Cosa é, e come funziona hotplug. Reply with quote

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
View user's profile Send private message
fedeliallalinea
Bodhisattva
Bodhisattva


Joined: 08 Mar 2003
Posts: 13200
Location: here

PostPosted: Thu Jul 08, 2004 2:08 pm    Post subject: Reply with quote

Ottimo howto direttamente nei post utilissimi
_________________
"aspetto un'emozione sempre più indefinibile"
- CCCP -
"la libertà un doveroso pericolo in verità"
- PGR -
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
motaboy
Developer
Developer


Joined: 15 Dec 2003
Posts: 1483

PostPosted: Thu Jul 08, 2004 2:12 pm    Post subject: Reply with quote

Grassie! :oops: (emozione...) :oops:
_________________
...
Back to top
View user's profile Send private message
marco86
Guru
Guru


Joined: 04 Jun 2004
Posts: 574
Location: /italy/torino/valli_di_Lanzo

PostPosted: Thu Jul 08, 2004 2:27 pm    Post subject: Reply with quote

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 :oops:

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
View user's profile Send private message
motaboy
Developer
Developer


Joined: 15 Dec 2003
Posts: 1483

PostPosted: Thu Jul 08, 2004 2:36 pm    Post subject: Reply with quote

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.

:lol: P.S. Tu avevi detto che hotplug fa lo scan dell'hardware :lol:
_________________
...
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Thu Jul 08, 2004 2:47 pm    Post subject: Reply with quote

Molto interessante, grassie :-)
_________________
Ciao da me!
Back to top
View user's profile Send private message
theRealMorpheu5
l33t
l33t


Joined: 26 Feb 2004
Posts: 841
Location: Vicenza, IT

PostPosted: Thu Jul 08, 2004 3:12 pm    Post subject: Reply with quote

Dove cacchio è la faccina che applaude? :lol:
Back to top
View user's profile Send private message
Panda
Apprentice
Apprentice


Joined: 31 Jul 2003
Posts: 223
Location: Cremona <=> Catania

PostPosted: Sat Jul 10, 2004 8:53 pm    Post subject: Reply with quote

Spettacolo! Mi tornera' utile per il mio OSDhotplug, appena finiti sti cacchio di esami :D
Back to top
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Sat Jul 10, 2004 9:26 pm    Post subject: Reply with quote

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
View user's profile Send private message
motaboy
Developer
Developer


Joined: 15 Dec 2003
Posts: 1483

PostPosted: Sun Jul 11, 2004 9:53 am    Post subject: Reply with quote

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
View user's profile Send private message
SilverXXX
l33t
l33t


Joined: 18 Sep 2004
Posts: 885

PostPosted: Wed Dec 15, 2004 7:36 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
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