Psotnic under OpenWRT

psotnicIn questa breve guida vi spiegherò come cross-compilare ed eseguire Psotnic sotto OpenWRT,  il famoso OS embedded per router (e non). Esistono all’incirca 2 metodi per far girare il nostro amato bot ma, tranne in pochi casi, sarete costretti ad usare quello più difficile. Il problema principale è che la maggioranza dei router casalinghi sono sviluppati su un’ architettura non-x86 (es: MIPSel) per cui, le applicazioni compilate normalmente sul vostro PC (x86) non gireranno.

Metodo facile

Se siete “fortunati” possessori di piattaforme embedded con sufficiente spazio disco, potete installare la GNU toolchain (con opkg) e compilare Psotnic direttamente, come fareste sul vostro PC.  That’s all!

Metodo difficile

Se, invece, siete “sfigati” possessori di router domestici con non più di 4~8 MByte di memoria flash, allora vi toccherà cross-compilare Psotnic sul vostro PC e, una volta terminato, trasferire il binario in quel poco di spazio disco che vi rimane (assicuratevi di avere almeno 900 KByte liberi). Questa procedura può essere divisa in 3 step:

  1. Configurazione e compilazione di OpenWRT
  2. Configurazione, fixing e compilazione di Psotnic
  3. Istallazione delle librerie dipendenti (libstdcpp)
 Configurazione e compilazione di OpenWRT

Per prima cosa occore procurarsi e scompattare i sorgenti della versione di OpenWRT che gira sul vostro router o piattaforma embedded, nel mio caso si tratta di Kamikaze 8.09:

wget http://downloads.openwrt.org/kamikaze/8.09/kamikaze_8.09_source.tar.bz2
tar jxf kamikaze_8.09_source.tar.bz2

Prima di procedere con la configurazione è necessario conoscere il tipo di piattaforma hardware utilizzata dal nostro router. Probabilmente il modo migliore per farlo è leggere la Table Of Hardware sul wiki di OpenWRT, mentre il modo peggiore è smontare l’apparato e leggere direttamente sulla board. Se prendiamo, ad esempio, il famosissimo router WRT54GL, scopriremo che è basato su una piattaforma Broadcom 5352. A questo punto potete lanciare lo script configurazione e settare il target system:

cd kamikaze_8.09
make menuconfig

Vi comparirà un’interfacciaopenwrtconf grafica uguale o simile a quella che vedete qui, non dovrete fare altro che settare il target system compatibile con la vostra piattaforma hardware, uscire, salvare e lanciare la compilazione.

make

Prima di uscirvene con “Ma quanto diavolo ci mette?” vi avviso che serviranno all’incirca 20 minuti (@2Ghz) per compilare il tutto, per cui vi consiglio di impiegare il vostro tempo altrove, magari facendovi una doccia o la barba, così sembrerete meno nerd ;)

Terminata la compilazione, troveremo, all’interno della directory staging_dir, la toolchain che ci permetterà di cross-compilare Psotnic (o qualunque altro software), nel caso preso in esempio si tratterà della directory toolchain-mipsel_gcc3.4.6 .

Configurazione, fixing e compilazione di Psotnic

Ora che vi siete costruiti gli strumenti per cross-compilare, potete procedere con la configurazione e la compilazione di Psotnic. Tornate dunque nella vostra home, scaricate e scompattate l’ultima versione del bot (oggi è la 0.2.14). Prima di lanciare lo script di configurazione, a causa di una piccola svista degli sviluppatori (già segnalata mesi fa), è necessario fare una piccola modifica al file configure:

cd
wget http://www.psotnic.com/src/psotnic-0.2.14.tar.gz
tar zxf psotnic.tar.gz
cd psotnic-0.2.14
nano configure

Aprite il file configure col vostro editor preferito (il mio è nano, per i nerd è vi) e  alla linea 167 cancellate “${cc_prefix}”, tutto qui! Adesso potete lanciare lo script di configurazione con gli opportuni argomenti che trovate qui sotto:

./configure --cc-prefix=~/kamikaze_8.09/staging_dir/toolchain-mipsel_gcc3.4.6/bin/mipsel-linux-
--cc-options="-fno-builtin -Os" --disable-adns --no-irc-backtrace --little-endian

Ricordatevi che ogni piattaforma avrà la sua toolchain, quindi, se necessario, modificate l’argomento –cc-prefix con il percorso giusto. Prestate attenzione anche all’ ultimo argomento –little-endian, mettetelo solo se l’architettura hardware del vostro router è, appunto, little endian, in caso contrario, mettete –big-endian . Se non sapete di cosa sto parlando, leggete su wikipedia o parlatene col Sommo di turno. Complimenti, la parte “difficile” è terminata, non vi resta che lanciare la compilazione con:

make dynamic

Se tutto è andato liscio, troverete l’eseguibile nella directory bin e non dovrete fare altro che caricarlo sul vostro router.

Istallazione delle librerie dipendenti

Ora che l’eseguibile è sul vostro router è necessario, se non l’avete già fatto in precedenza, istallare le librerie Standard C++ . Fate il login sul vostro router e lanciate opkg come indicato qui sotto:

opkg update
opkg install libstdcpp

Enjoy!!wrtpsotnic

Raccomandazioni

In generale le memorie flash hanno un ciclo limitato di scritture per cella, per quanto il filesystem JFFS possa ottimizzare le scritture sul disco e fare wear leveling, non è una buona idea far girare sul vostro router uno slave o un main perché questi, con il loro database (userlist), scriverebbero sul disco troppo spesso e, alla lunga, consumerebbero tutte le celle. Alla luce di quanto detto poc’anzi e considerato che queste piattaforme hanno, solitamente, risorse assai limitate, vi consiglio di usare esclusivamente il bot in modalità leaf .

Download

Se siete pigri e possedete un router con architettura MIPSel (es: WRT54GL ) , nella sezione stuff trovate i binari di Psotnic per MIPSel e i relativi moduli.

English version (Google translator)

Un commento su “Psotnic under OpenWRT
  1. Doctor`Saw scrive:

    oh, era una vita che cercavo una guida semplice per fare cross compiling.
    Ed ora che l’ho trovata cosa farò nelle notti insonni??? :D

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>