Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
smesh [2010/06/14 00:16] lucasmesh [2014/07/03 14:57] (versione attuale) – modifica esterna 127.0.0.1
Linea 1: Linea 1:
-===== Compilazione di Smesh per architettura MIPS =====+b===== Compilazione di Smesh per architettura MIPS =====
  
 === Toolchain === === Toolchain ===
  
 Questo sarà lo strumento essenziale per poter compilare i sorgenti per architettura MIPS. L'ho ricavato da una compilazione di OpenWrt, quindi è testato e funzionante ed in più sfrutta le uClibc generando eseguibili molto contenuti. Lo allego {{:smesh:toolchain.tar.gz|qui}} così che sia già disponibile senza dover ricompilare OpenWrt. Questo sarà lo strumento essenziale per poter compilare i sorgenti per architettura MIPS. L'ho ricavato da una compilazione di OpenWrt, quindi è testato e funzionante ed in più sfrutta le uClibc generando eseguibili molto contenuti. Lo allego {{:smesh:toolchain.tar.gz|qui}} così che sia già disponibile senza dover ricompilare OpenWrt.
 +
 === Preparazione alla compilazione === === Preparazione alla compilazione ===
  
Linea 10: Linea 10:
   * Estrarre anche {{:smesh:smesh-src-v2.3.tar.gz|SMesh}} e all'interno della sua cartella estrarre {{:smesh:spines-src-3.2.tar.gz|Spines}} rinominando la cartella in 'spines'   * Estrarre anche {{:smesh:smesh-src-v2.3.tar.gz|SMesh}} e all'interno della sua cartella estrarre {{:smesh:spines-src-3.2.tar.gz|Spines}} rinominando la cartella in 'spines'
   * Ora ci serve anche {{:smesh:libpcap_mips-compiled.tar.gz|libpcap}} che non ha bisogno di modifiche dall'originale perciò si può copiare già compilato direttamente nella cartella di Smesh   * Ora ci serve anche {{:smesh:libpcap_mips-compiled.tar.gz|libpcap}} che non ha bisogno di modifiche dall'originale perciò si può copiare già compilato direttamente nella cartella di Smesh
-  * Per chiarezza ecco come devono essere le cartelle: +  * Per chiarezza ecco come devono essere le cartelle:
  
 {{:smesh:cartella_smesh.jpg|}} {{:smesh:cartella_smesh.jpg|}}
Linea 33: Linea 33:
  
   * Ora bisogna apportare un'ulteriore modifica al file build   * Ora bisogna apportare un'ulteriore modifica al file build
 +
   export CROSS="/INSERIRE_PATH_ASSOLUTA/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin"   export CROSS="/INSERIRE_PATH_ASSOLUTA/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin"
 dove in INSERIRE_PATH_ASSOLUTA si deve inserire la path completa del toolchain scaricato prima dove in INSERIRE_PATH_ASSOLUTA si deve inserire la path completa del toolchain scaricato prima
 +
 === Modifica dei sorgenti === === Modifica dei sorgenti ===
 +
 Ora dobbiamo applicare le nostre modifiche per poter far girare le trame di controllo di SMesh e Spines su un'interfaccia diversa dal wifi, mentre Smesh continua a gestire i suoi client su wifi. Ora dobbiamo applicare le nostre modifiche per poter far girare le trame di controllo di SMesh e Spines su un'interfaccia diversa dal wifi, mentre Smesh continua a gestire i suoi client su wifi.
   * Scaricare le nostre {{:smesh:patches.tar.gz|patches}} e copiare smesh.patch in smesh-src-v2.3 e spines.patch in spines   * Scaricare le nostre {{:smesh:patches.tar.gz|patches}} e copiare smesh.patch in smesh-src-v2.3 e spines.patch in spines
   * Ora entrare rispettivamente in smesh-src-v2.3 e poi in spines per testare le patches con i seguenti comandi   * Ora entrare rispettivamente in smesh-src-v2.3 e poi in spines per testare le patches con i seguenti comandi
 +
   patch --dry-run --verbose -p1 -i smesh.patch   patch --dry-run --verbose -p1 -i smesh.patch
   patch --dry-run --verbose -p1 -i spines.patch   patch --dry-run --verbose -p1 -i spines.patch
Linea 107: Linea 107:
 dove BUILD_SMESH va messo a 0 dove BUILD_SMESH va messo a 0
  
-  * Compiliamo Spines  +  * Compiliamo Spines 
  
   cd smesh_proxy/   cd smesh_proxy/
Linea 115: Linea 115:
  
   SMesh build is ready on install directory   SMesh build is ready on install directory
 +
 +  * Dobbiamo linkare le librerie di Spines prima di compilare SMesh in modo che vengano trovate durante la compilazione
 +
 +  cd spines/libspines/
 +  ln -s PATH_ASSOLUTA/smesh_proxy/spines/libspines/* ../
 +
 +  * Torniamo al file build e lo modifichiamo così
 +
 +  BUILD_SMESH=1
 +  BUILD_SPINES=0
 +
 +  * Compiliamo Smesh
 +
 +  ./build
 +
 +la compilazione dovrebbe concludersi così
 +
 +  SMesh build is ready on install directory
 +
 +  * Nella cartella 'install' troveremo quindi i 2 eseguibili ed i files di configurazione
 +
 +=== Files di configurazione ===
 +
 +Ora sia Spines che SMesh supportano l'aggiunta di un parametro chiamato 'ctrl_if'. Questa opzione dice ai 2 programmi su quale interfaccia scambiarsi le trame di controllo.
 +Modifichiamo quindi i files di configurazione e di avvio all'occorrenza
 +
 +  * Copiare questa {{:smesh:conf_patch.tar.gz|patch}} nella cartella 'install' poi dare il solito comando
 + 
 +  cd install/
 +  patch --dry-run --verbose -i conf.patch
 +
 +se ok dare
 +
 +  patch --verbose -i conf.patch
 +
 +=== Copiare Smesh ===
 +
 +  * Di seguito i file da copiare nelle rispettive cartelle nella RSpro
 +
 +  install/config.wireless > /etc/config.wireless
 +  install/runSmesh > /etc/runSmesh
 +  install/smesh > /etc/init.d/smesh
 +  install/smesh.conf > /etc/smesh.conf
 +  install/smesh_proxy > /usr/sbin/smesh_proxy
 +  install/spines > /usr/sbin/spines
 +
 +  * Rendere eseguibili i binari e lo script di avvio con
 +
 +  chmod +x 'file'
 +
 +=== Lanciare Smesh ===
 +
 +  * Ora c'è tutto il necessario per lanciare Smesh su una board MIPS (es. Ubiquiti RouterStationPro)
 +con il comando
 +
 +  /etc/init.d/smesh start
 +
 +  * Per abilitarlo all'avvio di Openwrt
 +
 +  /etc/init.d/smesh enable
 +
 +=== Note x compilazione alix ===
 +iproute dà errore nella compilazione, per eliminarlo bisogna modificare il file
 +
 +i486-openwrt-linux-uclibc/sys-include/linux/if_packet.h
 +
 +che si trova all'interno del tool chain aggiungendo le seguenti righe
 +
 +''/* types.h does not always (?) inlucde __aligned_u64 */''
 +
 +''#ifndef __aligned_u64''
 +
 +''#define __aligned_u64 __u64 __attribute__((aligned(8)))''
 +
 +''#  endif''