Yocto Gatesgarth Release for i.MX8 Platforms
Published on March 17, 2021
We are pleased to announce a new Yocto release Gatesgarth for our Nitrogen8 family of SBCs and SOMs based on i.MX8 processors. This release includes our latest 5.4 kernel. Below you will find download links for the images as well as detailed instructions for building including a features set.
For the Impatient
You can download the Yocto images from here:- For Nitrogen8M platform:
- For Nitrogen8M Mini platform:
- For Nitrogen8M Nano platform:
- For Nitrogen8M Plus platform:
How to Burn
You can program the SW to eMMC using the instructions below: programming-emmc-on-i-mx-platforms You can also program the SW to SD Card or USB Stick via zcat and dd under Linux:~$ zcat *boundary-image*.wic.gz | sudo dd of=/dev/sdX bs=1M
In addition, you can use the balenaEtcher utility to flash the eMMC, SD Card or USB stick via Windows or Linux:
balenaEtcher
Build procedure
This image uses the gatesgarth branch of our boundary-bsp-platform repository. To build the image, we recommend using a Docker Container so that you can build with a reproducible and stable build environment. Otherwise, you’ll need these packages installed as well as this repo tool that can be installed like this:~$ sudo apt-get install repo
Then create your build directory and initialize everything.
~$ mkdir ~/gatesgarth && cd gatesgarth
~/gatesgarth$ repo init -u https://github.com/boundarydevices/boundary-bsp-platform -b gatesgarth
~/gatesgarth$ repo sync
Next, setup the environment for building. For this image we will be building our boundary-xwayland distro for the target machine
~/gatesgarth$ MACHINE=<MACHINE> DISTRO=boundary-xwayland . setup-environment build
Now bitbake boundary-image-multimedia-full which is equivalent to fsl-image-multimedia-full with Boundary-specific packages added such as BD-SDMAC support.
~/gatesgarth/build$ bitbake boundary-image-multimedia-full
After some time this should build the same image as above, with the layers being at commits as per the time when repo sync was executed. If you are interested in each project revision at the time of the build, you can find a frozen manifest for those images here.
The image file will deploy to tmp/deploy/images/{MACHINE}/boundary-image-multimedia-full-{MACHINE}.wic.gz
.
Features list
The image built above contains the following components:- Linux kernel 5.4.x_2.3.0
- U-Boot 2020.10
- Weston 8.0.0 for i.MX
- GStreamer 1.16 for i.MX
- GPU Vivante libraries 6.4.3p1.0
- VPU Hantro libraries v1.19.0
- ISP VVCAM v4.2.2.2
- qcacld-lea-2.0 Wi-Fi driver for BD-SDMAC
- BlueZ 5.55 with support for BD-SDMAC
Display support
Please make sure your platform includes the latest U-Boot: This version of U-Boot supports the display configuration, allowing to use any of the following displays:- 7" 1280x800 MIPI BD070LIC2_8M
- 8" 1920x1200 MIPI BD080MCC1
- 10" 1280x800 MIPI BD101LCC2_8M
- HDMI display
GPU acceleration
As usual, in order to test the GPU you can use the example apps provided by Vivante:root@<MACHINE>:~# /opt/imx-gpu-sdk/GLES2/Blur/GLES2.Blur_Wayland -d
Camera input
Camera MIPI-CSI input can be checked using our OV5640 MIPI with GStreamer:root@<MACHINE>:~# gst-launch-1.0 v4l2src device=/dev/video0 ! \
video/x-raw,width=1280,height=720 ! waylandsink
Basler camera input
This build fully supports the Basler daA3840 8MP camera from Basler when using our Nitrogen 8M Plus which is part of our Evaluation Kit: Theisp-vvcam
driver and imx8-isp
service are loaded automatically when the camera is detected.
From there a simple GStreamer pipeline will allow you to see the stream:
root@nitrogen8mp:~# gst-launch-1.0 -v v4l2src device=/dev/video0 ! waylandsink
...
[ 352.348796] wdr3 res: 1920 1080
[ 352.352471] enter isp_mi_start
[ 357.581179] ###### 62.42 fps ######
[ 362.771924] ###### 62.42 fps ######
Ethernet
Once theeth0
interface is up, you can use iperf3
to check Ethernet performances:
root@<MACHINE>:~# iperf3 -c 192.168.1.60
Connecting to host 192.168.1.60, port 5201
[ 5] local 192.168.1.13 port 32880 connected to 192.168.1.60 port 5201
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec 0 sender
[ 5] 0.00-10.04 sec 1.09 GBytes 932 Mbits/sec receiver
Wi-Fi
Same goes for the Wi-Fi that can be tested just as easily:root@<MACHINE>:~# nmcli d wifi connect <network_name> password <password>
root@<MACHINE>:~# iw wlan0 link
Connected to a4:3e:51:08:54:f6 (on wlan0)
SSID: Jabu_5GHz
freq: 5240
RX: 3243 bytes (31 packets)
TX: 9117 bytes (48 packets)
signal: -79 dBm
tx bitrate: 15.0 MBit/s MCS 0 40MHz short GI
root@<MACHINE>:~# ping google.com -Iwlan0
PING google.com (216.58.198.206): 56 data bytes
64 bytes from 216.58.198.206: seq=0 ttl=55 time=3.470 ms
...
Bluetooth
For products with a Silex bluetooth module, you'll be able to connect using our handy silex-uart script with the following commands:root@<MACHINE>:~# /usr/share/silex-uart/silex-uart.sh start
Starting silex-uart
rfkill on/off cycle.
silex found
root@<MACHINE>:~# hciconfig hci0 up
root@<MACHINE>:~# hcitool scan
Scanning ...
11:22:DE:AD:BE:EF Some Device
VPU decoding
If your platform supports VPU decoding, here is an example on how to test it using the gplay tool:root@<MACHINE>:~# wget http://linode.boundarydevices.com/videos/Hobbit-1080p.mov
root@<MACHINE>:~# gst-launch-1.0 playbin uri=file:///home/root/Hobbit-1080p.mov video-sink=autovideosink
VPU encoding
Here is a simple example that shows how to encode a video stream from the camera into H.264 using the VPU encoder:root@<MACHINE>:~# gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080' \
! vpuenc_h264 ! filesink location=test.h264
^C
root@<MACHINE>:~# gst-launch-1.0 filesrc location=test.h264 typefind=true ! 'video/x-h264' ! \
h264parse ! vpudec ! waylandsink
CAN
For platforms with CAN, you'll be able to bring up the interface(s) using this following command:root@<MACHINE>:~# ip link set can0 up type can bitrate 500000
NPU support
NPU support is fully integrated into this build when using our Nitrogen 8M Plus with TensorFlowLite and ARMNN support of the NPU. Various demos to test this can be found here: IMX-MACHINE-LEARNING-UG.pdf We can run a TensorFlowLite demo from section 5.3.3 of the document:root@nitrogen8mp:~/ArmnnTests# /usr/bin/TfLiteInceptionV3Quantized-Armnn --data-dir=/home/root/ArmnnTests/data --model-dir=/home/root/ArmnnTests/models
Info: ArmNN v20200200
Info: = Prediction values for test #0
Info: Top(1) prediction is 209 with value: 8.43322
Info: Top(2) prediction is 208 with value: 7.74945
Info: Top(3) prediction is 223 with value: 4.17862
Info: Top(4) prediction is 853 with value: 3.6468
Info: Top(5) prediction is 160 with value: 3.41887
Info: = Prediction values for test #1
Info: Top(1) prediction is 283 with value: 8.73712
Info: Top(2) prediction is 282 with value: 7.21762
Info: Top(3) prediction is 286 with value: 6.6858
Info: Top(4) prediction is 288 with value: 3.49485
Info: Top(5) prediction is 754 with value: 2.27925
Info: = Prediction values for test #2
Info: Top(1) prediction is 3 with value: 11.8521
Info: Top(2) prediction is 148 with value: 4.33057
Info: Top(3) prediction is 234 with value: 3.11497
Info: Top(4) prediction is 149 with value: 2.96302
Info: Top(5) prediction is 4 with value: 2.35522
Info: Total time for 3 test cases: 1.385 seconds
Info: Average time per test case: 461.587 ms
Info: Overall accuracy: 1.000
If you have any issues, please email support@boundarydevices.com