[Ninux-Wireless] netsukuku

Luca Dionisi luca.dionisi a gmail.com
Dom 29 Gen 2012 16:13:08 CET


Sono andato un po' avanti con questa cosa della cross-compilazione.

Ho scaricato la OpenWRT taggata backfire_10.03.1 dal loro repository.
Ho seguito le istruzioni del sito per compilare la Buildroot, dapprima
con una configurazione default (make defconfig) impostando solo le
caratteristiche di architettura del mio router Omnima (System:
Infineon/ADMtek ADM5120, little endian, profile: Edimax BR-6104KP).
Poi con un make menuconfig in cui ho indicato:
 * Build the OpenWrt SDK
 * Build the OpenWrt based Toolchain
 * Advanced configuration options -> Build gdb
 * e alcuni pacchetti che mi sono essenziali

Dapprima non avevo notato che ci fosse fra i pacchetti ufficiali anche
glib2 (forse non avevo fatto feeds update) e quindi mi sono messo a
farne la cross-compilazione a mano e alla fine c'ero riuscito, con la
GLib 2.30.1
Poi ho visto che c'era la versione ufficiale; poco male, tutta
esperienza. Inoltre guardando il Makefile di questa versione (che
nella backfire_10.03.1 è la GLib 2.26.1) ho riconosciuto le opzioni
per configure che avevo trovato a mano a forza di prove, quindi ho
anche scoperto un po' (molto superficialmente) di come si articola il
sistema di build di openwrt.
Nel mio ambiente di sviluppo (ubuntu) io uso la GLib 2.28.6 ma credo
che la 2.26 vada bene per i miei scopi.
Invece va notato che la backfire_10.03 contiene il pacchetto glib2 con
la versione GLib 2.22.2 e questa risulta troppo vecchia (causa
problemi con la libreria libgee di cui parlo dopo)

Le prime prove di compilazione di un programma Vala le ho fatte a
questo punto, usando il cross-compiler in staging_dir/toolchain-* e
indicando le directory su cui cercare gli include e quelle su cui
cercare le libs all'interno di staging_dir/target-*.
La compilazione di un programma semplice va a buon fine.

Sul mio router Omnima avevo già installato a suo tempo una backfire_10.03.
Le prime prove di esecuzione quindi le ho fatte con i pacchetti della
backfire_10.03, scaricandoli con opkg install.
L'esecuzione funzionava correttamente.
Ma va notato (cosa che all'inizio non avevo compreso) che il programma
era stato compilato con la glib 2.26 e ora girava con la 2.22.

Fra i pacchetti ufficiali di openwrt ci sono anche altre due delle
dipendenze che mi sono essenziali:
 * pthsem     (che è una versione "estesa" del libpth)
 * libgcrypt
Questi pacchetti ho visto che ci sono ma non li ho provati ancora...
ma cerchiamo di essere ottimisti!

L'ultima libreria che mi serviva è la libgee (https://live.gnome.org/Libgee)
Si tratta di un software semplice, e infatti la cross-compilazione non
ha dato problemi.
Ho provato allora a compilare un programma Vala che facesse uso della
libgee. La cross-compilazione non ha dato problemi.
Ho portato poi sia la libreria libgee, sia il programma utilizzatore,
dentro il router.
In esecuzione il programma richiamava correttamente la libgee, ma
questa mi dava l'errore: undefined symbol g_malloc0_n.
A furia di verificare ho visto che questo simbolo non si trovava nella
GLib 2.22, mentre nelle versioni più recenti c'era.

Ho quindi deciso che il passo successivo sarebbe stato installare la
versione 10.03.1 sul mio router. (e di questa piccola odissea trovate
traccia nelle mie mail precedenti in lista)

Ora anche il programma in Vala che fa uso della libgee funziona
correttamente nel router.
Proseguirò con i test delle altre dipendenze e poi proverò a far
girare il programma netsukuku allo stato attuale. Vi tengo informati.

--Luca



Maggiori informazioni sulla lista Wireless