


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
Related Posts:
Leggi Anche









gennaio 5th, 2012 at 18:49
Ciao ,
anke se è trascorso molto tempo spero che tu mi possa dare ugualmente una mano.
Ho un pc con ubuntu 10.04 e un WRT54GL linksys e dovrei compilare un programma in c che usa le libpcap ho scaricato la buildroot con il toolchain al suo interno così :
svn co svn://svn.openwrt.org/openwrt/branches/backfire
ho seguito la guida del sito openwrt :
http://wiki.openwrt.org/doc/howto/buildroot.exigence
alla fine do il comando :
/home/pippo/backfire/staging_dir/toolchain-mipsel…./usr/bin/mipsel-uclibc-gcc mio_programma.c -o mio_programma /home/pippo/backfire/staging_di/target-mipsel…./usr/lib/libpcap.a
me lo compila , lo vado a mettere sul linksys e mi da l’errore :
segmentation fault
anche se faccio il semplice hello.c , me lo compila e sul linksys mi da :
segmentation fault
help me , dove sbaglio ?
Rispondi