diff options
Diffstat (limited to 'docs/howto/how-to-build-runtime-tizen-gbs-rpi4.md')
-rw-r--r-- | docs/howto/how-to-build-runtime-tizen-gbs-rpi4.md | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/docs/howto/how-to-build-runtime-tizen-gbs-rpi4.md b/docs/howto/how-to-build-runtime-tizen-gbs-rpi4.md new file mode 100644 index 000000000..5479a342e --- /dev/null +++ b/docs/howto/how-to-build-runtime-tizen-gbs-rpi4.md @@ -0,0 +1,316 @@ +# How to Build Runtime with GBS for Tizen/RPi4 + +This document describes how to build runtime with GBS for Tizen AARCH64. +As a real example, we'll also describe how to prepare Tizen on Raspberry Pi 4 +and show you how to run our test package runner `onert_run`. + +For ARM32, there would be not much difference with some changes. + +Host PC is Ubuntu 18.04 but other versions or distro may work with a little +adjustments. + +Detailed technical informations are not described here so please read referecnce +pages while you go on. + + +## Setting up build environment + +(1) Add Tizen build tools repo +``` +$ sudo vim /etc/apt/sources.list +``` +Add this at the end +``` +deb [trusted=yes] http://download.tizen.org/tools/latest-release/Ubuntu_18.04/ / +``` +Note: There's a slash('/`) at the end. + +For other versions of Ubuntu, please refer +http://download.tizen.org/tools/latest-release/ lists. + +(2) Update package informations and upgrade to latest +``` +$ sudo apt-get update +$ sudo apt-get upgrade +``` + +(3) Install GBS tools +``` +$ sudo apt-get install gbs mic +``` + +To get more informations, please refer [HERE](https://source.tizen.org/ko/documentation/developer-guide/getting-started-guide/installing-development-tools) + +## Build ONERT + +(1) Set `python2` as default python + +Some tools of GBS run in `python2` and won't run with `python3`. +Please check `python` version and set it to 2.x. + +(2) set `TIZEN_BUILD_ROOT` + +You may set `GBS-ROOT` to any place you like. Ususally we use home folder. +``` +$ export TIZEN_BUILD_ROOT=$HOME/GBS-ROOT/ +``` +Adding to `$HOME/.profile` file would be a good thing. + +(3) clone ONE repo + +``` +git clone https://github.com/Samsung/ONE.git +``` + +(4) Build + +``` +$ cd ONE + +$ gbs -c infra/nnfw/config/gbs.conf build --include-all -A aarch64 --define 'test_build 1' +``` +- `-A aarch64` is to set architecture to AARCH64. Use `arm32` for ARM32 target. +- `--define 'test_build 1'` is to enable test build so that we can use `onert_run` + +Now take a cup of coffee. + +(5) Build result RPM packages + +``` +$ ls ~/GBS-ROOT/local/repos/tizen/aarch64/RPMS +nnfw-1.10.0-1.aarch64.rpm +nnfw-debuginfo-1.10.0-1.aarch64.rpm +nnfw-debugsource-1.10.0-1.aarch64.rpm +nnfw-devel-1.10.0-1.aarch64.rpm +nnfw-minimal-app-1.10.0-1.aarch64.rpm +nnfw-minimal-app-debuginfo-1.10.0-1.aarch64.rpm +nnfw-plugin-devel-1.10.0-1.aarch64.rpm +nnfw-test-1.10.0-1.aarch64.rpm +nnfw-test-debuginfo-1.10.0-1.aarch64.rpm +``` + +`-1.10.0-1` may differ as this document was written with under `1.10.0` development. + +## Prepare Tizen on Raspberry Pi 4 + +Please refer https://wiki.tizen.org/Quick_guide_for_RPI4 for detailed descriptions. + +(1) Download flashing tool +``` +$ wget \ +https://git.tizen.org/cgit/platform/kernel/u-boot/plain/scripts/tizen/sd_fusing_rpi3.sh?h=tizen \ +--output-document=sd_fusing_rpi3.sh + +$ chmod 755 sd_fusing_rpi3.sh +``` + +(2) Prepare Micro-SD memory card. + +You first need to find out device name. This document will skip how to find this. +Suppose it's `/dev/sdj`: +``` +$ sudo ./sd_fusing_rpi3.sh -d /dev/sdj --format +``` +You need to change `/dev/sdj` to your configuration. + +Partition table may look like this +``` +Device Boot Start End Sectors Size Id Type +/dev/sdj1 * 8192 139263 131072 64M e W95 FAT16 (LBA) +/dev/sdj2 139264 6430719 6291456 3G 83 Linux +/dev/sdj3 6430720 9183231 2752512 1.3G 83 Linux +/dev/sdj4 9183232 62521343 53338112 25.4G 5 Extended +/dev/sdj5 9185280 61958143 52772864 25.2G 83 Linux +/dev/sdj6 61960192 62025727 65536 32M 83 Linux +/dev/sdj7 62027776 62044159 16384 8M 83 Linux +/dev/sdj8 62046208 62111743 65536 32M 83 Linux +/dev/sdj9 62113792 62130175 16384 8M 83 Linux +/dev/sdj10 62132224 62263295 131072 64M 83 Linux +/dev/sdj11 62265344 62521343 256000 125M 83 Linux +``` + +(3) Download images + +Please visit http://download.tizen.org/snapshots/tizen/unified/latest/images/standard/iot-boot-arm64-rpi4/ +and http://download.tizen.org/snapshots/tizen/unified/latest/images/standard/iot-headed-3parts-aarch64-rpi. + +Please visit `iot-boot-armv7l-rpi4` folder for ARM32 images. + +Get latest file. As of writing this document, name has `20200908.3`. +``` +$ wget http://download.tizen.org/snapshots/tizen/unified/latest/images/standard/iot-boot-arm64-rpi4/tizen-unified_20200908.3_iot-boot-arm64-rpi4.tar.gz + +$ wget http://download.tizen.org/snapshots/tizen/unified/latest/images/standard/iot-headed-3parts-aarch64-rpi/tizen-unified_20200908.3_iot-headed-3parts-aarch64-rpi.tar.gz +``` + +(4) Flash images to memory card + +As like above, suppose memory card is at `/dev/sdj` +``` +$ sudo ./sd_fusing_rpi3.sh -d /dev/sdj \ +-b tizen-unified_20200908.3_iot-boot-arm64-rpi4.tar.gz \ +tizen-unified_20200908.3_iot-headed-3parts-aarch64-rpi.tar.gz +``` +You need to change `/dev/sdj` to your configuration and also `tizen-unified_...` file to your +latest download file name. + +(5) Assign IP address for `sdb` connection + +Here, we provide a way to connect `sdb` tool through TCP/IP. + +Below steps will modify root image and set fixed IP address. + +(5-1) Mount image to host +``` +$ mkdir j2 +$ sudo mount /dev/sdj2 j2 +``` +As like above, please update `/dev/sdj2` to your configuration. + +(5-2) Add a new file +``` +$ vi j2/etc/systemd/system/ip.service +``` +and set as like: +``` +[Service] +Restart=always +RestartSec=1 +User=root +ExecStart=/bin/sh -c "ifconfig eth0 192.168.x.y netmask 255.255.255.0 up" + +[Install] +WantedBy=multi-user.target +``` +Replace 192.168.x.y to your actual ip address. + + +(5-3) Add a symbolic link +``` +$ sudo mkdir -p j2/etc/systemd/system/multi-user.target.wants/ +$ pushd j2/etc/systemd/system/multi-user.target.wants/ +$ sudo ln -s ../../system/ip.service . +$ popd +``` + +(5-4) Now that every thing is ready, unmount and unplug your memory card and plug into +RPi4, turn on the power. +``` +$ sync +$ sudo umount j2 +``` + +## sdb connect to Tizen/RPi4 + +You may need to install Tizen Studio to use `sdb` command. +Please visit https://developer.tizen.org/ if you don't have this. + +We assume `sdb` command is in the PATH. + +(1) Connect + +``` +$ sdb connect 192.168.x.y +connecting to 192.168.x.y:26101 ... +connected to 192.168.x.y:26101 +``` +Please update `192.168.x.y` part to your actual IP address. + +Check with `devices` command: you should see `rpi3` or alike. +``` +$ sdb devices +List of devices attached +192.168.x.y:26101 device rpi3 +``` + +(2) Remount filesystem with R/W + +You need to remount file system with Read/Write so that you can install packages. +``` +$ sdb root on +$ sdb shell +``` +Inside your Tizen/RPi4: +``` +sh-3.2# mount -o rw,remount / +``` + +(3) Download dependent packages + +In your host, maybe with another terminal, download packages from +http://download.tizen.org/releases/daily/tizen/unified/latest/repos/standard/packages/aarch64/ + +``` +$ wget http://download.tizen.org/releases/daily/tizen/unified/latest/repos/standard/packages/aarch64/libarmcl-v21.02-17.5.aarch64.rpm + +$ wget http://download.tizen.org/releases/daily/tizen/unified/latest/repos/standard/packages/aarch64/libhdf5-101-1.10.1-3.85.aarch64.rpm + +$ wget http://download.tizen.org/releases/daily/tizen/unified/latest/repos/standard/packages/aarch64/libhdf5_cpp101-1.10.1-3.85.aarch64.rpm +``` + +(4) Copy to device +``` +$ sdb push libarmcl-v21.02-17.5.aarch64.rpm /opt/usr/home/owner/share/tmp/ +$ sdb push libhdf5-101-1.10.1-3.85.aarch64.rpm /opt/usr/home/owner/share/tmp/ +$ sdb push libhdf5_cpp101-1.10.1-3.85.aarch64.rpm /opt/usr/home/owner/share/tmp/ +``` +And our runtime packages +``` +$ cd ~/GBS-ROOT/local/repos/tizen/aarch64/RPMS +$ sdb push nnfw-1.10.0-1.aarch64.rpm /opt/usr/home/owner/share/tmp/ +$ sdb push nnfw-test-1.10.0-1.aarch64.rpm /opt/usr/home/owner/share/tmp/ +``` + +(5) Install dependent packages + +Within Tizen/RPi4 shell +``` +sh-3.2# cd /opt/usr/home/owner/share/tmp/ + +sh-3.2# rpm -i libarmcl-v21.02-17.5.aarch64.rpm +sh-3.2# rpm -i libhdf5-101-1.10.1-3.85.aarch64.rpm +sh-3.2# rpm -i libhdf5_cpp101-1.10.1-3.85.aarch64.rpm +``` +There may be message like this but it seems OK: +``` +/sbin/ldconfig: Cannot lstat /lib64/libhdf5.so.101.0.0: Permission denied +``` +Continue install +``` +sh-3.2# rpm -i nnfw-1.10.0-1.aarch64.rpm +sh-3.2# rpm -i nnfw-test-1.10.0-1.aarch64.rpm +``` + +Our `Product` binary folder is installed at `/opt/usr/nnfw-test`. +``` +sh-3.2# cd /opt/usr/nnfw-test +sh-3.2# ls -al +total 16 +drwxr-xr-x 4 root root 4096 Jan 1 09:05 . +drwxr-xr-x 14 root root 4096 Jan 1 09:05 .. +drwxr-xr-x 3 root root 4096 Jan 1 09:05 Product +drwxr-xr-x 3 root root 4096 Jan 1 09:05 infra +``` + +(6) Run nnpackage + +Refer `how-to-build-package.md` document to produce nnpackage from a model. + +Assume `mobilenet_v2_1.4_224` nnpackage is already copied to +`/opt/usr/home/owner/media/models` folder with `sdb` command. + +``` +sh-3.2# BACKENDS="cpu" Product/out/bin/onert_run \ +--nnpackage /opt/usr/home/owner/media/models/mobilenet_v2_1.4_224 + +Package Filename /opt/usr/home/owner/media/models/mobilenet_v2_1.4_224 +=================================== +MODEL_LOAD takes 65.403 ms +PREPARE takes 158.716 ms +EXECUTE takes 373.447 ms +- MEAN : 373.447 ms +- MAX : 373.447 ms +- MIN : 373.447 ms +- GEOMEAN : 373.447 ms +=================================== +``` |