Sviluppo software

Linux embedded 3/5: toolchain di cross-compilazione

Questo articolo fa parte della serie:

Per poter ricompilare U-Boot, il Kernel e Buildroot bisogna prima preparare l'ambiente host in modo che possa compilare i sorgenti di interesse per il sistema target. Ad esempio se il sistema host è un x86, mentre il target monta un processore ARM, servirà un compilatore in grado di essere eseguito sul sistema host, ma che generi codice pensato per il processore ARM.

In altre parole quello che serve è una toolchain per la cross-compilazione .

La toolchain per la cross-compilazione viene fornita dal produttore della scheda embedded e va installata nell'ambiente host. Per farlo si può seguire il procedimento seguente.


Per prima cosa va estratto l'archivio contenente la toolchain in una sottodirectory di /usr/local. Ad esempio per un sistema target con processore ARM si potrebbero eseguire i seguenti comandi.


su
mkdir /usr/local/arm/<nomescheda>
cd /usr/local/arm/<nomescheda>
tar xjvf /path_to_toolchain/toolchain-<versione>.tar.bz2
exit

A questo punto va aggiunta la directory appena creata al path di sistema e va impostata la variabile d'ambiente ARCH che verrà utilizzata nella compilazione.

I comandi da lanciare sono:


export PATH=$PATH\:/usr/local/arm/<nomescheda>/bin
export ARCH=arm

Per rendere persistente la modifica i due comandi precedenti vanno aggiunti ad uno dei file di profilo bash (locale o globale) come ad esempio /etc/profile.

Compilare U-Boot#

Come abbiamo già visto U-Boot è un bootloader. Solitamente questo bootloader viene già fornito in versione compilata dal produttore della scheda embedded. Se però si vuole ricompilare per qualsiasi motivo si può procedere come segue.

Si deve estrarre l'archivio dei sorgenti:


tar jxvf u-boot-<versione>.tar.bz2

Eseguire il comando seguente per applicare la configurazione di default prevista dal produttore della scheda:


cd u-boot-<versione>
make <nomescheda>_config

Lanciare la compilazione vera e propria con il comando:


make

Al termine della compilazione vengono creati uno o più immagini di uboot in formati diversi (es. estensione fs oppure estensione nb0).

A seconda del produttore e del bios della scheda embedded si può procedere a scrivere il nuovo bootloader sulla scheda utilizzando la connessione seriale e dei comandi indicati dal produttore. Abbiamo dato delle indicazioni sulla procedura da seguire nell'articolo Linux Embedded 2/5 - Il bootloader U-Boot.

Compilazione del kernel#

Il kernel è un componente software fondamentale di un sistema embedded, infatti il kernel è responsabile della gestione dell'hardware.

I fornitori di schede embedded con supporto a Linux solitamente forniscono già una versione dei sorgenti del kernel di Linux adattata o già configurata in base all'hardware della scheda. In questo caso può aver senso ricompilare il kernel solo per aggiungere delle funzionalità non già attivate nella versione fornita dal produttore della scheda.

La prima cosa da fare quindi è estrarre l'archivio contente i sorgenti del kernel, ad esempio con un comando simile al seguente:


tar jxvf linux-<versione>.tar.bz2

Il comando precedente estrae l'archivio e crea una directory con i sorgenti del kernel. Il produttore della scheda embedded solitamente fornisce già la configurazione minimale del kernel per farlo funzionare sulla scheda embedded. Per caricare la configurazione del fornitore solitamente si lancia un comando come il seguente:


cd linux-<versione>
make <nomescheda>_defconfig

A questo punto si può procedere alterando la configurazione del kernel aggiungendo o rimuovendo moduli. Per farlo basta eseguire il seguente comando, il quale apre un menù da cui è possibile scegliere cosa abilitare e cosa disabilitare e in generale è possibile modificare tutte le opzioni di configurazione del kernel.

Per eseguire il comando seguente è necessario aver installato nell'ambiente host i file di sviluppo della libreria ncurses. Questo pacchetto è installabile dalla gestione software della propria distribuzione Linux. Su alcune distribuzioni viene chiamato ncurses-devel.


make menuconfig

Una volta terminata la configurazione del kernel si procede alla compilazione e alla creazione dell'immagine del kernel con il comando seguente (può variare leggermente a seconda della scheda embedded che si utilizza).


make uImage

Al termine se tutto è andato bene, si troverà l'immagine del kernel pronta per essere scritta sulla memoria della scheda in una sottodirectory della directory corrente del tipo arch/arm/boot/uImage.

Abbiamo dato delle indicazioni su come avviare la nuova immagine del kernel nell'articolo Linux Embedded 2/5 - Il bootloader U-Boot.

ATTENZIONE: SERVIZIO DI CONSULENZA SOSPESO#

Non offriamo più questo tipo di consulenza.

Questo articolo resta per documentare un'attività che abbiamo svolto in passato, ma che non facciamo più.

Autore: Giovanni Chiodi
Senior software developer con più di 10 anni di esperienza nello sviluppo di soluzioni web based, enterprise, su misura. Dal 2011 socio fondatore di Garda Informatica Snc condivide questa avventura col fratello Lorenzo.

Promemoria sui Cookie e sulla Privacy

Leggi l'informativa
closeIcona closesearchIcona searchmore vertIcona more vertmenuIcona menulinkIcona link