Nitrogen8MP Yocto Zeus release
Published on December 22, 2020
We are pleased to release a Yocto Zeus image for our Nitrogen8MP SOM! This release is based upon NXP Beta 2 5.4.47_2.2.0 release.
For the Impatient
You can download the Yocto image for Nitrogen8MP here: You can program the SW to eMMC using the instructions below: You can also program the SW to SD Card or USB Stick via zcat and dd under Linux:~$ zcat *nitrogen8mp.wic.gz | sudo dd of=/dev/sdX bs=1M
In addition, you can use the Balena Etcher utility to flash the eMMC, SD Card or USB stick via Windows or Linux:
Why Zeus?
If you're familiar with our previous releases, you might have noticed we already released Dunfell for our other platforms, which is newer than Zeus. The reasoning is that we usually use the community BSP which offers newer branches support, more bugfixes and so on. However the community BSP doesn't include all the components to fully leverage the i.MX 8M Plus yet (NPU, ISP, DSP etc). That is why we released this version of Yocto based on NXP's version.We will however continue to work closely with the community to integrate the missing packages and offer a Gatesgarth branch soon!
Build procedure
This image uses the Zeus boundary-imx-5.4.47-2.2.0 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 ~/yocto-8mp && cd yocto-8mp
~/yocto-8mp$ repo init -u https://github.com/boundarydevices/boundary-bsp-platform \
-b boundary-imx-5.4.47-2.2.0
~/yocto-8mp$ repo sync
Next, setup the environment for building:
~/yocto-8mp$ DISTRO=fsl-imx-xwayland-boundary MACHINE=nitrogen8mp \
source imx-setup-release.sh -b build
Now bitbake imx-image-full which includes Boundary-specific packages such as BD-SDMAC drivers and firmware.
~/yocto-8mp/build$ bitbake imx-image-full
The image file will deploy to tmp/deploy/images/nitrogen8mp/imx-image-full-nitrogen8mp.wic.gz
.
Features list
The image built above contains the following components:- Linux kernel 5.4.x_2.2.0
- U-Boot 2020.10
- Weston 8.0.0 for i.MX
- GStreamer 1.16.2 for i.MX
- GPU Vivante libraries 6.4.3p0.0
- VPU Hantro libraries v1.19.0
- ISP VVCAM v4.2.2.2
- Qt 5.15
- qcacld-lea-2.0 Wi-Fi driver for BD-SDMAC
- BlueZ 5.50 with support for BD-SDMAC
Basler camera input
This build fully supports the Basler daA3840 8MP camera from Basler 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 ######
eIQ / NPU support
NPU support is fully integrated into this build with TensorFlowLite and ARMNN support of the NPU. We recommend newcomers try the PyEIQ framework which provides many examples to test the Neural Processing Unit: Installing eIQ is very simple as you can see below:root@nitrogen8mp:~# pip3 install eiq
You can then run any demo listed below
root@nitrogen8mp:~# pyeiq --run object_detection_tflite
root@nitrogen8mp:~# pyeiq --run switch_video
GPU acceleration
As usual, in order to test the GPU you can use the example apps provided by Vivante:root@nitrogen8mp:~# /opt/imx-gpu-sdk/GLES2/Blur/GLES2.Blur_Wayland -d
Ethernet
Once theeth0
or eth1
interface is up, you can use iperf3
to check Ethernet performance:
root@nitrogen8mp:~# iperf3 -c 192.168.1.10
Connecting to host 192.168.1.10, port 5201
[ 5] local 192.168.1.66 port 48554 connected to 192.168.1.10 port 5201
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec receiver
Wi-Fi
Same goes for the Wi-Fi that can be tested just as easily with connman:root@nitrogen8mp:~# connmanctl
connmanctl> enable wifi
Enabled wifi
connmanctl> agent on
Agent registered
connmanctl> scan wifi
Scan completed for wifi
connmanctl> services
*AO Wired ethernet_0019b80891ba_cable
Jabu_5GHz wifi_e24f43c97518_4a6162755f3547487a_managed_psk
Jabu_5GHz wifi_e04f43447518_4a6162755f3547487a_managed_psk
connmanctl> connect wifi_e04f43447518_4a6162755f3547487a_managed_psk
Agent RequestInput wifi_e04f43447518_4a6162755f3547487a_managed_psk
Passphrase = [ Type=psk, Requirement=mandatory, Alternates=[ WPS ] ]
WPS = [ Type=wpspin, Requirement=alternate ]
Passphrase? XXXXXXX
connmanctl> [ 1345.330332] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Connected wifi_e04f43447518_4a6162755f3547487a_managed_psk
connmanctl> exit
root@nitrogen8mp:~# ping google.com -I wlan0
PING google.com(par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e)) from 2a01:cb00:f9f:e00:e24f:43ff:fe44:7518 wlan0: 56 data bytes
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=1 ttl=115 time=9.12 ms
64 bytes from par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e): icmp_seq=2 ttl=115 time=9.32 ms
...
Bluetooth
Here is the procedure to get BT5.0 working with our BD-SDMAC module:root@nitrogen8mp:~# connmanctl enable bluetooth
Enabled bluetooth
root@nitrogen8mp:~# hciattach -t 30 /dev/ttymxc0 qca 3000000
...
Device setup complete
root@nitrogen8mp:~# hciconfig hci0 up
root@nitrogen8mp:~# hcitool scan
Scanning ...
94:E6:F7:F3:17:F3 p1g2
VPU decoding
If your platform supports VPU decoding, here is an example on how to test it using the gplay tool:root@nitrogen8mp:~# wget http://linode.boundarydevices.com/videos/Hobbit-1080p.mov
root@nitrogen8mp:~# gplay-1.0 Hobbit-1080p.mov
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@nitrogen8mp:~# 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@nitrogen8mp:~# gst-launch-1.0 filesrc location=test.h264 typefind=true ! 'video/x-h264' ! \
h264parse ! vpudec ! waylandsink
CAN
The Nitrogen8MP platform comes with 2 CAN ports. You'll be able to bring up the interfaces using this following command:root@nitrogen8mp:~# ip link set can0 up type can bitrate 500000
root@nitrogen8mp:~# ip link set can1 up type can bitrate 500000