Cross compiling voor Synology - Part II

Door kraades op donderdag 3 september 2015 14:44 - Reacties (7)
Categorie: Synology, Views: 4.561

In de vorige post Simon's Blog: Cross compiling voor Synology hebben we gezien hoe we een C programma kunnen cross compileren voor Synology.

Hierin staat ook aangegeven hoe je de Synology toolchain kunt installeren. Ik ga ervan uit dat je deze al hebt geinstalleerd. Net als Ubuntu zelf... :)

In deze post gaan we een programma cross compilen met behulp van het configure en make commando.

De eerste stap is om de source code te downloaden. In dit voorbeeld compileren we sysstat van Sebastien Godard.

Sysstat bevat o.a. iostat en mpstat.

iostat - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

code:
1
2
3
4
5
6
Usage: ./iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]


mpstat - Report processors related statistics

code:
1
2
3
4
Usage: ./mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ]
[ -P { <cpu> [,...] | ON | ALL } ]


Start voor het gemak een root sessie.
sudo su -

Download de source code en pak deze uit.
wget http://perso.orange.fr/sebastien.godard/sysstat-11.0.6.tar.xz
tar xf sysstat-11.0.6.tar.xz

Vervolgens gaan we configure en make uitvoeren.

In de DSM Developer Guide staan een aantal voorbeelden van instellingen voor verschillende Synology modellen voor CC, LD, RANLIB, CFLAGS, LDFLAGS, host, target, build etc.

Voor de DS715 die ik heb is dit:
env CC=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
LD=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld \
RANLIB=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib \
CFLAGS="-I/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/usr/include -DSYNO_ANNAPURNA_ALPINE -O2 -mfloat-abi=hard -mtune=cortex-a15 -mfpu=neon-vfpv4 -mthumb -I/usr/syno/include -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -DSYNO_PLATFORM=ALPINE" \
LDFLAGS="-L/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/lib -L/usr/syno/lib" \
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=i686-pc-linux --prefix=/usr/local

Dit betekent dat het configure commando wordt uitgevoerd met de juiste settings voor CC etc.

Ga naar de source directory en voer het bovenstaande commando uit.
cd sysstat-11.0.6
env CC=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
LD=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld \
RANLIB=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib \
CFLAGS="-I/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/usr/include -DSYNO_ANNAPURNA_ALPINE -O2 -mfloat-abi=hard -mtune=cortex-a15 -mfpu=neon-vfpv4 -mthumb -I/usr/syno/include -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -DSYNO_PLATFORM=ALPINE" \
LDFLAGS="-L/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/lib -L/usr/syno/lib" \
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=i686-pc-linux --prefix=/usr/local

Voer dan make uit zodat de programma's worden gecompileerd.
make

Een make install kun je beter niet uitvoeren omdat de binaries niet compatible zijn met je Linux platform (hier: Ubuntu) en alleen draaien op de betreffende Synology.

Kopieer de binaries iostat en mpstat naar de Synology en kijk of ze werken.
DS715> ./iostat
Linux 3.2.40 (DS715)    09/03/2015      _armv7l_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.23    0.10    0.30    1.38    0.00   97.99

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               2.91       809.03       218.10  962115216  259363756
sdb               2.76       733.01       218.10  871700275  259363756
mtdblock0         0.00         0.00         0.00         15          0
mtdblock1         0.00         0.00         0.00         15          0
mtdblock2         0.00         0.00         0.00         15          0
mtdblock3         0.00         0.00         0.00         15          0
mtdblock4         0.00         0.00         0.00         15          0
mtdblock5         0.00         0.00         0.00         15          0
md0               0.12         1.15         0.22    1362306     262760
md1               0.00         0.00         0.00       2160         32
sdq               0.00         0.02         0.03      23485      31300
sdr              11.61         0.70      1364.81     834969 1623050143
md2               6.68      1540.88       217.81 1832436940  259022736
dm-0              0.00         0.00         0.00       2127          0
dm-1              6.68      1540.88       217.81 1832430957  259022736

DS715> ./mpstat -P ALL
Linux 3.2.40 (DS715)    09/03/2015      _armv7l_        (4 CPU)

02:33:48 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:33:48 PM  all    0.23    0.10    0.25    1.38    0.00    0.05    0.00    0.00    0.00   97.99
02:33:48 PM    0    0.24    0.36    0.49    2.47    0.00    0.08    0.00    0.00    0.00   96.36
02:33:48 PM    1    0.26    0.01    0.20    1.12    0.00    0.04    0.00    0.00    0.00   98.36
02:33:48 PM    2    0.21    0.01    0.17    0.98    0.00    0.03    0.00    0.00    0.00   98.59
02:33:48 PM    3    0.21    0.01    0.16    0.95    0.00    0.03    0.00    0.00    0.00   98.63
DS715>

In de volgende post gaan we kijken hoe de Synology Package Toolkit werkt.

Volgende: Cross compiling voor Synology 08-'15 Cross compiling voor Synology

Reacties


Door nindustries, vrijdag 4 september 2015 13:47

Leuke blog!
Ook al eens gedacht om te beschrijven hoe men iets kan compileren voor Synology adhv synocommunity's spksrc?

Door Tweakers user kraades, vrijdag 4 september 2015 14:21

Mogelijk...
Ik wilde eerst nog de Synology Package Toolkit behandelen. Zie pag. 37 43 in de DSM Developer Guide.

[Reactie gewijzigd op dinsdag 13 oktober 2015 19:16]


Door Tweakers user Indir, zaterdag 5 september 2015 14:42

Als een eigenaar van een Synology volg ik aandachtig uw blogs. Zeer leuk om te lezen en van te leren!

Door Tweakers user Brantje, dinsdag 13 oktober 2015 18:41

kraades schreef op vrijdag 04 september 2015 @ 14:21:
Mogelijk...
Ik wilde eerst nog de Synology Package Toolkit behandelen. Zie pag. 37 in de DSM Developer Guide.
Denk dat je pagina 43 bedoeld ;p.

Door Tweakers user kraades, dinsdag 13 oktober 2015 19:15

Brantje schreef op dinsdag 13 oktober 2015 @ 18:41:
[...]

Denk dat je pagina 43 bedoeld ;p.
Bedankt, nadat ik de blog heb geschreven heeft Synology de guide blijkbaar geupdate.

Syno_3rdParty_Apps_Dev_Guide_20150911

Door Tweakers user elleP, woensdag 14 oktober 2015 14:51

als je je ./configure runt met --prefix=[path-naar-een-of-andere-dir]
kan je make install gebruiken om alle nodige output files naar een of andere dir te kopieren. Vooral handig voor grotere tools die nit alleen uit 1 executable bestaan.

Verder zie ik het nut niet van je root-sessie ;)

Door Tweakers user kraades, woensdag 14 oktober 2015 15:45

elleP schreef op woensdag 14 oktober 2015 @ 14:51:
als je je ./configure runt met --prefix=[path-naar-een-of-andere-dir]
kan je make install gebruiken om alle nodige output files naar een of andere dir te kopieren. Vooral handig voor grotere tools die nit alleen uit 1 executable bestaan.

Verder zie ik het nut niet van je root-sessie ;)
Dat is inderdaad handig(er).

Hm, ik eigenlijk ook niet. ;)

Reactie formulier
(verplicht)
(verplicht, maar wordt niet getoond)
(optioneel)

Voer de code van onderstaand anti-spam plaatje in: