summaryrefslogtreecommitdiff
path: root/docs/howto/how-to-build-runtime-tizen-gbs-rpi4.md
blob: 5479a342ead87b6a6d344d2f723291399e250c10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
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
===================================
```