lunedì 13 dicembre 2010

Aggiungere nuovi moduli al kernel

Per l'aggiunta di nuovi moduli nel kernel l'utente dispone di due comandi: insmod e modprobe. insmod aggiunge un modulo senza fare tanti controlli e questo non è proprio efficiente. Talvolta il caricamento del modulo può fallire se il modulo che stiamo cercando di aggiungere nel kernel dipende da altri moduli. Per questo motivo se aggiungiamo nuovi moduli al kernel con insmod dobbiamo farlo nell'ordine giusto! La sintassi per usare insmod è davvero molto semplice, con insmod NOME_MODULO aggiungiamo il modulo di nome NOME_MODULO al kernel. In alcuni casi occorre specificare a insmod il path per il modulo da aggiungere al kernel (che altrimenti verrà cercato in altre cartelle di sistema). Tale path va eventualmente passato al comando anteponendo un trattino (-) al path stesso (ad esempio: insmod -/home/Downloads/new_module.ko).
modprobe permette sia l'aggiunta che la rimozione di moduli nel kernel. I moduli vengono cercati nella cartella di sistema /lib/modules/VERSIONE_DEL_KERNEL.
Ogni eventuale dipendenza con altri moduli viene risolta mediante l'uso di un albero delle dipendenze, costruito da depmod (che riassume nel file modules.dep tutte le dipendenze fra moduli). Alcune distribuzioni GNU/Linux eseguono il comando depmod -a (all) all'avvio, in questo modo l'intero l'albero delle dipendenze dei moduli viene aggiornato. Se si fa seguire a modprobe il nome del modulo da caricare, verranno allora caricati prima tutti i moduli necessari al modulo indicato sulla riga di comando, quindi, per ultimo, verrà caricato il modulo che abbiamo richiesto.
Se uno dei moduli di supporto al modulo richiesto non viene caricato (in tal caso vi consiglio di cercare eventuali messaggi di errori con dmesg) modprobe provvede alla rimozione dei moduli nel kernel fin li inseriti!
La sintassi, come potete intuire, è nella sua forma base davvero semplice. Con il comando modprobe NOME_MODULO vengono caricati tutti i moduli di supporto al modulo di nome NOME_MODULO, quindi il modulo stesso.
Il comando modprobe prevede diverse opzioni, con -r (remove) il comando rimuove dal kernel il modulo il cui nome viene passato come argomento. Se i moduli di supporto precedentemente caricati per l'avvio di un modulo non servono più verranno anch'essi rimossi dal kernel. Un utile opzione è -l (list) che stampa l'elenco di tutti i moduli disponibili sul sistema! Per filtrare l'output possiamo usare il carattere * per descrivere la base per un nome. Senza dimenticare grep! Con l'opzione -t (type), infine, possiamo caricare nel kernel tutti i moduli di una certa tipologia. L'opzione fa riferimento alle rispettive cartelle di sistema che ospitano i moduli del kernel, come ad esempio: net, sound, drivers. Ad esempio, con il comando modprobe -t net vengono installati tutti i moduli della cartella net. Anche in questo caso possiamo essere più precisi se dopo la tipologia di moduli indichiamo anche una base per i nomi. Ad esempio, modprobe -t net installa tutti i moduli della cartella net. Quest'ultima opzione può essere usata assieme all'opzione -l per limitare la stampa dei moduli disponibili a quella con i moduli del tipo selezionato. Ad esempio, modprobe -l -t drivers elenca tutti i moduli della cartella drivers.
La rimozione di un modulo può avvenire anche con rmmod, che elimina solo il modulo specificato. Meglio allora affidarsi a modprobe -r che, come abbiamo già visto, svolge un ottimo lavoro!

Nessun commento:

Posta un commento