Buildroot 2021.11 release for i.MX platforms
Published on December 8, 2021
Buildroot 2021.11 has been published and we're excited to share new images! You can view a demo of the image running on our Nitrogen8M Plus SOM here.
For the impatient
You can download pre-built Buildroot 2021.11 images from here:
- 20211208-br2021.11-nitrogen8m_qt5_gst1.img.gz for Nitrogen8M SBC & SOM
- 20211208-br2021.11-nitrogen8mm_qt5_gst1.img.gz for Nitrogen8M Mini SBC & SOM
- 20211208-br2021.11-nitrogen8mn_qt5_gst1.img.gz for Nitrogen8M Nano SBC & SOM
- 20211208-br2021.11-nitrogen8mp_qt5_gst1.img.gz for Nitrogen8M Plus SOM
- 20211208-br2021.11-nitrogen6x_qt5_gst1.img.gz for Nitrogen6X/MAX/SOM/SOMv2/VM/Lite, BD-SL
In order to flash those images you can follow our video on this topic:
Or for those fluent in command lines, you can simply use zcat
:
~$ zcat 2021*br2021.11-nitrogen*.img.gz | sudo dd of=/dev/sdX bs=1M
What's new?
Buildroot 2021.11 release
It would be too long of a list to enumerate all the changes Buildroot went through since the last release. For recent changes, we invite you to check the last release announcement:
We'll focus on the i.MX changes for this release in the next sections.
Boundary Devices layer
As usual, we provide our own Boundary Devices external layer:
This includes the following custom configurations
nitrogen8m_qt5_gst1_defconfig
:- For i.MX 8MQ based Nitrogen8M, Nitrogen8M SOM
- Qt5 modules (+ Cinematic Experience demo)
- GStreamer1.0 with all its plugins
- NXP proprietary packages (VPU, GPU, SDMA)
- NXP-based kernel (5.10.x_2.0.0_ga)
- BD-SDMAC WiFi/BT modules support
- Miscellaneous tools (adbd, CAN, I2C, IIO, etc...)
nitrogen8mm_qt5_gst1_defconfig
:- For i.MX 8M Mini based Nitrogen8M Mini, Nitrogen8M Mini SOM
- Same set of packages as
nitrogen8m_qt5_gst1_defconfig
nitrogen8mn_qt5_gst1_defconfig
:- For i.MX 8M Nano based Nitrogen8M Nano, Nitrogen8M Nano SOM
- Same set of packages as
nitrogen8m_qt5_gst1_defconfig
nitrogen8mp_qt5_gst1_defconfig
:- For i.MX 8M Plus based Nitrogen8M Plus SOM
- Same set of packages as
nitrogen8m_qt5_gst1_defconfig
nitrogen6x_qt5_gst1_defconfig
:- For BD-SL-i.MX6 (SABRE Lite), Nitrogen6X, Nitrogen6X SOM v2, Nitrogen6 Lite, Nitrogen6 MAX, Nitrogen6 VM
- TiWi-BLE and Murata WiFi/BT modules support
- Same set of packages as
nitrogen8m_qt5_gst1_defconfig
nitrogen6sx_qt5_gst1_defconfig
:- For Nitrogen6_SoloX
- Same set of packages as
nitrogen6x_qt5_gst1_defconfig
nitrogen7_gst1_defconfig
:- For Nitrogen7
- Same set of packages as
nitrogen6x_qt5_gst1_defconfig
minus Qt5
nitrogen6x_qt5_gst1_mainline_defconfig
:- For BD-SL-i.MX6 (SABRE Lite), Nitrogen6X, Nitrogen6X SOM v2, Nitrogen6 Lite, Nitrogen6 MAX
- Same set of packages as
nitrogen6x_qt5_gst1_defconfig
- Mainline kernel
New features
Buildroot 2021.05 includes the following versions of packages:
- BlueZ5 5.62
- GStreamer 1.18.5
- GStreamer-imx v0.13.1 for i.MX6
- GStreamer-imx v2.0 for i.MX8M
- imx-codec 4.3.5
- imx-gpu-viv 6.4.3.p2.0
- imx-vpu-hantro 1.22.0 for i.MX8M
- imx-vpu-hantro-vc 1.4.0 for i.MX8MP
- imx-vpu 5.4.39.3 for i.MX6
- Linux kernel 5.10.x_2.0.0
- qcacld-2.0 LEA-3.1 Wi-Fi driver
- Qt5 5.15.2
- Wayland 1.19.0
- Weston 9.0.0
There are a few differences between Yocto and Buildroot releases at this stage:
- Buildroot images use standard packages without NXP modifications
- This applies to GStreamer, Weston, libdrm, wayland etc...
- The main drawback is that Weston can't be used with G2D
- The (big) advantage is that it makes the codebase much easier to maintain, being able to use all the latest packages without having to be stuck at an earlier version chosen by NXP
- Open-source gstreamer-imx plugin is used instead of NXP forks
- This allows us to have imx-related changes for GStreamer in 1 package only
Build procedure
Just like our Yocto image, we now use a Docker file to build our images on our Jenkins server so that everyone can use the exact same environment. This ensures reproducible builds without having to think about missing dependencies. If interested in using this approach, we invite you to read the following blog post using the following docker file:
Otherwise you can follow Buildroot documentation to know the host requirements:
Once your development environment is setup properly, you can
- Download the source code. To ease the repo cloning process, we decided to create a manifest to match what is done for Yocto/Android:
~$ sudo apt-get install repo
~$ mkdir ~/br2021.11 && cd br2021.11
~/br2021.11$ repo init -u https://github.com/boundarydevices/buildroot-manifest -b 2021.11.x
~/br2021.11$ repo sync
- Create an output folder for your configuration:
~/br2021.11$ make BR2_EXTERNAL=$PWD/buildroot-external-boundary/
-C $PWD/buildroot/ O=$PWD/output nitrogen8mm_qt5_gst1_defconfig
~/br2021.11$ cd output
- Build the image
~/br2021.11/output$ make
- Your image is now ready!
~/br2021.11/output$ ls -l images/sdcard.img
~/br2021.11/output$ sudo dd if=images/sdcard.img of=/dev/sdX bs=1M
Testing the image
As usual, the login for this image is root
with no password.
The external repository README details many commands that can be tested on the image.
- Once booted up, the Weston desktop should appear automatically, from there you can start a 3D test to ensure GPU acceleration
# cd /usr/share/examples/viv_samples/vdk/
# ./tutorial7 -h 720
- Then you can start the Qt5 Cinematic Demo which is a known GPU stress-test as it includes many effects
# CinematicExperience-demo -platform wayland
-
- Here you might need to adapt the demo resolution, here are the commands used for our 1280x800 MIPI display
# sed -i 's/1920/1280/' /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience.qml
# sed -i 's/1080/720/' /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience.qml
- You can also check the GStreamer VPU acceleration by decoding the well known Big Buck Bunny video
# wget http://linode.boundarydevices.com/videos/trailer_1080p_h264_mp3.avi -P /root/
# gst-launch-1.0 filesrc location=/root/trailer_1080p_h264_mp3.avi !
decodebin ! waylandsink
- If you have our OV5640 5MP MIPI camera, you can check the GStreamer video capture
# gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720 !
waylandsink
- This build fully supports the Basler daA3840 8MP camera from Basler when using our Nitrogen 8M Plus
# 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 ######
- As for Wi-Fi connectivity, the image embeds the minimum to get you started
# wpa_passphrase MYSSID MYPASSWORD >> /etc/wpa_supplicant.conf
# /etc/init.d/S50wpa-supplicant stop
# sleep 1
# /etc/init.d/S50wpa-supplicant start
# iw wlan0 link
Connected to a4:3e:51:08:54:f6 (on wlan0)
SSID: MYSSID
freq: 5660
RX: 47685 bytes (747 packets)
TX: 2054 bytes (0 packets)
signal: -58 dBm
tx bitrate: 150.0 MBit/s MCS 7 40MHz short GI
# udhcpc -i wlan0
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending select for 192.168.1.46
udhcpc: lease of 192.168.1.46 obtained, lease time 86400
deleting routers
adding dns 192.168.1.1
# ping google.com -I wlan0
PING google.com (216.58.198.206): 56 data bytes
64 bytes from 216.58.198.206: seq=0 ttl=116 time=6.971 ms
64 bytes from 216.58.198.206: seq=1 ttl=116 time=13.145 ms
...
- Finally, if you want to use Bluetooth connectivity, the procedure goes as follows
# echo 0 > /sys/class/rfkill/rfkill0/state
# sleep 1
# echo 1 > /sys/class/rfkill/rfkill0/state
# hciattach /dev/ttymxc0 qca 2000000 -t30 flow
Current Product ID: 0x00000008
Current Patch Version: 0x0111
Current ROM Build Version: 0x0302
Current SOC Version: 0x00000023
qca_soc_init: Rome Version (0x03020023)
====================================================
TLV Type : 0x1
Length : 48668 bytes
Total Length : 48412 bytes
Patch Data Length : 48388 bytes
Signing Format Version : 0x1
Signature Algorithm : 0x2
Event Handling : 0x3
Reserved : 0x0
Product ID : 0x0008
Rom Build Version : 0x0302
Patch Version : 0x03e8
Reserved : 0x8000
Patch Entry Address : 0x19b08
====================================================
====================================================
TLV Type : 0x2
Length : 1992 bytes
Change Vendor Baud from 0x0e to 0x0d
Failed to open /etc/bluetooth/firmware.conf
Ignoring invalid deep sleep config value
Failed to open /etc/bluetooth/firmware.conf
====================================================
Device setup complete
# echo 1 > /sys/class/rfkill/rfkill2/state
# hciconfig hci0 up
# hcitool scan
Scanning ...
48:C1:AC:00:D7:DCVoyager PRO+