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 _______________________________________________ Wireless mailing list [email protected] http://ml.ninux.org/mailman/listinfo/wireless
