Milí majitelé routerů Turris,
toto fórum bylo 9. 12. 2016 zmrazeno a nahrazeno naším novým Turris fórem. Ještě chvíli bude dostupné k prohlížení, ale již zde není možné přispívat. Více informací naleznete v oznámení o uzavření fóra.
Dear Turris routers users,
this forum has been frozen on Dec 9th, 2016 and replaced by our new Turris forum. It will be read-only accessible for some time after. For more information, read the announcement about closing the forum.
Illegal instruction
, i když kód asembleru, který OCaml vygeneroval, přeložil křížový kompilátor GCC bez potíží. Nevím, zda někde dělám chybu nebo Ocaml prostě nedokáže generovat kód pro hardware Turrisu. Kdyby to někdo dokázal prozkoumat, můžu popsat svůj postup.mkdir turris
cd turris/
export TURRIS=$PWD
/home/jirig/turris
. V některých výpisech budou použity plné cesty, tak ať poznáme, co je specificky moje konfigurace a co součást obecného postupu.wget 'http://www.seas.upenn.edu/~bcpierce/unison/download/releases/unison-2.40.63/unison-2.40.63.tar.gz'
wget 'http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.1.tar.gz'
cd $TURRIS
git clone --depth 1 https://gitlab.labs.nic.cz/turris/openwrt.git
cd openwrt/
cp -f configs/config-turris-nand .config
make defconfig
make tools/install
make toolchain/install
make package/ncurses/install
export TURRIS_TOOLCHAIN=$TURRIS/openwrt/staging_dir/toolchain-powerpc_8540_gcc-4.6-linaro_uClibc-0.9.33.2
export TURRIS_NATIVE=$TURRIS/openwrt/staging_dir/target-powerpc_8540_uClibc-0.9.33.2
powerpc_8540
, které určuje hardwarovou platformu Turrisu.file $TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.13.5, not stripped
file $TURRIS_NATIVE/usr/lib/libncurses.so.5.9
ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, not stripped
STAGING_DIR
(viz soubor $TURRIS_TOOLCHAIN/lib/gcc/powerpc-openwrt-linux-uclibcspe/4.6.4/specs
). Tohle normálně nějak zajišťuje poměrně složitá mašinerie určená pro kompilaci balíčků v rámci OpenWRT. My ji však pro zjednodušení nevyužijeme, první část postupu proto dokončíme ručním nastavením zmiňované proměnné.export STAGING_DIR=$TURRIS_NATIVE
dl
, takže kdybyste si v rámci nějakých nepodařených experimentů stahovali z Cz.nicu čistou verzi OpenWRT, je možné je zkopírovat a ušetřit trochu času.
eskymak@vm:~$ mkdir turris
eskymak@vm:~$ cd turris/
eskymak@vm:~/turris$ export TURRIS=$PWD
eskymak@vm:~/turris$ cd $TURRIS
eskymak@vm:~/turris$ git clone --depth 1 https://gitlab.labs.nic.cz/turris/openwrt.git
Cloning into 'openwrt'...
remote: Counting objects: 6616, done.
remote: Compressing objects: 100% (5551/5551), done.
remote: Total 6616 (delta 1175), reused 4287 (delta 567)
Receiving objects: 100% (6616/6616), 8.89 MiB | 623 KiB/s, done.
Resolving deltas: 100% (1175/1175), done.
eskymak@vm:~/turris$ cd openwrt/
eskymak@vm:~/turris/openwrt$ cp -f configs/config-turris-nand .config
eskymak@vm:~/turris/openwrt$ make defconfig
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... failed.
Checking 'zlib'... ok.
Checking 'gawk'... failed.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'perl'... ok.
Checking '/usr/bin/python2.7'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'openssl'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)
Build dependency: Please install GNU awk.
Prerequisite check failed. Use FORCE=1 to override.
make: *** [tmp/.prereq-build] Error 1
eskymak@vm:~/turris/openwrt$ make tools/install
Collecting package info: done
Collecting target info: done
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... failed.
Checking 'zlib'... ok.
Checking 'gawk'... failed.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'perl'... ok.
Checking '/usr/bin/python2.7'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'openssl'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)
Build dependency: Please install GNU awk.
Prerequisite check failed. Use FORCE=1 to override.
make[1]: *** [tmp/.prereq-build] Error 1
make: *** [tools/install] Error 2
eskymak@vm:~/turris/openwrt$ make toolchain/install
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... failed.
Checking 'zlib'... ok.
Checking 'gawk'... failed.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'perl'... ok.
Checking '/usr/bin/python2.7'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'openssl'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)
Build dependency: Please install GNU awk.
Prerequisite check failed. Use FORCE=1 to override.
make[1]: *** [tmp/.prereq-build] Error 1
make: *** [toolchain/install] Error 2
eskymak@vm:~/turris/openwrt$ make package/ncurses/install
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... failed.
Checking 'zlib'... ok.
Checking 'gawk'... failed.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'perl'... ok.
Checking '/usr/bin/python2.7'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'openssl'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)
Build dependency: Please install GNU awk.
Prerequisite check failed. Use FORCE=1 to override.
make[1]: *** [tmp/.prereq-build] Error 1
make: *** [package/ncurses/install] Error 2
eskymak@vm:~/turris/openwrt$
dev
nebo devel
.PATH=$TURRIS_TOOLCHAIN/bin:$PATH
CC=powerpc-openwrt-linux-gcc CXX=powerpc-openwrt-linux-g++ ./configure \
--build=i686-pc-linux-gnu --host=powerpc-openwrt-linux-uclibcspe \
--prefix-dir=/sd --enable-dedicated \
--without-zlib --without-liblzma --without-liblzo2 --without-png --without-xdg-basedir
CC
a CXX
jsou názvy spustitelných souborů křížového kompilátorubuild=i686-pc-linux-gnu
je platforma, na které kompilujete, já jsem vzal prefix svého kompilátoru GCChost=powerpc-openwrt-linux-uclibcspe
je celý název platformy turrisu (powerpc-openwrt-linux je jen zkratka)prefix-dir=/sd
je místo, kde to na Turrisu bude uloženéenable-dedicated
znamená, že chcete pouze server -- alespoň doufám without-*
zakazuje linkování s knihovnami, které je to schopné najít na mém počítačimake
execinfo.h
. To je nějaká součást systémové knihovny Glibc, která na Turrisu skutečně není. Její použití je závislé na definici symbolu __GLIBC__
. Moc se mi nechtělo zkoumat, odkud se bere, tak jsem ho ve zdrojových souborech OpenTTD zkusil prostě přejmenovat, a pak už mi kompilace proběhla celá:for f in src/network/core/os_abstraction.h src/os/unix/unix.cpp src/os/unix/crashlog_unix.cpp ; do
sed -i.bak 's/__GLIBC__/__NOGLIBC__/g' $f
done
make INSTALL_DIR=$TURRIS install
libstdcpp
, což je standardní knihovna jazyka C++ (zdá se, že jinak si Turris vystačí s programy v C). Nakolik to funguje, jak má, to ovšem jako nehráč neposoudím.
cd $TURRIS
cat > hello.c << "EOF"
#include <stdio.h>
main()
{
printf("Hello world\n");
}
EOF
$TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc -o hello-c hello.c
file hello-c
ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
hello-c
nahrajeme na router a na příkazové řádce ho spustíme, úslužně vypíše požadované Hello world
, i když vznikl v dočista jiném prostředí, než běží. Mně to přijde jako hezké kouzlo.
host
.cd $TURRIS
mkdir ocaml-host
tar xf ocaml-3.12.1.tar.gz -C ocaml-host --strip-components=1
cd ocaml-host/
sed -i.bak 's/otherlibraries graph/otherlibraries/' configure
./configure -prefix $TURRIS/host --no-tk
sed
pouze zajistí vynechání kompilace grafické knihovny, takže kompilace proběhne o něco rychleji a nebudeme závislí na přítomnosti X Windows. Nic zásadního to neovlivňuje, podobně jako volba --no-tk
u konfiguračního skriptu, která vynechá vazbu na TCL GUI Toolkit.make world
make install
file $TURRIS/host/bin/ocamlrun
cd $TURRIS
mkdir ocaml-powerpc
tar xf ocaml-3.12.1.tar.gz -C ocaml-powerpc --strip-components=1
cd ocaml-powerpc/
config/m.h
a config/s.h
, které ovlivňují následnou kompilaci.config/m-templ.h
a config/s-templ.h
. My však využijeme skutečnosti, že spouštění testovacích programů řídí skript config/auto-aux/runtest
a vytvoříme si za něj náhradu, která bude správné výsledky hlásit rovnou, aniž by spouštěla nějaké testovací programy.mv config/auto-aux/runtest config/auto-aux/runtest.orig
cat > config/auto-aux/runtest << "EOF"
#!/bin/sh
output=""
ret=0
case $(basename $1 .c) in
ansi) ;;
async_io) ;;
dblalign) ;;
divmod) ;;
endian) ;;
getgroups) ;;
initgroups) ;;
int64align) ;;
longlong) ;;
setgroups) ;;
signals) ;;
sizes) output="4 4 4 2" ;;
*) echo $0: unexpected test $1 1>&2
exit 99
esac
[ "$output" ] && echo "$output"
exit $ret
EOF
chmod 755 config/auto-aux/runtest
config/m.h
a průběh některých testů závisí na výsledku těch předchozích, je proto dobré ručně sledovat logiku z konfiguračního skriptu (řádky 337 až 506).config/s.h
týče, zatím mi vždy fungoval ten vygenerovaný konfiguračním skriptem. Nemá-li váš systém příliš neobvyklá systémová volání, mělo by to fungovat také.sed -i.bak 's/otherlibraries graph/otherlibraries/' configure
./configure \
-prefix $TURRIS/powerpc \
--no-tk \
-host powerpc-uclibc-linux \
-cc $TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-gcc \
-aspp "$TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-gcc -c" \
-as $TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-as
make world
boot/ocamlrun: cannot execute binary file
file boot/ocamlrun
byterun
a yacc
) a skončí v adresáři boot
. Protože jsme však konfiguračnímu skriptu podsunuli křížový kompilátor, nejdou samozřejmě použít.cp -f $TURRIS/host/bin/{ocamlrun,ocamlyacc} boot/
Makefile
) zakomentovat.sed -i.bak -e '190s/^/#/' -e '192s/^/#/' Makefile
make world
Error on dynamically loaded library
Error: Error on dynamically loaded library: ../otherlibs/unix/dllunix.so: ../otherlibs/unix/dllunix.so: ELF file data encoding not little-endian
mv otherlibs/unix/dllunix.so otherlibs/unix/dllunix.so.target
cp $TURRIS/host/lib/ocaml/stublibs/dllunix.so otherlibs/unix/
make world
Error: Error on dynamically loaded library: ../otherlibs/str/dllcamlstr.so: ../otherlibs/str/dllcamlstr.so: ELF file data encoding not little-endian
mv otherlibs/str/dllcamlstr.so otherlibs/str/dllcamlstr.so.target
cp $TURRIS/host/lib/ocaml/stublibs/dllcamlstr.so otherlibs/str/
make world
mv -f otherlibs/unix/dllunix.so.target otherlibs/unix/dllunix.so
mv -f otherlibs/str/dllcamlstr.so.target otherlibs/str/dllcamlstr.so
touch ocaml
make install
file $TURRIS/powerpc/bin/ocamlrun
cd $TURRIS
cat > hello.ml << "EOF"
print_string "Hello world\n";;
EOF
-custom
požádáme o vytvoření soběstačné verze, jejíž běh už prostředí OCaml potřebovat nebude (o to nám na routeru půjde). Pomocí -verbose
ještě požádáme OCaml kompilátor, aby nám řekl, co při tom vlastně dělá.host/bin/ocamlc -custom -verbose -o hello-ml hello.ml
+ gcc -o 'hello-ml' '-L/home/jirig/turris/host/lib/ocaml' '/tmp/camlprim18dff4.c' '-lcamlrun' -I'/home/jirig/turris/host/lib/ocaml' -lm -ldl -lncurses -lpthread
/tmp
(jméno souboru bude pokaždé jiné) a v kterém je funkce našeho programu. Přitom se mohou použít hlavičkové soubory (.h) jazyka C z adresáře $TURRIS/host/lib/ocaml
. K výsledku se přilinkuje statická knihovna libcamlrun.a
z $TURRIS/host/lib/ocaml
, dynamické systémové knihovny (m, dl, pthread) a dynamická NCurses. Dynamické knihovny jsou brané z míst, která jsou v systému standardní.file hello-ml
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.13.5, not stripped
-cc
. Pomocí parametru -I
určíme, kde se má hledat knihovna libcamlrun.a
. O dynamické knihovny se postará GCC (o systémové samo, o NCurses díky nastavení proměnné STAGING_DIR
). Hlavičkové soubory ošetříme s pomocí parametru -ccopt
podsunutím parametru -I
kompilátoru GCC. Verzi pro Turris tak vytvoříme následujícím příkazem.host/bin/ocamlc -custom -verbose -o hello-ml hello.ml \
-cc $TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc \
-I $TURRIS/powerpc/lib/ocaml \
-ccopt '-I./powerpc/lib/ocaml'
+ /home/jirig/turris/openwrt/staging_dir/toolchain-powerpc_8540_gcc-4.6-linaro_uClibc-0.9.33.2/bin/powerpc-openwrt-linux-uclibcspe-gcc -o 'hello-ml' '-L/home/jirig/turris/powerpc/lib/ocaml' '-L/home/jirig/turris/host/lib/ocaml' -I./powerpc/lib/ocaml '/tmp/camlprimfe2ed6.c' '-lcamlrun' -I'/home/jirig/turris/host/lib/ocaml' -lm -ldl -lncurses -lpthread
file hello-ml
ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
hello-ml
zkopírovat na Turris a zkusit spustit.ldd ./hello-ml
libm.so.0 => /lib/libm.so.0 (0x48018000)
libdl.so.0 => /lib/libdl.so.0 (0x48038000)
libncurses.so.5 => /usr/lib/libncurses.so.5 (0x4804c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x48097000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x480bb000)
libc.so.0 => /lib/libc.so.0 (0x480e5000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x48000000)
hello-ml
tak velký).cd $TURRIS
tar xf unison-2.40.63.tar.gz
cd unison-2.40.63/
PATH=$TURRIS/host/bin:$PATH make UISTYLE=text NATIVE=false
PATH
). Unison kompilujeme jen s textovým rozhraním (UISTYLE
), protože bude fungovat hlavně jako server (a na Turrisu stejně nemáme k dispozici TCL/TK a X Windows). Protože naše OCaml není schopno vytvářet přímo kód pro platformu PowerPC, kompilujeme pouze do bytekódu (NATIVE
).etags
, kterou je možné ignorovat přesně tak, jak výpis navrhuje). Náš testfile unison
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.13.5, not stripped
file *.o
bytearray_stubs.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
osxsupport.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
pty.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
ocamlc -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -ccopt "-o "/home/jirig/turris/unison-2.40.63/osxsupport.o -c /home/jirig/turris/unison-2.40.63/osxsupport.c
ocamlc -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -ccopt "-o "/home/jirig/turris/unison-2.40.63/pty.o -c /home/jirig/turris/unison-2.40.63/pty.c
ocamlc -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -ccopt "-o "/home/jirig/turris/unison-2.40.63/bytearray_stubs.o -c /home/jirig/turris/unison-2.40.63/bytearray_stubs.c
-verbose
, doplníme na začátek správnou cestu a znovu je spustíme.$TURRIS/host/bin/ocamlc -verbose -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -ccopt "-o "/home/jirig/turris/unison-2.40.63/osxsupport.o -c /home/jirig/turris/unison-2.40.63/osxsupport.c
$TURRIS/host/bin/ocamlc -verbose -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -ccopt "-o "/home/jirig/turris/unison-2.40.63/pty.o -c /home/jirig/turris/unison-2.40.63/pty.c
$TURRIS/host/bin/ocamlc -verbose -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -ccopt "-o "/home/jirig/turris/unison-2.40.63/bytearray_stubs.o -c /home/jirig/turris/unison-2.40.63/bytearray_stubs.c
+ gcc -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -fPIC -c -o /home/jirig/turris/unison-2.40.63/osxsupport.o '-Ilwt' '-Iubase' '-Isystem' '-Isystem/generic' '-Ilwt/generic' -I'/home/jirig/turris/host/lib/ocaml' '/home/jirig/turris/unison-2.40.63/osxsupport.c'
+ gcc -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -fPIC -c -o /home/jirig/turris/unison-2.40.63/pty.o '-Ilwt' '-Iubase' '-Isystem' '-Isystem/generic' '-Ilwt/generic' -I'/home/jirig/turris/host/lib/ocaml' '/home/jirig/turris/unison-2.40.63/pty.c'
+ gcc -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -fPIC -c -o /home/jirig/turris/unison-2.40.63/bytearray_stubs.o '-Ilwt' '-Iubase' '-Isystem' '-Isystem/generic' '-Ilwt/generic' -I'/home/jirig/turris/host/lib/ocaml' '/home/jirig/turris/unison-2.40.63/bytearray_stubs.c'
host
" na verzi "powerpc
". Když ještě vynecháme absolutní cesty, vypadají příkazy, které potřebujeme spustit, následovně.$TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -fPIC -c -o osxsupport.o -Ilwt -Iubase -Isystem -Isystem/generic -Ilwt/generic -I$TURRIS/powerpc/lib/ocaml osxsupport.c
$TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -fPIC -c -o pty.o -Ilwt -Iubase -Isystem -Isystem/generic -Ilwt/generic -I$TURRIS/powerpc/lib/ocaml pty.c
$TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT -fPIC -c -o bytearray_stubs.o -Ilwt -Iubase -Isystem -Isystem/generic -Ilwt/generic -I$TURRIS/powerpc/lib/ocaml bytearray_stubs.c
file *.o
bytearray_stubs.o: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped
osxsupport.o: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped
pty.o: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped
ocamlc -verbose -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -o unison unix.cma str.cma bigarray.cma ubase/rx.cmo unicode_tables.cmo unicode.cmo bytearray.cmo system/system_generic.cmo system/generic/system_impl.cmo system.cmo ubase/projectInfo.cmo ubase/myMap.cmo ubase/safelist.cmo ubase/uprintf.cmo ubase/util.cmo ubase/uarg.cmo ubase/prefs.cmo ubase/trace.cmo ubase/proplist.cmo lwt/pqueue.cmo lwt/lwt.cmo lwt/lwt_util.cmo lwt/generic/lwt_unix_impl.cmo lwt/lwt_unix.cmo case.cmo pred.cmo uutil.cmo fileutil.cmo name.cmo path.cmo fspath.cmo fs.cmo fingerprint.cmo abort.cmo osx.cmo external.cmo props.cmo fileinfo.cmo os.cmo lock.cmo clroot.cmo common.cmo tree.cmo checksum.cmo terminal.cmo transfer.cmo xferhint.cmo remote.cmo globals.cmo fpcache.cmo update.cmo copy.cmo stasher.cmo files.cmo sortri.cmo recon.cmo transport.cmo strings.cmo uicommon.cmo uitext.cmo test.cmo main.cmo linktext.cmo osxsupport.o pty.o bytearray_stubs.o -cclib -lutil
-cc
, -I
a -ccopt
na konec příkazu a opětovným spuštěním.$TURRIS/host/bin/ocamlc -verbose -I lwt -I ubase -I system -I system/generic -I lwt/generic -custom -g -o unison unix.cma str.cma bigarray.cma ubase/rx.cmo unicode_tables.cmo unicode.cmo bytearray.cmo system/system_generic.cmo system/generic/system_impl.cmo system.cmo ubase/projectInfo.cmo ubase/myMap.cmo ubase/safelist.cmo ubase/uprintf.cmo ubase/util.cmo ubase/uarg.cmo ubase/prefs.cmo ubase/trace.cmo ubase/proplist.cmo lwt/pqueue.cmo lwt/lwt.cmo lwt/lwt_util.cmo lwt/generic/lwt_unix_impl.cmo lwt/lwt_unix.cmo case.cmo pred.cmo uutil.cmo fileutil.cmo name.cmo path.cmo fspath.cmo fs.cmo fingerprint.cmo abort.cmo osx.cmo external.cmo props.cmo fileinfo.cmo os.cmo lock.cmo clroot.cmo common.cmo tree.cmo checksum.cmo terminal.cmo transfer.cmo xferhint.cmo remote.cmo globals.cmo fpcache.cmo update.cmo copy.cmo stasher.cmo files.cmo sortri.cmo recon.cmo transport.cmo strings.cmo uicommon.cmo uitext.cmo test.cmo main.cmo linktext.cmo osxsupport.o pty.o bytearray_stubs.o -cclib -lutil -cc $TURRIS_TOOLCHAIN/bin/powerpc-openwrt-linux-uclibcspe-gcc -I $TURRIS/powerpc/lib/ocaml -ccopt '-I../powerpc/lib/ocaml'
file unison
ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
unison
stačí nakopírovat na router na nějaké standardní umístění (například do /usr/bin
) a můžeme začít používat synchronizaci souborů, nic dalšího už potřeba není.not stripped
" mohlo inspirovat k použití příkazu strip
a odstranění debugovacích informací, které zbytečně zvyšují velikost souboru, bych na rozloučenou ještě varoval: nedělejte to, odstraníte tím i bytekód obsažený v souboru, takže vám výsledek bude k ničemu.
mkdir turris
cd turris/
export TURRIS=$PWD
wget http://www.kyralovi.cz/tmp/turris/unison-2.48.3_turris.patches.tar.gz
tar xzf unison-2.48.3_turris.patches.tar.gz
cd $TURRIS
git clone --depth 1 https://gitlab.labs.nic.cz/turris/openwrt.git
cd openwrt/
cp -f configs/config-turris-nand .config
make defconfig
git apply ../0001-toolchain-add-OCaml-compiler.patch
git apply ../0002-package-Add-Unison-File-Synchronizer.patch
make defconfig
sed -i "s/# CONFIG_OCAML is not set/CONFIG_OCAML=y/" .config
make -j4
pro kompilaci ve čtyřech vláknech najednou.make toolchain/install
make package/ncurses/install
make -j4 toolchain/install
make -j4 package/ncurses/install
echo "CONFIG_PACKAGE_unison=m" >>.config
make package/unison/compile
make package/unison/install
$TURRIS/openwrt/bin/mpc85xx/packages/base/
ls -la $TURRIS/openwrt/bin/mpc85xx/packages/base/unison*.ipk
-rw-r--r-- 1 marian users 2189096 12. bře 20.27 /mnt/data/turris/openwrt/bin/mpc85xx/packages/base/unison_2.48.3-1_mpc85xx.ipk
opkg install /cesta/k/balíčku/unison_2.48.3-1_mpc85xx.ipk
unison -version
turris ~ # unison -version
unison version 2.48.3
turris ~ #
Powered by mwForum 2.29.3 © 1999-2013 Markus Wichitill