GNU/Linux >> Linux Esercitazione >  >> Debian

Come compilare un kernel - Il modo Debian

In questa pagina

  1. 1 Nota preliminare
  2. 2 Creazione di un pacchetto .deb del kernel
    1. 2.1 Installare i pacchetti necessari per la compilazione del kernel
    2. 2.2 Scarica le sorgenti del kernel
    3. 2.3 Applicare le patch alle sorgenti del kernel (facoltativo)
    4. 2.4 Configurare il kernel
    5. 2.5 Crea il kernel
    6. 2.6 Installare il nuovo kernel
  • 3 Costruire un kernel nel modo tradizionale
    1. 3.1 Installare i pacchetti necessari per la compilazione del kernel
    2. 3.2 Scarica le sorgenti del kernel
    3. 3.3 Applicare le patch alle sorgenti del kernel (facoltativo)
    4. 3.4 Configurare il kernel
    5. 3.5 Crea e installa il kernel
    6. 3.6 Passaggi successivi all'installazione
  • 4 collegamenti
  • Ogni distribuzione ha alcuni strumenti specifici per costruire un kernel personalizzato dai sorgenti. Questo articolo riguarda la compilazione di un kernel su un sistema Debian (Etch). Descrive come costruire un kernel personalizzato usando gli ultimi sorgenti del kernel non modificati da www.kernel.org (kernel vaniglia) in modo da essere indipendenti dai kernel forniti dalla distribuzione. Mostra anche come applicare patch ai sorgenti del kernel se hai bisogno di funzionalità che non sono presenti.

    Non garantisco che questo funzionerà per te!

    1 Nota preliminare

    Descriverò due modi per compilare un nuovo kernel. Usando il primo metodo, ti ritroverai con un pacchetto .deb del kernel che può essere installato sul sistema e che puoi condividere con altri e installare su altri sistemi Debian Etch.

    Il secondo metodo consiste nel compilare un kernel nel modo "tradizionale". In questo modo funziona su qualsiasi distribuzione Linux, ma ovviamente non ti ritroverai con un pacchetto .deb del kernel.

    2 Creazione di un pacchetto .deb del kernel

    Questo capitolo mostra come creare un kernel e ottenere un pacchetto .deb che puoi installare e condividere con altri.

    2.1 Installazione dei pacchetti necessari per la compilazione del kernel

    Per prima cosa aggiorniamo il nostro database dei pacchetti:

    apt-get update

    Quindi installiamo tutti i pacchetti necessari come questo:

    apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

    2.2 Scarica le sorgenti del kernel

    Quindi scarichiamo il kernel desiderato in /usr/src. Vai su www.kernel.org e seleziona il kernel che vuoi installare, ad es. linux-2.6.21.3.tar.bz2 (puoi trovare tutti i kernel 2.6 qui:http://www.kernel.org/pub/linux/kernel/v2.6/). Quindi puoi scaricarlo su /usr/src in questo modo:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Quindi decomprimiamo i sorgenti del kernel e creiamo un collegamento simbolico linux alla directory dei sorgenti del kernel:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    2.3 Applicare le patch alle sorgenti del kernel (opzionale)

    A volte sono necessari driver per l'hardware che non è supportato dal nuovo kernel per impostazione predefinita, oppure è necessario il supporto per le tecniche di virtualizzazione o qualche altra tecnologia all'avanguardia che non è ancora arrivata al kernel. In tutti questi casi devi patchare i sorgenti del kernel (ammesso che ci sia una patch disponibile...).

    Ora supponiamo che tu abbia scaricato la patch necessaria (in questo esempio la chiamo patch.bz2) in /usr/src. Ecco come lo applichi ai sorgenti del tuo kernel (devi essere ancora nella directory /usr/src/linux):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    Il primo comando è solo un test, non fa nulla alle tue fonti. Se non mostra errori, puoi eseguire il secondo comando che applica effettivamente la patch. Non farlo se il primo comando mostra errori!

    Puoi anche applicare le prepatch del kernel ai sorgenti del tuo kernel. Ad esempio, se hai bisogno di una funzionalità disponibile solo nel kernel 2.6.22-rc3, ma i sorgenti completi non sono ancora stati rilasciati per questo kernel. Invece, è disponibile una patch-2.6.22-rc3.bz2. Puoi applicare quella patch ai sorgenti del kernel 2.6.21, ma non al kernel 2.6.21.1 o 2.6.21.2, ecc. Questo è spiegato su http://kernel.org/patchtypes/pre.html:

    Le prepatch sono l'equivalente delle versioni alpha per Linux; vivono nelle directory di test negli archivi. Dovrebbero essere applicati utilizzando l'utilità patch(1) al codice sorgente della versione completa precedente con un numero di versione in 3 parti (ad esempio, la prepatch 2.6.12-rc4 dovrebbe essere applicata ai sorgenti del kernel 2.6.11, non , ad esempio, 2.6.11.10.)

    Quindi, se vuoi compilare un kernel 2.6.22-rc3, devi scaricare i sorgenti del kernel 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) nel passaggio 3 invece del kernel 2.6.21.3!

    Ecco come applicare la patch 2.6.22-rc3 al kernel 2.6.21:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    2.4 Configura il kernel

    È una buona idea usare la configurazione del tuo attuale kernel funzionante come base per il tuo nuovo kernel. Quindi copiamo la configurazione esistente in /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Quindi corriamo

    make menuconfig

    che fa apparire il menu di configurazione del kernel. Vai a Carica un file di configurazione alternativo e scegli .config (che contiene la configurazione del tuo attuale kernel funzionante) come file di configurazione:

    Quindi sfoglia il menu di configurazione del kernel e fai le tue scelte. Quando hai finito e seleziona Esci, rispondi alla seguente domanda (Vuoi salvare la tua nuova configurazione del kernel?) con Sì:

    2.5 Crea il kernel

    Per compilare il kernel, esegui questi due comandi:

    make-kpkg clean
    fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

    Dopo --append-to-version=puoi scrivere qualsiasi stringa che ti aiuti a identificare il kernel, ma deve iniziare con un meno (-) e non deve contenere spazi bianchi.

    Ora sii paziente, la compilazione del kernel può richiedere alcune ore, a seconda della configurazione del tuo kernel e della velocità del tuo processore.

    2.6 Installare il nuovo kernel

    Dopo la corretta compilazione del kernel, puoi trovare due pacchetti .deb nella directory /usr/src.

    cd /usr/src
    ls -l

    Sul mio sistema di test erano chiamati linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (che contiene il kernel vero e proprio) e linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb (che contiene i file necessari se si desidera compilare moduli del kernel aggiuntivi in ​​seguito). Li installo in questo modo:

    dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
    dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

    (Ora puoi anche trasferire i due file .deb su altri sistemi Debian Etch e installarli lì esattamente allo stesso modo, il che significa che non devi compilare nuovamente il kernel.)

    Questo è tutto. Il file di configurazione del bootloader di GRUB /boot/grub/menu.lst è stato modificato automaticamente ed è stato creato un ramdisk per il nuovo kernel in /boot.

    Ora riavvia il sistema:

    shutdown -r now

    Al prompt di avvio, seleziona il tuo nuovo kernel (dovrebbe essere selezionato per impostazione predefinita):

    Se tutto va bene, dovrebbe venire fuori il nuovo kernel. Puoi verificare se sta davvero usando il tuo nuovo kernel eseguendo

    uname -r

    Questo dovrebbe visualizzare qualcosa come

    2.6.21.3-custom

    Se il sistema non si avvia, riavvialo e seleziona il tuo vecchio kernel al prompt di avvio. Ora puoi riprovare a compilare un kernel funzionante. Non dimenticare di rimuovere le stanze del kernel non funzionante da /boot/grub/menu.lst.

    3 Costruire un kernel nel modo tradizionale

    Questo capitolo descrive un approccio diverso che può essere utilizzato su qualsiasi sistema Linux (a parte dettagli come la creazione di un ramdisk o l'aggiornamento del bootloader). Ovviamente non ti ritroverai con un pacchetto .deb del kernel.

    3.1 Installazione dei pacchetti necessari per la compilazione del kernel

    Per prima cosa aggiorniamo il nostro database dei pacchetti:

    apt-get update

    Quindi installiamo tutti i pacchetti necessari come questo:

    apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

    3.2 Scarica le sorgenti del kernel

    Successivamente, scarichiamo il kernel desiderato in /usr/src. Vai su www.kernel.org e seleziona il kernel che vuoi installare, ad es. linux-2.6.21.3.tar.bz2 (puoi trovare tutti i kernel 2.6 qui:http://www.kernel.org/pub/linux/kernel/v2.6/). Quindi puoi scaricarlo su /usr/src in questo modo:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Quindi decomprimiamo i sorgenti del kernel e creiamo un collegamento simbolico linux alla directory dei sorgenti del kernel:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    3.3 Applicare le patch alle sorgenti del kernel (opzionale)

    A volte sono necessari driver per l'hardware che non è supportato dal nuovo kernel per impostazione predefinita, oppure è necessario il supporto per le tecniche di virtualizzazione o qualche altra tecnologia all'avanguardia che non è ancora arrivata al kernel. In tutti questi casi devi patchare i sorgenti del kernel (ammesso che ci sia una patch disponibile...).

    Ora supponiamo che tu abbia scaricato la patch necessaria (in questo esempio la chiamo patch.bz2) in /usr/src. Ecco come lo applichi ai sorgenti del tuo kernel (devi essere ancora nella directory /usr/src/linux):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    Il primo comando è solo un test, non fa nulla alle tue fonti. Se non mostra errori, puoi eseguire il secondo comando che applica effettivamente la patch. Non farlo se il primo comando mostra errori!

    Puoi anche applicare le prepatch del kernel ai sorgenti del tuo kernel. Ad esempio, se hai bisogno di una funzionalità disponibile solo nel kernel 2.6.22-rc3, ma i sorgenti completi non sono ancora stati rilasciati per questo kernel. Invece, è disponibile una patch-2.6.22-rc3.bz2. Puoi applicare quella patch ai sorgenti del kernel 2.6.21, ma non al kernel 2.6.21.1 o 2.6.21.2, ecc. Questo è spiegato su http://kernel.org/patchtypes/pre.html:

    Le prepatch sono l'equivalente delle versioni alpha per Linux; vivono nelle directory di test negli archivi. Dovrebbero essere applicati utilizzando l'utilità patch(1) al codice sorgente della versione completa precedente con un numero di versione in 3 parti (ad esempio, la prepatch 2.6.12-rc4 dovrebbe essere applicata ai sorgenti del kernel 2.6.11, non , ad esempio, 2.6.11.10.)

    Quindi, se vuoi compilare un kernel 2.6.22-rc3, devi scaricare i sorgenti del kernel 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) nel passaggio 3 invece del kernel 2.6.21.3!

    Ecco come applicare la patch 2.6.22-rc3 al kernel 2.6.21:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    3.4 Configura il kernel

    È una buona idea usare la configurazione del tuo attuale kernel funzionante come base per il tuo nuovo kernel. Quindi copiamo la configurazione esistente in /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Quindi corriamo

    make menuconfig

    che fa apparire il menu di configurazione del kernel. Vai a Carica un file di configurazione alternativo e scegli .config (che contiene la configurazione del tuo attuale kernel funzionante) come file di configurazione:

    Quindi sfoglia il menu di configurazione del kernel e fai le tue scelte. Quando hai finito e seleziona Esci, rispondi alla seguente domanda (Vuoi salvare la tua nuova configurazione del kernel?) con Sì:

    3.5 Crea e installa il kernel

    Per compilare il kernel, esegui questi comandi:

    make all
    make modules_install
    make install

    Ora sii paziente, la compilazione del kernel può richiedere alcune ore, a seconda della configurazione del tuo kernel e della velocità del tuo processore.

    3.6 Passaggi successivi all'installazione

    Il nuovo kernel è ora installato, ma abbiamo ancora bisogno di un ramdisk per il nostro nuovo kernel (altrimenti molto probabilmente il sistema non si avvierà!) e dobbiamo informare il bootloader GRUB del nostro nuovo kernel.

    Per prima cosa, facciamo questo:

    depmod 2.6.21.3
    apt-get install yaird

    Quindi creiamo un ramdisk con il seguente comando:

    mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

    La configurazione di GRUB è molto semplice su Debian Etch. Non ci resta che correre

    update-grub

    Questo rileverà il nuovo kernel e ramdisk e aggiornerà /boot/grub/menu.lst per noi.

    Ora riavvia il sistema:

    shutdown -r now

    Al prompt di avvio, seleziona il tuo nuovo kernel (dovrebbe essere selezionato per impostazione predefinita). Se tutto va bene, dovrebbe venire fuori il nuovo kernel. Puoi verificare se sta davvero usando il tuo nuovo kernel eseguendo

    uname -r

    Questo dovrebbe visualizzare qualcosa come

    2.6.21.3

    Se il sistema non si avvia, riavvialo e seleziona il vecchio kernel al prompt di avvio. Ora puoi provare di nuovo a compilare un kernel funzionante. Non dimenticare di rimuovere le stanze del kernel non funzionante da /boot/grub/menu.lst.

    • Debian:http://www.debian.org
    • Gli archivi del kernel di Linux:http://www.kernel.org

    Debian
    1. Come compilare un kernel Linux nel 21° secolo

    2. Costruire kernel Linux alla maniera Debian

    3. Come modificare l'immagine del profilo in Debian 10

    4. Il modo migliore per compilare un kernel per un processore I7?

    5. Come controllare HZ nel terminale?

    Come installare l'alternativa a Winamp Qmmp su Debian 10

    Come modificare il nome host in Debian 10

    Come modificare il file host su Debian

    Come installare l'ultimo kernel su Debian 11 e derivati

    Come installare l'ultimo MySQL 8 su Debian 11

    Come installare Linux Kernel 5.15 su Debian 11