# Kernels/Arch Build System (Italiano)

< Kernels

L'Arch Build System può essere usato per creare un kernel personalizzato basato sul pacchetto linux ufficiale. Questo metodo di compilazione automatizza l'intero processo ed è basato su un pacchetto molto ben collaudato. Puoi modificare il PKGBUILD per usare una personale configurazione del kernel o aggiungere altre patch.

## Procurarsi gli ingredienti

    # pacman -S abs base-devel

Prima di tutto, hai bisogno di un kernel pulito da cui iniziare la tua personalizzazione. Recupera il file del pacchetto del kernel da ABS:

    $ ABSROOT=. abs core/linux

Quindi, procurati qualsiasi altro file di cui hai bisogno (per esempio file di configurazione personali, patch, ecc...) dalle rispettive fonti.

## Modificare il PKGBUILD

Modificare il PKGBUILD del pacchetto linux ufficiale.

### Cambiare pkgname

Le prime righe saranno come queste:

    PKGBUILD

    # $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $
    # Maintainer: Tobias Powalowski <tpowa@archlinux.org>
    # Maintainer: Thomas Baechler <thomas@archlinux.org>

    pkgbase=linux
    pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel
    # pkgname=linux-custom       # Build kernel with a different name
    _kernelname=${pkgname#linux}
    ...

Come puoi vedere, è presente una riga commentata per creare un kernel con nome diverso. Tutto ciò che devi fare qui è decommentare quella riga, cambiare il suffisso '-custom' secondo le tue esigenze e commentare la riga standard. Se vuoi avere due kernel (ARCH e test) devi disabilitare la sezione conflicts. I file linux.install e linux.preset dovranno essere linux-custom.install and linux-custom.preset. Ad esempio, il tuo file potrebbe diventare:

    PKGBUILD

    ...
    #pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel
    pkgname=linux-test       # Build kernel with a different name
    ...
    #next lines give you problems with nvidia drivers which depend on kernel
    #provides=('kernel26')
    #conflicts=('kernel26')
    #replaces=('kernel26')

Nota: Questo presuppone che tu non abbia bisogno di ricompilare linux-headers, -manpages o -docs. In caso contrario, cambia di conseguenza tutte e tre le stringhe.

Adesso, tutte le variabili del tuo pacchetto saranno cambiare in base al nuovo nome. Per esempio, dopo aver installato il pacchetto, i moduli saranno posizionati in `/lib/modules/<kernel_release>-test/`.

### Cambiare build()

Probabilmente avrai bisogno di un file .config personalizzato. Puoi decommentare una delle alternative mostrate nella funzione build() del PKGBUILD:

    PKGBUILD

    ...
      # load configuration
      # Configure the kernel. Replace the line below with one of your choice.
      #make menuconfig # CLI menu for configuration
      make nconfig # new CLI menu for configuration
      #make xconfig # X-based configuration
      #make oldconfig # using old config from previous kernel version
      # ... or manually edit .config
    ...

Se hai già un file config del kernel, suggeriamo di decommentare uno degli strumenti di configurazione interattivi, come nconfig, e caricare il tuo config da lì. Questo evita i problemi nel rinominare il kernel riscontrati con altri metodi.

Nota: Se decommenti return 1, puoi cambiare la cartella sorgente del kernel non appena makepkg termina l'estrazione e dopo usare nconfig. Questo ti permette di configurare il kernel in sessioni multiple. Quando sei pronto per compilare, copia il file .config in cima a config o config.x86_64 (in base alla tua architettura), commenta return 1 e usa makepkg -i. Non usare questo metodo per le patch personalizzate, metti i comandi delle tue patch dopo queste righe.

### Cambiare la funzione package_linux()

Ora devi scrivere una tua funzione per dire al sistema come installare il pacchetto. Questo può essere fatto facilmente cambiando il nome della funzione package_linux() in package_linux-test() ed adattando le istruzioni ai tuoi bisogni. Se non hai necessità particolari, il tuo package_linux-test() dovrebbe somigliare a qualcosa del genere:

    PKGBUILD

    ...
    package_linux-test() {
     pkgdesc="The Linux Kernel and modules"
    ...
    }

## Compilare

Suggerimento: Eseguire più operazioni di compilazione simultaneamente può ridurre significativamente il tempo di compilazione su sistemi multi-core.

Puoi adesso procedere con la compilazione del kernel tramite il solito comando `makepkg` Se hai scelto un programma interattivo per configurare i parametri del kernel (come menuconfig), avrai bisogno di essere presente durante la compilazione.

Nota: Il kernel necessita di un certo tempo per essere compilato. Un'ora non è inusuale.

## Installare

Dopo makepkg, puoi dare un'occhiata al file linux.install. Vedrai che alcune variabili sono cabiate. Adesso devi soltanto installare il pacchetto come fai solitamente con pacman (o un programma equivalente):

    # pacman -U <pacchetto_kernel>

## Boot Loader

A questo punto, le cartelle e i file del tuo kernel personalizzato sono state create, come `/boot/vmlinuz-linux-test`. Per testare il nuovo kernel aggiorna il tuo bootloader (/boot/grub/menu.lst for GRUB) e aggiungi le nuove voci ('default' e 'fallback') per il kernel personalizzato. In tal modo avrai sia il kernel predefinito che quello personale in parallelo.

Category:

- Kernel (Italiano)