Cross compiling voor Synology - Part II

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

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.