Come creare un kernel personalizzato con localmodconfig che supporti l'hardware di più macchine?


9

Quando si configura un server per eseguire una singola attività, come un'appliance, potrebbe sorgere la necessità di creare un kernel personalizzato. Ad esempio per risparmiare spazio su disco.

Il filesystem di root di Ubuntu Core 13.10 amd64 è un download di 38 MB , in cui il meta pacchetto "linux-image-generic", comprese le dipendenze richieste, scaricherà 79 MB di archivi e la dimensione di un pacchetto kernel-image-xyz-generico è ancora 14 MB .

Per creare un kernel che è stato rimosso dai moduli che l'hardware non utilizzerà, il make localmodconfigcomando è lo strumento giusto per il lavoro. Tuttavia, la macchina virtuale che esegue l'ambiente di build e test carica moduli diversi rispetto all'hardware di distribuzione di destinazione. E / o dopo un po 'l'hardware di distribuzione potrebbe diventare eol e viene utilizzato hardware diverso. E alla frequenza in cui vengono rilasciati gli aggiornamenti del kernel potrebbe diventare troppo ingombrante per creare un kernel personalizzato per ogni diversa configurazione hardware.

Come creare rapidamente un kernel Linux personalizzato che gira su alcune scatole hardware diverse?

Risposte:


11

Il make localmodconfigcomando è ancora lo strumento giusto per il lavoro. In effetti make localmodconfigcorrescripts/kconfig/streamline_config.pl .

File input

Durante la lettura del streamline_config.plcodice sorgente (perl), esiste una funzione non documentata my $lsmod_file = $ENV{'LSMOD'};che consente l'input di file per il rilevamento di moduli caricati anziché l'output dal lsmodcomando.

CD live

Perché localmodconfig utilizza l'output lsmodper rilevare i moduli caricati. Eseguiamo un Live CD di Ubuntu su ciascuna delle diverse configurazioni hardware, apriamo un terminale ( Ctrl+ Alt+ T), eseguiamo lsmode salviamo il suo output.

Concatena l'output

Concatenando i lsmodfile di output mentre si rimuovono le righe di intestazioni consecutive è possibile creare rapidamente un file di input che copra tutti i moduli del kernel richiesti. Ci piace rivedere manualmente l'elenco dei moduli e utilizzare una ricetta più manuale:

  1. $ cd linux-3.11.0/
    oppure vai alla directory in cui eseguirai il comando make

  2. $ lsmod > lsmod.txt
    crea un file di testo con i moduli caricati

  3. $ nano lsmod.txt
    aprirà l'editor di testo nano, ovviamente puoi usare la tua applicazione di editor preferita

  4. Aggiungi i moduli desiderati che non sono già presenti, in fondo a questo file (vedi un esempio in fondo a questa risposta) e salvalo quando sei pronto.
    Nota: utilizzare spazi non tabulazioni per abbinare le posizioni del tabulatore di colonna.

  5. $ make LSMOD="lsmod.txt" localmodconfig
    questo indicherà a localmodconfig di utilizzare il file lsmod.txt come input per il rilevamento dei moduli caricati

Per quanto riguarda Steven Rostedt - l'autore di steamline_config.pl - per aver suggerito una notazione più breve nel passaggio 5.


Esempio di cosa aggiungere e non aggiungere a lsmod.txt (passaggio 4):

Poiché la scheda madre Intel D33217CK ha sensori termici Intel che vorremmo leggere, aggiungiamo queste righe:

x86_pkg_temp_thermal   13810  0
intel_powerclamp       14239  0

Ma non vogliamo eseguire macchine virtuali su questo hardware, ecco perché saltiamo queste linee:

kvm_intel             128218  0
kvm                   364766  1 kvm_intel

Ha un adattatore Ethernet Gibabit Apple (Broadcom) collegato alla sua porta Thunderbolt, quindi aggiungiamo:

tg3                   152066  0
ptp                    18156  1 tg3
pps_core               18546  1 ptp

Riteniamo di non aver bisogno del mirroring del volume e quindi non aggiungere:

dm_mirror              21715  0
dm_region_hash         15984  1 dm_mirror
dm_log                 18072  2 dm_region_hash,dm_mirror

E inoltre non abbiamo bisogno di output grafico (il testo funzionerà su un server senza testa), quindi non includiamo:

i915                  589697  3
i2c_algo_bit           13197  1 i915
drm_kms_helper         46867  1 i915
drm                   242354  4 i915,drm_kms_helper

Per un'altra macchina abbiamo bisogno di questo driver ethernet Realtek adizionale:

r8169                  61434  0
mii                    13654  1 r8169
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.