Sabato, 31 luglio 2010 - 20:02

>> Creare eseguibili per CPU MIPSel

Dato che i D-Link serie T utilizzano processori MIPS, è necessario compilare programmi appositamente per questa architettura: eseguire un programma per x86 restituirà solo una serie di errori.

E' necessario compilare una toolchain per mipsel (mips endian little).

Indice dei contenuti

Costruzione della ToolChain

  1. Scaricare i sorgenti di binutils, glibc (include), gcc e modutils, nonche' di uClibc e del kernel montavista modifificato dal team mcmcc.

http://mcmcc.bat.ru/dlinkt/ar7_mipsel_toolchain_src/binutils-2.11.90.0.7_mcmcc.tar.bz2
http://mcmcc.bat.ru/dlinkt/ar7_mipsel_toolchain_src/glibc-kernel_includes.tar.bz2
http://mcmcc.bat.ru/dlinkt/ar7_mipsel_toolchain_src/gcc-2.95.4_mcmcc.tar.bz2
http://mcmcc.bat.ru/dlinkt/ar7_mipsel_toolchain_src/modutils-2.4.27_mcmcc.tar.bz2
http://mcmcc.bat.ru/dlinkt/sources/uClibc-0.9.19_mc.tar.bz2

L'ultima versione del kernel è attualmente la mc09, ma controllate ogni tanto il sito del team mcmcc per eventuali aggiornamenti:
http://mcmcc.bat.ru/dlinkt/src_kernel_AR7/linux-2.4.17_mvl21_mc_09.tar.bz2

Controllare il sistema

Anche il sistema host (ovvero quello da cui compilate) ha dei requisiti. Innanzitutto, e' preferibile che sia un OS Linux. Questo documento non tratta la cross-compilazione via mingw o cygwin.

Compilatore: Il GCC 4, presente su alcune distribuzioni recenti, può dare dei problemi, e per compilare i modutils è obbligatorio il 3.3. A questo punto potete scegliere installare il 3.3 e il 3.4, o direttamente il solo 3.3 (io consiglio quest'ultima scelta, il 3.4 non ha particolare vantaggi per il lavoro in questione e richiede di installare un altro set di pacchetti).

Una volta installato il gcc 3.3, dovete controllare che sia il compilatore che viene effettivamente utilizzato! Usate un symlink da 'gcc' o esportate la variabile CC che punti al binario appropriato.

Flex: Alcune versioni troppo vecchie, ma anche troppo recenti!, di flex possono dare dei problemi. Io consiglio la versione 2.5.27 , se la vostra distro ha una versione differente disinstallatela e compilate tale versione: http://sourceforge.net/project/showfiles.php?group_id=72099&package_id=71865&release_id=135412

Percorsi: Se non volete impazzire troppo, lasciate i path consigliati qui. Create una dir /opt.

Note finali: I passaggi con un asterisco nel titolo richiedono la decompressione del pacchetto in una qualsiasi cartella (per esempio, /root/temporanei).

Per proseguire: ricordate che in ogni pacchetto del team mcmcc c'e' uno script pronto (chiamato mcmcc_qualcosa) per effettuare la compilazione, e che in genere basta eseguire quello ( sh nomefile ) e poi installare il risultato (make install). Nei paragrafi seguenti si analizzerà il contenuto dei suddetti file e si daranno alcune dritte o segnalazioni.

Binutils*

mcmcc_fc3-binutils-builds:

./configure --prefix=/opt/mcmcc-mipsel --target=mipsel-linux \
--enable-targets=mipsel-linux,mips-linux
make

Potete eseguire direttamente tale script, per poi proseguire eseguendo:

make install

Glibc Kernel Includes

E' sufficiente porsi in /opt/mcmcc-mipsel, creare (se non esiste già) la sottodirectory mipsel-linux, entrare in tale directory e a quel punto scompattare il file glibc-kernel_includes.tar.bz2.

GCC*

mcmcc_fc3-gcc-builds:

export PATH=$PATH:/opt/mcmcc-mipsel/bin


TEXCONFIG=false \
./configure --prefix=/opt/mcmcc-mipsel \
--with-local-prefix=/opt/mcmcc-mipsel/mipsel-linux/local \
--target=mipsel-linux --disable-shared \
--enable-languages="c" \
--with-gnu-as \
--with-gnu-ld \
--with-multilib \

--without-x

make

Anche qui è sufficiente usare lo script, e la compilazione dovrebbe concludersi senza il benchè minimo problema. Poi installate il tutto:

make install

Modutils*

In questa fase, al 99% sarà necessario editare lo script. Come già anticipato, per compilare i modutils il gcc 3.3 è obbligatorio.

Se avete optato per la soluzione gcc 3.3-only sul vostro sistema, ed il gcc 3.3 è gia' il compilatore di default perchè avete settato opportunamente i symlink ( suggerimento: scrivete gcc --version al prompt della shell per controllare la versione effettiva di gcc), potete rimuovere o commentare la prima linea dello script (quella con export CC)

Se invece il gcc è installato ma non è il compilatore di default, modificate lo script in maniera da far riflettere alla variabile CC il nome del vostro compilatore, ad esempio su Ubuntu l'eseguibile si chiama gcc-3.3, la prima riga dovrà quindi essere:

export CC=gcc-3.3

./configure --prefix=/opt/mcmcc-mipsel --target=mipsel-linux \
--includedir=/opt/mcmcc-mipsel/mipsel-linux/include
make

uClibc*

La compilazione delle uClibc è leggermente più incasinata. Innanzitutto, dovrete già scompattare anche il kernel. Supponiamo che abbiate collocato rispettivamente uClibc e kernel montavista nelle directory /opt/uClibc-0.9.19 e /opt/linux-2.4.17_mvl21_mc_09.

Sarà necessario creare e modificare dei file nella cartella delle uClibc per una compilazione bella pulita.

Iniziamo creandoci uno script di building adatto alla nostra configurazione. Create un file tipo 'mipsel-build.sh' con il seguente contenuto:

#!/bin/bash

export PATH=$PATH:/opt/mcmcc-mipsel/bin
make oldconfig
make
make install

Passiamo poi alla modifica del file .config preesistente. Magari fatene una copia di backup, prima. Modificate le seguenti righe, che dovranno presentarsi come indico qui:

KERNEL_SOURCE="/opt/linux-2.4.17_mvl21_mc_09"
DEVEL_PREFIX="/opt/mipsel-linux-uclibc"

Ora andiamo a modificare il Rules.mak. Anche qui fate un backup prima di passare alle modifiche. Se avete piu' compilatori nel sistema e non avete sistemato i symlink e' il caso di settare anche la variabile HOSTCC puntando al gcc 3.3 o 3.4

CROSS=mipsel-linux-
HOSTCC=gcc-3.3              (opzionale; solo se il vostro gcc è il 4.0)

ora eseguite lo script mipsel-build.sh e le vostre uClibc dovrebbero compilarsi felicemente.

Kernel Montavista

Andate nella directory del kernel ( /opt/linux-2.4.17_mvl21_mc_09 ). Per prima cosa, avrete bisogno di mettere a posto le utility per il checksum e la compressione lzma.

Andate nella sottodirectory scripts/lzma/SRC/7zip/Compress/LZMA_Alone e date il comando make. Quando ha terminato, copiate il file 'lzma' in una directory che si trovi gia' nel vostro path, ad esempio probabilmente /usr/local/bin.

Adesso è il momento di andare in /opt/linux-2.4.17_mvl21_mc_09/scripts/TI-chksum-0.1, dare nuovamente make, e copiare il file 'tichksum' in /usr/local/bin o altro percorso nel vostro PATH.

Passiamo ora ad alcuni parametri di configurazione. Innanzitutto vedrete alcuni file .config nella directory principale del kernel. Non sono lì per caso: scegliete il vostro modello di serie T, e copiate il relativo file di configurazione al file .config.

Compilatore Cross-piattaforma

Un compilatore utilizza due fasi, nella prima analizza il codice sorgente da eventuali errori ecc, la seconda trasforma il file scritto, ad esempio in C, in assembler. Naturalmente l'assembler dipende da CPU a CPU, quindi mentre la prima fase è uguale per tutte, la seconda dipende dalle rispettive istruzioni macchina della CPU. Il compilatore gcc della GNU ha la possibilità di scegliere, in fase di compilazione dello stesso, per quale CPU creare le istruzioni assembler. Ad esempio se in C abbiamo una istruzione int a, essa dice al compilatore di riservare un area di memoria di 2 byte, per ix86 equivale in assembler a pippo, mentre per Alpha a pluto. Alla fine basta dare al compilatore il set di istruzioni assembler per la particolare CPU, modificando in questo modo solo una piccola parte del compilatore stesso.

Un cross-compiler MIPS (endian little) è presente sul CD "Preview KIT" di MontaVista oppure sul sito di McMCC

Link utili


Contenuto disponibile sotto GNU Free Documentation License (www.gnu.org/copyleft/fdl.html).