UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

117 lines (81 loc) 5.85 kB
L'[Arch Build System](/index.php/Arch_Build_System "Arch Build System") può essere usato per creare un kernel personalizzato basato sul pacchetto [linux](https://www.archlinux.org/packages/?name=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. ## Contents * [1 Procurarsi gli ingredienti](#Procurarsi_gli_ingredienti) * [2 Modificare il PKGBUILD](#Modificare_il_PKGBUILD) * [2.1 Cambiare pkgname](#Cambiare_pkgname) * [2.2 Cambiare build()](#Cambiare_build.28.29) * [2.3 Cambiare la funzione package_linux()](#Cambiare_la_funzione_package_linux.28.29) * [3 Compilare](#Compilare) * [4 Installare](#Installare) * [5 Boot Loader](#Boot_Loader) ## 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](/index.php/Makepkg_(Italiano)#MAKEFLAGS "Makepkg (Italiano)") 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.