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:53] lucasmesh [2014/07/03 14:57] (versione attuale) – modifica esterna 127.0.0.1
Linea 1: Linea 1:
 +b===== Compilazione di Smesh per architettura MIPS =====
  
 +=== 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.
 +
 +=== Preparazione alla compilazione ===
 +
 +  * Creare una cartella ed estrarci il toolchain
 +  * 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
 +  * Per chiarezza ecco come devono essere le cartelle:
 +
 +{{:smesh:cartella_smesh.jpg|}}
 +
 +  * Copiare questa {{:smesh:build_patch.tar.gz|patch}} in 'smesh_proxy' e testarla
 +
 +  patch --dry-run --verbose -p1 -i build.patch
 +se questo è l'output
 +  Hmm...  Looks like a unified diff to me...
 +  The text leading up to this was:
 +  --------------------------
 +  |--- smesh-src-v2.3-ORIG/build 2008-05-16 23:19:34.000000000 +0200
 +  |+++ smesh_proxy/build 2010-06-14 10:18:22.142070306 +0200
 +  --------------------------
 +  Patching file build using Plan A...
 +  Hunk #1 succeeded at 16.
 +  Hunk #2 succeeded at 30.
 +  Hunk #3 succeeded at 209.
 +  done
 +allora possiamo dare il comando non in dry-mode
 +  patch --verbose -p1 -i build.patch
 +
 +  * 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"
 +dove in INSERIRE_PATH_ASSOLUTA si deve inserire la path completa del toolchain scaricato prima
 +
 +=== 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.
 +  * 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
 +
 +  patch --dry-run --verbose -p1 -i smesh.patch
 +  patch --dry-run --verbose -p1 -i spines.patch
 +
 +  * Se l'output è questo
 +
 +  Hmm...  Looks like a unified diff to me...
 +  The text leading up to this was:
 +  --------------------------
 +  |--- smesh-src-v2.3-ORIG/smesh_proxy/smesh_proxy.c 2008-05-17 00:05:37.000000000 +0200
 +  |+++ smesh_proxy/smesh_proxy/smesh_proxy.c 2010-06-04 10:16:46.000000000 +0200
 +  --------------------------
 +  Patching file smesh_proxy/smesh_proxy.c using Plan A...
 +  Hunk #1 succeeded at 78.
 +  Hunk #2 succeeded at 93.
 +  Hunk #3 succeeded at 233.
 +  Hunk #4 succeeded at 875.
 +  Hunk #5 succeeded at 1344.
 +  Hunk #6 succeeded at 1387.
 +  Hunk #7 succeeded at 1501.
 +  done
 +e questo
 +  Hmm...  Looks like a unified diff to me...
 +  The text leading up to this was:
 +  --------------------------
 +  |diff -Naur spines-src-3.2-ORIG/configure spines/configure
 +  |--- spines-src-3.2-ORIG/configure 2008-11-18 02:10:11.000000000 +0100
 +  |+++ spines/configure 2010-06-03 09:56:37.171851000 +0200
 +  --------------------------
 +  Patching file configure using Plan A...
 +  Hunk #1 succeeded at 6090.
 +  Hmm...  The next patch looks like a unified diff to me...
 +  The text leading up to this was:
 +  --------------------------
 +  |diff -Naur spines-src-3.2-ORIG/daemon/kernel_routing.c spines/daemon/kernel_routing.c
 +  |--- spines-src-3.2-ORIG/daemon/kernel_routing.c 2009-05-13 21:05:52.000000000 +0200
 +  |+++ spines/daemon/kernel_routing.c 2010-06-10 10:49:55.351420000 +0200
 +  --------------------------
 +  Patching file daemon/kernel_routing.c using Plan A...
 +  Hunk #1 succeeded at 62.
 +  Hunk #2 succeeded at 85.
 +  Hunk #3 succeeded at 145.
 +  Hmm...  The next patch looks like a unified diff to me...
 +  The text leading up to this was:
 +  --------------------------
 +  |diff -Naur spines-src-3.2-ORIG/daemon/spines.c spines/daemon/spines.c
 +  |--- spines-src-3.2-ORIG/daemon/spines.c 2009-05-13 21:05:52.000000000 +0200
 +  |+++ spines/daemon/spines.c 2010-06-10 11:21:08.646420000 +0200
 +  --------------------------
 +  Patching file daemon/spines.c using Plan A...
 +  Hunk #1 succeeded at 95.
 +  Hunk #2 succeeded at 608.
 +  done
 +allora possiamo eseguire il comando non in dry-mode
 +  patch --verbose -p1 -i smesh.patch
 +  patch --verbose -p1 -i spines.patch
 +
 +=== Compilazione ===
 +
 +  * A questo punto dobbiamo compilare prima Spines. Modifichiamo il file build in
 +
 +  BUILD_SMESH=1
 +  BUILD_SPINES=1
 +dove BUILD_SMESH va messo a 0
 +
 +  * Compiliamo Spines 
 +
 +  cd smesh_proxy/
 +  ./build
 +
 +la compilazione dovrebbe concludersi così
 +
 +  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''