# de kernel compilatio :)

## MajinJoko

Buongiorno a tutti.

Ho una domanda che mi gira nella testa, e che giro a voi.

Negli anni ho sempre avuto l'impressione che la prima volta che compilo un kernel ci mette una vita, e durante le successive si limita a compilare solo le modifiche fatte, quindi ci mette un sacco di meno.

Da qualche tempo ho compilato un kernel completamente ex-novo (per problemi di stand-by), e mi sembra che ora il comportamento sia differente: ogni volta che ricompilo, ci metto una vita. Magari un po' meno, ma comunque davvero "troppo".

Quindi mi vien da chiedermi se sbaglio qualcosa.

Per compilare, uso:

```
make -j3 && make -j3 modules_install
```

Comando che però ho sempre usato.

Inoltre, ho notato quest'altra differenza:

- "prima" se ricompilavo un kernel non avevo bisogno di ricompilare i driver della nvidia, dovevo farlo solo passando di versione

- "ora" devo ricompilare i driver anche se resto sulla medesima versione.

Magari i due problemi sono correlati.

Al momento sto lavorando con il kernel 2.6.36r5.

Il mio sistema è un x86 stabile.

Suggerimenti?

(Grazie)

----------

## fbcyborg

Ciao, 

di solito è come dici tu, ovvero se ricompili il kernel aggiungendo o rimuovendo un modulo (come modulo o built in) la compilazione dovrebbe essere molto più breve (se non erro si dice che la compilazione è incrementale).

È anche vero però che a volte capita che anche se si ricompila il kernel avendo aggiunto un solo modulo, ci impieghi molto più tempo del previsto. Forse dipende da quali moduli si compilano e dalle dipendenze (ma questa è una mia supposizione, visto che anche io ho avuto esperienze simili alla tua, anche se saltuarie). Quindi penso sia normale. Non è normale (forse) che accada sempre.

Per quanto riguarda l'istruzione che dai per compilare, il -j3 è sufficiente darlo a make, e sostanzialmente non serve farlo anche quando fai il modules_install, dato che è una semplice copia dei moduli compilati in /lib/modules.

 *MajinJoko wrote:*   

> "prima" se ricompilavo un kernel non avevo bisogno di ricompilare i driver della nvidia, dovevo farlo solo passando di versione 

 

Forse perché tu ricompilavi il kernel ma NON eseguivi il make modules_install. In questo modo sì, reinstalli il kernel (tutti i moduli built-in) in /boot, ma non reinstalli i moduli, quindi gli nvidia-drivers restano lì immacolati. Quando fai make modules_install cancelli la vecchia dir /lib/modules/`uname -r` e la reinstalli, ma in questo caso gli nvidia-drivers non ci sono e devi dare un module-rebuild rebuild, ad esempio

 *MajinJoko wrote:*   

> "ora" devo ricompilare i driver anche se resto sulla medesima versione. 

 

Questo per quanto detto sopra. Se hai dato anche make modules_install, dovrai ricompilare anche i driver nvidia.

 :Wink: 

----------

## ago

Ha già detto tutto fbcyborg, aggiungo che con nouveau non si presentano problemi di compilazione ad ogni "cambio-kernel" e che puoi controllare con time.

```
time make -jX -s
```

----------

## MajinJoko

 *fbcyborg wrote:*   

> Ciao, 
> 
> di solito è come dici tu, ovvero se ricompili il kernel aggiungendo o rimuovendo un modulo (come modulo o built in) la compilazione dovrebbe essere molto più breve (se non erro si dice che la compilazione è incrementale).
> 
> È anche vero però che a volte capita che anche se si ricompila il kernel avendo aggiunto un solo modulo, ci impieghi molto più tempo del previsto. Forse dipende da quali moduli si compilano e dalle dipendenze (ma questa è una mia supposizione, visto che anche io ho avuto esperienze simili alla tua, anche se saltuarie). Quindi penso sia normale. Non è normale (forse) che accada sempre.
> ...

 

Devo essere onesto, in fondo non ho mai preso il cronometro, quindi potrebbe anche essere che dura "troppo" ma non "tanto quanto".

Quello che mi tormentava era capire se (in qualche modo) io potessi aver disattivato la compilazione "incrementale". Ma ho cercato a lungo nelle opzioni del kernel senza trovare nulla di illuminante.

 *fbcyborg wrote:*   

> Per quanto riguarda l'istruzione che dai per compilare, il -j3 è sufficiente darlo a make, e sostanzialmente non serve farlo anche quando fai il modules_install, dato che è una semplice copia dei moduli compilati in /lib/modules.
> 
>  *MajinJoko wrote:*   "prima" se ricompilavo un kernel non avevo bisogno di ricompilare i driver della nvidia, dovevo farlo solo passando di versione  
> 
> Forse perché tu ricompilavi il kernel ma NON eseguivi il make modules_install. In questo modo sì, reinstalli il kernel (tutti i moduli built-in) in /boot, ma non reinstalli i moduli, quindi gli nvidia-drivers restano lì immacolati. Quando fai make modules_install cancelli la vecchia dir /lib/modules/`uname -r` e la reinstalli, ma in questo caso gli nvidia-drivers non ci sono e devi dare un module-rebuild rebuild, ad esempio
> ...

 

Ecco, questo non mi torna. Però, evidentemente, mi sbaglio.

Grazie mille!

----------

## ago

 *MajinJoko wrote:*   

> Quello che mi tormentava era capire se (in qualche modo) io potessi aver disattivato la compilazione "incrementale". Ma ho cercato a lungo nelle opzioni del kernel senza trovare nulla di illuminante.

 

Quello che dici tu è una semplice aggiunta di qualche modulo, seguito da un 

```
make modules && make modules_install
```

 Questo sarebbe il metodo "incrementale" ma che ti permette di aggiungere solo moduli

----------

## cloc3

io incontro un problema diverso, quando compilo i kernel, perché uso aufs2, che installa una patch specifica.

per fare le cose in modo corretto, devo fare molta attenzione all'ordine delle operazioni.

dopo parecchie prove, ho stabilito che l'ordine preferibile è il seguente:

1. s939 ~ # make modules_prepare

2. s939 ~ # USE="kernel-patch" emerge -1 aufs2

3. s939 ~ # make -j9 #   :Cool:  me, ci ha un sacco di cpu ...

4. s939 ~ # make modules_install

5. s939 ~ # emerge @module-rebuild

in questo modo evito di compilare il kernel prima di avere installato la patch, che mi fa pasticci da panico in terraSanta.

----------

