Tratto da un’email inviata all’autore di Kerneler:
Innanzitutto ti ringrazio per il lavoro svolto con kerneler, in questi
giorni l’ho usato un po e l’ho trovato veramente utile.
Qualche mese fa mi sono chiesto se fosse possibile sapere con
precisione quali opzioni abilitare, in base al proprio hardware, per
ricompilare il kernel, così dopo tante ricerche ho trovato un link a
questo libro in inglese che parla proprio di questo
http://www.kroah.com/lkn/
Il libro è molto interessante, sfruttando anche gli script allegati ho
provato ad automatizzare il tutto. Alla fine ho scritto un piccolo
script per la rilevazione automatica dei moduli da abilitare.
ecco cosa fa:
cerca nel sysfs i moduli relativi all’hardware in uso, poi prova a
caricarli con modprobe (se il modulo esiste viene aggiunto al file
./temp/moduli), a questo punto il problema è che nella configurazione
del kernel i nomi dei dispositivi sono diversi dai nomi dei moduli
quindi lo script fa una ricerca all’interno dei sorgenti del kernel
per associare il nome del modulo al nome del dispositivo all’interno
del kernel. Dopo vari raffinamenti i nomi dei dispositivi vengono
scritti in ordine alfabetico e senza ripetizioni nel file ./temp/ker
(nella versione modificata non vengono ordinati, e viene scritto il
nome del modulo a cui si riferiscono).
Ora arriva la parte più difficile, in poche parole si deve compilare
il menuconfig del kernel e fare una ricerca digitando “/” nel menu di
configurazione del kernel. Scrivendo il nome del dispositivo il
menuconfig restituisce le opzioni da abilitare e le relative
dipendenze.
Anche qui ho cercato di automatizzare quindi ho preso i sorgenti del
kernel e sono andato a modificare il menù di configurazione in
particolare il file “mconf.c” ed ho aggiunto una funzione static void
search_conf_file(void) richiamabile dal menù di configurazione. Questa
funzione prende in input il file contenente tutti i dispositivi
(./temp/ker) e attraverso le stesse funzioni utilizzate dal seach
genera la lista completa di tutte le voci da abilitare e le relative
dipendenze, infine il tutto viene scritto in un file che ha il nome
che scegliamo noi nel menuconfig richiamando la funzione.
Il tutto và sicuramente molto raffinato, perchè allo stato attuale
serve ancora un intervento umano per capire se i moduli che vengono
suggeriti sono realmente esatti, ma quando tutto il processo sarà più
preciso sarà facile fargli compilare in automatico il config del
kernel con i moduli per l’hardware in uso.
Questi sono i passi da seguire per rendere il tutto funzionante:
1. copiare il file modconf.sh nella dir del kernel
2. avviare lo script che creerà i file /temp/moduli e /temp/ker nella
directory del kernel
3. sostituire il file /scripts/kconfig/mconf.c con il mio modificato,
oppure (meglio) aggiungere la funzione che ho riscritto static void
search_conf_file(void) e queste righe per aggiungere la voce che
attiva la mia funzione:
riga 634 (del file originale):
item_make(_(" Load Hardware Detection"));
item_set_tag('H');
riga 682 (del file originale):
case 'H':
search_conf_file();
break;
4. avviare la compilazione del menuconfig con il classico make menuconfig
5. dal menù principale selezionare Load Hardware Detection
6. digitare il nome del file in cui verranno salvate le impostazioni
per il kernel
7. premere invio, pazientare un po, a questo punto avremo il nostro
file contenente le impostazioni da abilitare e le relative dipendenze
NB: Tutto il lavoro in particolare la parte del menuconfig è ad uno
stato embrionale, anche se funzionante va un attimo rivisto per renderlo più
sicuro.
Il kernel su cui è stato testato è il 2.6.22.
In puro spirito opensource allego i miei file che mi sono costati diversi giorni di lavoro per capire come funzionava il tutto, fatene buon uso!
E se fate qualche modifica fatemelo sapere!
http://www.megaupload.com/?d=HTSKE26G
27 Marzo, 2008 alle 5:10 pm
Ottimo lavoro, raffinandolo un pò potresti anche portarlo come argomento di tesi!
3 Aprile, 2008 alle 11:35 pm
@mrroba: grazie per la segnalazione! Comunque è previsto che quello script dia questi errori, anche sul libro che ho linkato se ne parla… questo succede perchè lo script prova a caricare dei moduli che non ci sono nel kernel in uso (molto probabilmente perchè non esistono) che comunque non servono per il corretto funzionamento dell’hardware in uso, il menuconfig modificato usa poi il risultato utile di quello script per fare una ricerca delle voci da abilitare.
16 Giugno, 2008 alle 9:40 am
Riprenderai in mano la cosa ? Perchè è uno dei progetti più interessanti e ambiziosi che ci siano in giro.
25 Luglio, 2008 alle 11:40 pm
arcano scrivevi sul forum di aessenet qualche anno fa?
26 Luglio, 2008 alle 6:47 pm
grazie a tutti dei commenti!
@f48r1z10: ci faccio un pensierino però dubito che qualche prof me lo possa approvare come argomento di tesi
@shosholoza: mi fa piacere che il progetto interessi, purtroppo con lo studio rimane sempre poco tempo, se ci sarà collaborazione e interesse da parte di qualcun altro potrei riprendere…
@x0r: no non ero io… in effetti ci deve essere in giro qualcun altro con il mio stesso nick, ogni volta che mi registro da qualche parte il mio nick è già stato preso.
1 Agosto, 2008 alle 9:12 pm
Potresti ripescare la tua discussione sul forum di ubuntu
, chissà …