We are pleased to announce a new Yocto release Kirkstone for our Nitrogen8 family of SBCs and SOMs based on i.MX 8 processors. This release includes our latest 5.15 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 Plus platform:
Update 20221003 changelog:
- Add additional machine learning recipes/packages to image
Update 20221129 changelog:
- Update to Kernel/Linux version 5.15.52
- Update to Uboot version 2022.04
- Support for all uboot defconfigs variants to be built and binaries to be included in final image
- Fix uboot binary on 8mq
Update 20221205 changelog:
- Update machine learning recipes from meta-freescale-ml as per NXP kirkstone-5.15.52-2.1.0 BSP
Update 20230117 changelog:
- Update to Kernel/Linux version 5.15.71
- Update various recipes (graphics, multimedia etc.) as per NXP kirkstone-5.15.71-2.2.0 BSP
- Add boundary-image-multimedia-full-chromium image option which is an extension of boundary-image-multimedia-full that includes chromium-ozone-wayland. Chromium is now supported on i.MX 8 platforms and includes hardware accelerated video decoding. Note the prebuilt images are labeled boundary-image-multimedia-full but they include chromium-ozone-wayland. If you wish to build chromium into the image, you need to build boundary-image-multimedia-full-chromium.
Update 20230613 changelog:
- Support for 8MP SMARC added.
- Support for IMX219 Camera Module added.
Update 20230818 changelog:
- Support for Rev10 Nitrogen8M Plus SMARC added.
Update 20230922 changelog:
- Nitrogen8M Plus SMARC rev1 fixes.
As usual, you’ll need to register on our site and agree to the EULA because it contains NXP content.
How to Burn
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 *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:
This image uses the kirkstone 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 ~/kirkstone && cd kirkstone ~/kirkstone$ repo init -u https://github.com/boundarydevices/boundary-bsp-platform -b kirkstone ~/kirkstone$ repo sync
~/kirkstone$ 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.
~/kirkstone/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
The image built above contains the following components:
- Linux kernel 5.15.y
- U-Boot 2022.04
- Weston 10.0.1 for i.MX
- GStreamer 1.20.0 for i.MX
- GPU Vivante libraries 6.4.3p4.4
- VPU Hantro libraries v1.27.0
- ISP VVCAM v126.96.36.199
- qcacld-lea-3.1 Wi-Fi driver for BD-SDMAC
- BlueZ 5.65 with support for BD-SDMAC
The next sub-sections will describe how to test most features.
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:
Note that we’ve noticed that the NXP HDMI driver is picky when it comes to custom display timings (sometimes refuses to set the clock).
So if you are experiencing any issue with HDMI, please try entering the following commands in U-Boot in order to force the use of standard timings:
=> setenv cmd_custom 'setenv bootargs $bootargs drm_kms_helper.edid_firmware=HDMI-A-1:edid/1280x720.bin' => saveenv
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 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
isp-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/video2 ! waylandsink ... [ 352.348796] wdr3 res: 1920 1080 [ 352.352471] enter isp_mi_start [ 357.581179] ###### 62.42 fps ###### [ 362.771924] ###### 62.42 fps ######
eth0 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 can be tested with nmcli as shown below:
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 (188.8.131.52): 56 data bytes 64 bytes from 184.108.40.206: seq=0 ttl=55 time=3.470 ms ...
root@<MACHINE>:~# hciconfig hci0 up root@<MACHINE>:~# hcitool scan Scanning ...
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>:~# gplay-1.0 /home/root/Hobbit-1080p.mov
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
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
From this point, you can use commands such as cansend and candump to send or display messages on the bus respectively.
NPU support is fully integrated into this build when using our Nitrogen 8M Plus with TensorFlowLite and ARMNN support of the NPU.
You can find various example demos here:
If you have any issues, please email email@example.com