2012-07-13 2 views
9

Sto sviluppando i moduli del kernel in questo momento, e i tempi di compilazione stanno iniziando a farsi sotto la pelle. Come effetto collaterale sto prendendo troppe pause "caffè" durante le build.Cercando di trovare tutti i moduli del kernel necessari per la mia macchina usando lo script di shell

Quindi stavo cercando un modo per costruire solo gli elementi necessari per la mia piattaforma. I capitoli 7 e 8 di "linux kernel in poche parole" hanno fornito un buon dettaglio su come farlo a mano. È una buona lettura: http://www.kroah.com/lkn/

Ma anche se capisco le cose, questo è ancora un sacco di modifiche per farlo funzionare.

2.6.32 e successivi kernel hanno aggiunto un nuovo target make localmodconfig. che esegue la scansione tramite lsmod e modifica il file .config in modo appropriato. Quindi pensavo di aver trovato la mia "automazione". Ma questo script perl ha anche qualche problema.

Questo thread descrive i problemi: https://bbs.archlinux.org/viewtopic.php?pid=845113

C'era anche una proposta di soluzione che apparentemente ha lavorato per gli altri, è quello di eseguire lo script direttamente invece di utilizzare il bersaglio di marca.

Anche se per me, make localmodconfig non funziona affatto. la sua per i seguenti motivi:

make clean 
make mrproper 
cp /boo/config-'uname -r' .config 
make localmodconfig 

ed è ferma con

vboxguest config not found!! 
nf_defrag_ipv6 config not found!! 
vboxsf config not found!! 
vboxvideo config not found!! 

La cosa è il mio ambiente di sviluppo del kernel è dentro VirtualBox. Questi moduli vbox sono stati installati quando ho scelto di installare "virtualbox guest addtion".

E il modulo netfilter potrebbe essere un modulo di distribuzione specifico (molti moduli netfilter non fanno parte del kernel della linea principale, quindi non è uno shock per me), che non è incluso nel kernel mainline.

Ora la soluzione è ovviamente quella di scaricare questi moduli e riprovare. Ma penso che ci sia una patch per lo che consentirà all'utente di escludere determinati moduli se lo desidera. Il problema è che ho zero conoscenze su perl e mi piace così.

Così i miei problemi in poche parole

  1. Patching streamline_config.pl in modo da poter dare un elenco di nome del modulo come argomento che escluderà dalla elaborazione del file di configurazione.

    Lo script si trova a kernel.org

  2. EDIT: rimosso il roba circa script perl non è in esecuzione. Come ha sottolineato mugen kenichi (Quanto posso essere stupido?). Resta comunque il fatto che localmodconfig non funziona perché non si dispone di codice di alcuni moduli nell'albero dei sorgenti. patching streamline_config.pl requisito ancora valido.

+2

non è possibile eseguire uno script Perl con 'sh'. Prova 'perl' e non otterrai gli errori' my: comando non trovato' e gli errori o gli avvisi perl. –

+0

Sembra che io sia il ragazzo più stupido del mondo. Come potrei farlo :) – Aftnix

+0

Lo script fallisce davvero? Dal codice sembra che stampi solo errori, ma non fallisce se il codice di un modulo non è nella struttura. Vedi [riga 375] (http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=scripts/kconfig/streamline_config.pl;h=bccf07ddd0b67a0e2f761fd5721f274a49bf9bbb ; hb = HEAD # l375) –

risposta

8

Chiunque altro cercando di costruire un'immagine del kernel minima anche alla ricerca di ridurre i tempi di costruzione, dovrebbe effettuare le seguenti operazioni:

1) copia di distribuzione configurazione del kernel nel vostro albero dei sorgenti.Può essere fatto sia con il comando riportato qui di seguito:

$zcat /proc/config.gz > .config 

o

$cp /boot/config-'uname -r' .config 

2) Utilizzare localmodconfig bersaglio.

$make localmodconfig 

Userà lsmod per trovare quale i moduli vengono caricati in questo momento. Quindi cercherà attraverso .config della distribuzione per abilitarli e disabilitare gli altri.

È importante sapere che non sempre funziona in modo impeccabile. Quindi dovresti modificare ulteriormente la tua configurazione usando make menuconfig. Vedrete alcuni moduli sono ancora contrassegnati per essere costruiti che in realtà non è necessario per il vostro sistema.

A volte i moduli esterni potrebbero causare il fallimento di localmodconfig. Se questo è il caso si può lavorare intorno a quel problema in due modi:

a) scaricare i moduli di albero e provare make localmodconfig di nuovo. b) Eseguire lo script perl direttamente:

$chmod +x script/kconfig/streamline_config.pl 
$perl script/kconfig/streamline_config.pl > .config 

3) Installare ccache [1]. Migliorerà notevolmente il tempo di costruzione. Mette in cache oggetti. Quindi ridurrà le build successive.

È possibile che ccache sia incluso nel repository della distribuzione in modo che sia possibile installarlo tramite apt-get o yum. In CentOS è disponibile nel repository EPEL. [2]

4) Dare il maggior numero di core possibili per il lavoro composto

$make -j8 CC="ccache gcc" 

I miei risultati sono:

real 3m10.871s 
user 4m36.949s 
sys 1m52.656s 

[1] http://ccache.samba.org/ [2] http://fedoraproject.org/wiki/EPEL

+1

mi hai appena risparmiato ore passate attraverso la configurazione (con mio figlio che interferiva con la mia digitazione ☺). Con il tuo consiglio potrei passare alla compilazione di tutti i moduli attivi con un semplice script sed. Grazie! 'Cp .config .config- vecchio; make localmodconfig; per i in $ (grep = m .config | xargs); fai sed "s/$ i/$ (echo $ i | sed s/= m/= y /) /" -i .config- vecchio; cp .config-old .config; done' –

+1

Bello sapere che questo ti ha aiutato. – Aftnix

+0

non è lo script streamline_config.pl in "script" e non "script"? –