Gentoo Logo

[ << ] [ < ] [ 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

# Il Makefile di un kernel vanilla si presenta così
ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?=

# Specificare i valori predefiniti di ARCH e 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 ] [ > ] [ >> ]


Stampa

Visualizza tutto

Aggiornato il 31 dicembre 2010

Oggetto: Cross-compilare con successo un kernel per il proprio sistema!

Mike Frysinger
Autore

Ned Ludd
Autore

Robin H. Johnson
Autore

Alex Tarkovsky
Autore

Alexey Shvetsov
Autore

Raúl Porcel
Autore

Joshua Saddler
Redazione

Andrea Perotti
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.