Aggiornato al : lug 5, 2007



L’architettura della CPU Broadcom del Linksys WRT54G è MIPS per cui, visto che la stragrande
maggioranza di personal computer adottano architettura x86, per compilare un binario oppure l’intera immagine del firmware è necessario utilizzare un cross-compiler
Un cross-compiler è un compilatore che lavora su un architettura e produce i binari per un’altra. Nel caso specifico il cross-compiler Broadcom lavora su architettura x86 per produrre binari MIPS
Per toolchain si intende quel gruppo di strumenti che permettono di compilare per un’altra architettura e di creare le immagini appropriate.
La prima fase è crearsi un ambiente di lavoro: per fare ciò sono necessari:I toolchain (SDK) presenti nel sito ufficiale (http://openwrt.org) a questo indirizzo.
Una volta scompattato, tutto la cartella va copiata in /opt.
Successivamente è necessario aggiungere al PATH il percorso relativo ai binari dei compilatori. Portandosi all’interno di /opt/brcm/hndtools-mipsel-linux/bin il comando da eseguire sarà:

# export PATH=“$PATH:$PWD”

Stesso discorso per la directory /opt/brcm/hndtools-mipsel-uclibc/bin

Una volta scelta la versione di firmware da ricompilare bisogna andare nella sottodirectory tools del

firmware e copiare tutti i files presenti all’interno della sottodirectory /bin. Questa operazione va

eseguita soltanto la prima volta che si effettua una compilazione.

Esempio
:

Supponiamo di essere l’utente mikele e di voler creare un piccolo programma che verrà compilato sul nostro computer ma eseguito sul router:

Vediamo come compilare un file.c qualunque per l’architettura MIPS e successivamente come trasferirlo sul router:

//hello.c

int main()
{
printf(“Hello worldn”);
return 0;
}


Una volta salvato, la cross-compilazione del file avviene col comando:

$ /home/mikele/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/bin/mipsel-linux-gcc -I/home/mikele/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/usr/include/ -o hello.o -c hello.c

Se invece nel nostro programma facciamo uso di librerie come ad esempio la libpcap dobbiamo “lincarla” con il seguente comando:


/home/mikele/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/bin/mipsel-linux-gcc -I/home/mikele/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/usr/include/ -o selene hello.o /home/mikele/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/usr/lib/libpcap.a

Adesso è possibile copiare il binario ottenuto (hello) sul router.
Per copiare, utilizziamo il comando scp dalla shell ssh:

$scp hello root@192.168.1.1:/tmp

Il passo finale consiste nell’aprire una shell (SSH) nel router ed eseguire il programma copiato con il seguente comando.
./hello



You may be the one to comment first. Please leave your message below.