[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
4. Cross-Compilare il Kernel
Indice:
4.a. Sorgenti
Prima di tutto occorre installare i sorgenti del kernel. Si può utilizzare
portage per installare il pacchetto necessario, o scaricarli
dall'Archivio dei Kernel Linux o da dove
si preferisce. Il metodo per compilarli è sempre lo stesso.
Bisognerà installare il kernel nella sysroot così che se si effettuerà la
cross-compilazione dei pacchetti che includono moduli del kernel, il processo
sarà trasparente. Altrimenti si potranno compilare i sorgenti del kernel dove
si preferisce. Alcuni mantengono i sorgenti del kernel in
/usr/src/, ad esempio.
4.b. Preparazione alla Cross-compilazione
Due sono le variabili usate dal kernel per selezionare l'architettura di
destinazione. Normalmente questi valori sono ricavati dall'ambiente dove viene
compilato il kernel, in questo caso però l'ambiente non corrisponde
all'architettura di destinazione, per cui bisogna forzarle. Le variabili in
questione sono ARCH e CROSS_COMPILE. I valori predefiniti per
entrambe si trovano nel Makefile presente nella directory radice dei sorgenti e
possono essere forzati da linea di comando.
La variabile ARCH indica il nome l'architettura di destinazione, nel
formato specificato dal kernel. Mentre portage e altri programmi usano la
dicitura "x86", il kernel usa "i386". Per avere un'idea delle sigle delle
diverse architetture visualizzare il contenuto della subdirectory
arch/.
La variabile CROSS_COMPILE dovrebbe essere auto esplicativa. Essa va
valorizzata con il prefisso della propria toolchain (trattino finale "-"
incluso). Perciò se si invoca la propria toolchain come
x86_64-pc-linux-gnu-gcc, sarà sufficiente eliminare quel gcc in
coda ed il risultato è ciò che si dovrà usare: x86_64-pc-linux-gnu-.
C'è una variabile aggiuntiva, INSTALL_MOD_PATH, che definisce dove verrà
creata la directory /lib e dove verranno memorizzati tutti i
moduli. Sebbene non serva trasferire i sorgenti del kernel nel proprio
dispositivo di destinazione, se si compilerà un qualunque modulo ci sarà
bisogno di questa directory.
Ci sono due modalità per preparare il sistema. È possibile modificare il
Makefile presente nella directory radice o valorizzare le variabili rilevanti da
linea di comando. Entrambe sono corrette: è solo una questione di gusti, perciò
verranno illustrate entrambe. Sceglierne una delle due.
Codice 2.1: Modifica del Makefile nella directory radice |
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
ARCH ?= arm
CROSS_COMPILE ?= arm-unknown-linux-gnu-
|
Codice 2.2: Valorizzare le variabili da linea di comando |
# make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnu- ....
|
È anche possibile usare un piccolo script per semplificarsi la vita se si deve
lavorare con diversi kernel contemporaneamente. Questo script verrà chiamato
xkmake.
Codice 2.3: xkmake |
#!/bin/sh
exec make ARCH="arm" CROSS_COMPILE="arm-unknown-linux-gnu-" INSTALL_MOD_PATH="${SYSROOT}" "$@"
|
Così quando si vorrà compilare un kernel o fare qualunque altra cosa, sarà
sufficiente eseguire xkmake al posto di make.
4.c. Configurazione e Compilazione
A questo punto, la configurazione e la compilazione del kernel è la stessa di
ogni altro kernel, per cui non verrà approfondito l'argomento dato che sono
presenti già molti HOWTO e guide che trattano l'argomento in dettaglio.
Codice 3.1: Configurazione e Compilazione |
# cd "${SYSROOT}/usr/src/linux"
# xkmake menuconfig
# xkmake
|
[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|