主な情報源は、公式DSM開発者ガイドです 。
一般的な用語でツールチェーンとの作業(インストール、オープンソースプロジェクトのコンパイル、パッケージ化)を説明します。 なぜなら DS 114のバジェットバージョンを購入しました。これには、Marvell Armada 370とボンネットの下にあるDSM 5.2ファームウェアバージョンがあり、すべてがアームの下に組み立てられます。
環境を準備するには、 パッケージツールキットを使用します 。これは、 Synology Open Source Projectプロジェクトページからダウンロードできます。 さまざまな価格カテゴリのデバイスにはさまざまなプロセッサが搭載されているため、いくつかのツールセットをダウンロードする必要があるため、これはもう少し便利です。
詳細については、NASのCPUの種類のページをご覧ください。
パッケージツールキットを解凍する
$ mkdir -p ~/synology/toolkit
$ tar xvf pkgscripts.tgz -C ~/synology/toolkit
環境とツールを引き出す
$ cd ~/synology/toolkit/pkgscripts/
$ sudo ./EnvDeploy -v 5.2 -p armada370
ブースト
Boostは驚くほど簡単です。 ファイル〜/ user-config.jamに記述します
using gcc : arm : arm-marvell-linux-gnueabi-g++ ;
収集:
$ ./bootstrap.sh --prefix=/home/dmitry/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc $ export PATH=~/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/bin:$PATH $ ./b2 toolset=gcc-arm link=static threading=multi install
Webtoolkit
CMakeを構成するには、 toolchain-file toolchain-arm-marvell.cmakeを使用します
SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CMAKE_C_COMPILER /home/dmitry/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-gcc) SET(CMAKE_CXX_COMPILER /home/dmitry/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-g++) SET(CMAKE_LINKER /home/dmitry/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-ld.gold) SET(CMAKE_FIND_ROOT_PATH /home/dmitry/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
次:
$ tar xvf wt-3.3.4.tar.gz $ cd wt-3.3.4 $ mkdir build $ cd build $ cmake -DCMAKE_TOOLCHAIN_FILE=~/toolchain-arm-marvell.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DSHARED_LIBS=OFF \ -DCMAKE_INSTALL_PREFIX=/home/dmitry/synology/toolkit/build_env/ds.armada370-5.2/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc \ .. $ make $ make install
私がパッケージ化する例をコンパイルしています:
$ cd examples/composer $ make
受信したファイルを確認します。
$ file Home.wt Home.wt: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, BuildID[sha1]=228a30c3dab0572993e41468aa0862fc93e11487, not stripped
Qt5
Qtソースディレクトリで、 qtbase / mkspecs / devicesに移動します 。
内容を含むディレクトリarmada370を作成します
qmake.conf
include(../common/linux_device_pre.conf) QMAKE_INCDIR += $$[QT_SYSROOT]/usr/include QMAKE_LIBDIR += $$[QT_SYSROOT]/lib QMAKE_CC = $${CROSS_COMPILE}gcc QMAKE_CXX = $${CROSS_COMPILE}g++ QMAKE_LINK = $${CROSS_COMPILE}g++ QMAKE_LINK_SHLIB = $${CROSS_COMPILE}g++ QMAKE_AR = $${CROSS_COMPILE}ar cqs QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy QMAKE_NM = $${CROSS_COMPILE}nm -P QMAKE_STRIP = $${CROSS_COMPILE}strip QMAKE_CFLAGS += -march=armv7-a -mfpu=vfpv3-d16 QMAKE_CXXFLAGS += $$QMAKE_CFLAGS DISTRO_OPTS += hard-float QT_QPA_DEFAULT_PLATFORM = eglfs include(../common/linux_arm_device_post.conf) load(qt_config)
-mfpu = vfpv3-d16はfpu最適化であり、 DISTRO_OPTSはハードフロート/ソフトフロートを担当します。
qplatformdefs.hは 、他のARMの構成の標準です。
configureを呼び出すとき、以下を渡す必要があります。
- -デバイスarmada370
- -device-option CROSS_COMPILE = arm-marvell-linux-gnueabi-
- -sysroot ... / arm-marvell-linux-gnueabi / arm-marvell-linux-gnueabi / libc
chroot'eで収集
conf.sh:
#!/bin/bash CFG='' CFG+=' -opensource' CFG+=' -confirm-license' CFG+=' -v' CFG+=' -static' CFG+=' -device armada370' CFG+=' -make libs' CFG+=' -device-option CROSS_COMPILE=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi- ' CFG+=' -sysroot /usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc' CFG+=' -release' CFG+=' -nomake tools' CFG+=' -nomake examples' CFG+=' -no-compile-examples' CFG+=' -no-dbus' CFG+=' -no-gui' CFG+=' -no-widgets' CFG+=' -qt-sql-sqlite' CFG+=' -D QT_NO_GRAPHICSVIEW' CFG+=' -D QT_NO_GRAPHICSEFFECT' CFG+=' -D QT_NO_STYLESHEET' CFG+=' -D QT_NO_STYLE_CDE' CFG+=' -D QT_NO_STYLE_CLEANLOOKS' CFG+=' -D QT_NO_STYLE_MOTIF' CFG+=' -D QT_NO_STYLE_PLASTIQUE' CFG+=' -no-qml-debug' CFG+=' -no-alsa' CFG+=' -no-cups' CFG+=' -no-dbus' CFG+=' -no-directfb' CFG+=' -no-evdev' CFG+=' -no-gtkstyle' CFG+=' -no-kms' CFG+=' -no-libudev' CFG+=' -no-linuxfb' CFG+=' -no-mtdev' CFG+=' -no-nis' CFG+=' -no-pulseaudio' CFG+=' -no-sm' CFG+=' -no-xcb' CFG+=' -no-xcb-xlib' CFG+=' -no-xinerama' CFG+=' -no-xinput2' CFG+=' -no-xkb' CFG+=' -no-xrender' CFG+=' -no-icu' CFG+=' -no-use-gold-linker' CFG+=' -no-eglfs' CFG+=' -no-cups' CFG+=' -no-fontconfig' CFG+=' -no-sse2' CFG+=' -no-sse3' CFG+=' -no-sse4.1' CFG+=' -no-avx' CFG+=' -no-opengl' cd qtbase ./configure $CFG "$@"
$ sudo chroot ~/synology/toolkit/build_env/ds.armada370-5.2/ $ cd /root/qt-everywhere-opensource-src-5.5.0/ $ ./conf.sh $ cd qtbase $ make $ make install
パッケージング
パッケージの拡張子はspkで、ファイルアーカイブから表されます。 最小パッケージの構造の形式は次のとおりです。
INFO-パッケージの説明を含むテキストファイル:
スクリプト -パッケージのインストール/削除のさまざまな段階で実行されるスクリプト、およびデーモン起動スクリプト。
package.tgz-実行可能ファイル、ライブラリ、リソースなどを含む圧縮アーカイブ
コンパイルされたcomposer.skpパッケージの構造は次のとおりです。
composer.wt 、 composer.xml 、 composer.css 、およびpaperclip.pngはWtの例から取られたものであり、興味の対象ではありません。
情報
package="composer" displayname="Mail composer" version="1.0.0" arch="armada370" description="This example implements a GMail-like mail composer and shows among other things how to upload files asynchronously, showing a cross-browser upload progress bar and with support for multiple files." maintainer="Wt" dsmuidir=ui
dsmuidirは 、 / volumeX / @ appstore / [パッケージ名] / [dsmuidir]から/ usr / syno / sinoman / webman / 3rdparty / [パッケージ名]へのリンクを自動的に作成するために必要なオプション変数です。 / volumeX / @ appstore / [パッケージ名] 、ここでX = 1,2..Nは、インストールされたアプリケーションが配置されるパスです。 / usr / syno / synoman / webman / 3rdparty / [パッケージ名] DSM UIに統合するためのパス。
config
DSM UIに統合するには、ディレクトリ/ usr / syno / synoman / webman / 3rdparty / [パッケージ名]を作成し、おおよその内容の構成ファイルを配置する必要があります。
{ ".url": { "eu.webtoolkit.composer": { "type": "url", "allUsers": true, "title": "Mail composer", "desc":"This example implements a GMail-like mail composer and shows among other things how to upload files asynchronously, showing a cross-browser upload progress bar and with support for multiple files.", "icon":"composer_{0}.png", "url": "3rdparty/composer/index.cgi" } } }
composer_ {0} .png-プレースホルダーはcomposer_48.png / composer_64.png / composer_72.png / composer_256.pngに置き換えられます。
url-アプリケーションをクリックすると、新しいウィンドウで開くhtml / cgiへのパス。 / usr / syno / synoman / webman / 3rdparty / [パッケージ名] html、js、css、cgi、imagesで許可されています。 しかし、phpのスリップは機能しませんでした。
index.cgi
#!/bin/sh if [ `ifconfig | grep bond0 | awk '{print $1}'` ] then IP_ADDR=`ifconfig bond0 | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}'` else IP_ADDR=`ifconfig eth0 | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}'` fi echo Location: http://$IP_ADDR:8585 echo "" exit
Wtで書かれたアプリケーションにリダイレクトする単純なcgiスクリプト。
開始停止状態
#!/bin/sh case $1 in start) ${SYNOPKG_PKGDEST}/composer.wt --docroot=${SYNOPKG_PKGDEST} --approot=${SYNOPKG_PKGDEST} --http-address=0.0.0.0 --http-port=8585 & exit 0 ;; stop) pkill composer.wt exit 0 ;; restart) exit 0; ;; status) if [ "$?" = "0" ]; then exit 0 else exit 1 fi ;; log) exit 0 ;; esac
アプリケーションの停止を開始します。
結論
Synologyの場合、 ツールチェーンの使用には長所と短所があります。
考えられる利点:
- 必要なシステムライブラリを収集して配置する必要はありません。
- 追加のCPU最適化を有効にできます。
考えられる短所:
- ツールチェーンごとにビルドを行う必要がある場合があります。
QNAP ツールチェーンは古く、バイパスする必要があることが判明しましたが、それは別の話です。