Getting started with VOIPAC IMX8M Industrial development kit (Yocto Linux SDK)

Last month I went through an unboxing of the VOIPAC iMX8M Industrial Development Kit with some specs and a quick try with the pre-loaded Yocto 3.1 Linux image. The kit is quite versatile with plenty of interfaces and headers, and eventually, it will support Android 12 and Ubuntu 22.04 LTS. but in the meantime, I played a bit with the Yocto Linux SDK for the NXP i.MX 8M board and will report by experience getting started with VOIPAC IMX8M Industrial development kit.

WiFi antennas installation

But before checking out Yocto Linux, I will install the two WiFi antennas since I did not do it last time around. We can attach the SMA connectors to the two metal plates on the side of the board securing them with the provided nuts and spacers.

Install WiFi antennas VOIPAC IMX8M Industrial Development Kit

The other side of the antenna’s cable comes with a tiny u.FL (or is it MHF4) connector and as somebody who has damaged plenty of those tiny connectors over the years, I’ve eventually found something that works for me: the eraser on a pencil. It allows me to gently push the connector without breaking anything.

I also received a new iMX8M Industrial Pro module, as the previous refurbished module had only 1GB RAM. So I removed the old one and replaced it with the new one with 2GB RAM and it shows as such in Linux:

A quick look at the preinstalled image

The last time I reviewed a system with Yocto Linux (i-Pi SMARC-1200) the image came with some benchmarking tools, so I could test the performance and features of the board without playing with the SDK. But the pre-build Linux image for the IMX8 Industrial development kit has no tools as all in the home directory, except for a JPG image:

I could just find some tools such as iperf3 or aplay/arecord to test networking or audio, and Yocto images will typically not have toolchains like GCC or a package manager, so the only way to add more packages is to build code from source with the Yocto Project.

Building Linux with Yocto 3.1 for the VOIPAC IMX8M Industrial Board

There’s plenty of documentation in the Wiki but it focuses on the hardware and the software documentation is outdated (copy/paste for Yocto 2.1 on i.MX 6MX) at the time of writing, with the important part being the source on GitHub. The build would not work for me initially, so I informed VOIPAC about the lack of documentation, and they told me the software documentation for the iMX8M Industrial Module would be published in the fall, and that customers currently relying on direct software/hardware support from the company. So I got assigned a member from the software support team to help me with any issues building Linux and flashing the image to the board, and after a few email exchanges, most of the issues were resolved.

I used a laptop with Ubuntu 22.04 as the build machine. We’ll need to install some dependencies first:

If those are missing, you’ll get some errors during the build. For example:


We can now retrieve the code with git:

Then install the repo utiylity and add it to our path:

You may want to edit your ~/.profile file to update the path permanently, for instance:

We can now start the build:

As usual building Linux with the Yocto Project is quite a demanding task, and I estimate it took around one hour on my laptop. (ASUS Vivobook 16 with 12-core/16-thread Core i5-13500H Raptor Laptop processor, 16GB RAM, and NVMe storage). I can’t say for sure because the laptop did not survive the build, and automatically rebooted at some point, probably because I did not set up any swap and it ran out of memory… So I had to restart it to the script to complete the build:

The output from the build can be found in the ./build-voipac/tmp/deploy/images/imx8mq-voipac folder:

Flashing the WIC image to a microSD card

The two important files (symlinks) are imx-boot and voipac-image-imx8mq-voipac.wic.gz which we’ll use with uuu utility to flash to a microSD card installed on the board itself.

We need to decompress the gz file first. We can’t do it directly on the symlink or file due to the following errors:

But it somehow works if we copy the file and run gunzip:

Unlike many other embedded platforms where we flash the microSD card on the host machine before inserting it into the target board, we’ll install a microSD card directly on the board before doing anything else with we’ll update the firmware over USB.

VOIPAC IMX8M Industrial DevKit MicroSD Card

We now need to install the NXP uuu utility. We’re told to build it from source, but the uuu package happens to be part of Ubuntu 22.04, so I used apt instead:

Flashing the OS through USB requires us to change “S1 BOOT” DIP switch configuration to 1-OFF and 2-ON to set the board into the serial downloader mode and also check the UART jumpers are placed as shown in the photo below, which was already the case for my board, so I only have to change the S1 BOOT.

UUU S1 boot dip switch UART jumpers

We can now connect the provided micro USB to USB-A cable to the “CONSOLE” port, and yout own USB-C to USB-A cable to the “USB-C” port with both connected to your host computer. Note that we do not need to turn on the board or a power supply at this stage.

Your host computer show list two serial ports as we can see with Bootterm:

Let’s now try to flash the image to the microSD card:

This is the output from the command when successful:

All good, we now can remove the USB-C port while keeping the micro USB cable if we want to access the serial console. We also need to set S1 BOOT back to 1-OFF and 2-ON to enable booting mode and change the position of the S2 BOOT and S3 BOOT DIP switches to enable SD card boot as shown below. Basically all on the left (OFF), except for S2-3 and S2-5 set to the right (ON).

SD card boot imx8m development kit

Let’s connect the power supply and turn on the board with its mechanical switch. We can monitor the boot in the serial console:

You’ll find the full boot log on pastebin if you are interested.

We can find both the 16GB eMMC flash and 32GB microSD card with fdisk:

Both devices are bootable, but the current rootfs is indeed on the microSD card (/dev/mmcblk1):

But note that the root partition is really small at just 388MB:

I initially tried to resize it from the live system, with fdisk and resize2fs as I did on some platforms in the past, but fdisk would limit me to only 16383 sectors (8MB) both for the microSD card and eMMC flash. So the best solution to resize the root partition on the microSD card is to use GParted (Linux) or Disk Management (Windows) on a host computer.

Yocto Image microSD card GParted

For the eMMC flash, I was told Yocto’s IMAGE_ROOTFS_EXTRA_SPACE parameter is typically used instead.

Talking about the eMMC flash, if we want to flash the image to the internal storage on the module, the procedure is similar except for the uuu command:

And once flashing is complete, we need to change the position of S1 BOOT, S2 BOOT, and S3 BOOT DIP switches as shown below.

emmc flash boot imx8m development kit

It makes it easy to switch between an OS on the eMMC flash and the microSD card.

Adding packages to Yocto and flashing Linux to the eMMC flash

Since the pre-installed Yocto image may not have all packages you need, you should add some packages to it.  We could edit ./build-voipac/conf/bblayers.conf if we wanted to add more meta layers, but since the utilities we need are already in meta-openembedded/meta-oe that is already listed in the bblayers.conf file we can just modify build-voipac/conf/local.conf to add a few packages with the following line:

The space between the quote and iozone3 is important. Once I updated the file, I started the build script again, but it quickly ended with errors:

VOIPAC help me debug the issue and could not reproduce it, so I was told to delete build-voipac/tmp directory and restart again. It worked, but it took about one hour with my laptop barely usable. But at least I could confirm both iozone3 (which I’ll use later) and dhrystone were present in the new image.

Most companies working with Yocto will use a powerful server to make sure the build is completed quickly, and in most cases it should not be required to delete the tmp directory.

VOIPAC IMX8M Industrial Development Kit features testing with Yocto Linux

Now that we now how to customize our Yocto Linux image, we’ll try some of the hardware features of the board such as networking and audio, as well as test storage performance.

Networking tests

I used iperf3 to test IMX8M Industrial devkit’s Gigabit Ethernet port ( using UP Xtreme i11 mini PC ( on the other side.

Gigabit Ethernet:

  • Download:

  • Upload:

  • Full duplex (bidirectional)

The Gigabit Ethernet port works well on the IMX8M Industrial development kit.

But when I tried to setup WiFi I struggled trying to use intructions on the web until it was pointed out to me that the documentation to access and test peripherals was already available on VOIPAC’s wiki. I’m not surprised I was not successful the first time since there are quite a few steps, some of which admittely optional.

We can first check if the mwifiex device driver is available and loaded…

and then whether the WiFi interface (wlp1s0) is present:

We can scan for WiFi access points with the following command:

Then edit /etc/wpa_supplicant.conf configuration file with our parameters:

We can now start wpa_supplicant:

successful output:

At this point the WiFi connection is up, but we don’t have an IP address yet. You can obtain one with DHCP:

All good. So I launched iperf3 to test the performance.

  • Download:

  • Upload:

Something is wrong with a fairly low bitrate due in part to what looks like stalled transfer.

So I retried in another house:

I connected to another 5GHz WiFi network (CNX-SOFTWARE-ZTE_5G) and while I could get an IP address and connect to the board through SSH over WiFi, it felt especially sluggish.  I had no luck with iperf3:

So I switched to a 2.4 GHz network (CNX-SOFTWARE-ZTE), and it worked better/more reliably for the download:

But I then the upload test did not work quite as expected:

The router is fairly close (about 2 meters) from the board and I used an Ubuntu laptop with a 2.5GbE USB dongle on the other side. So something is wrong – at least with my module – but we are not quite sure what yet, and this would have to be investigated further.

Storage benchmark

I’ve tested the microSD card (32GB Class A1 from Sandisk) performance with iozone3:

I then followed by testing the performance of built-in 16GB eMMC flash:

The eMMC flash is quite faster than my microSD card, and both results seem fine to me.

Audio testing

The development kit embeds audio features such as two built-in microphone and three audio jacks for Line Out, Mic, and headphones. So I’ll use arecord to record audio from the built-in microphone, and aplay to play back the audio through speakers connected to the Line Out jack.

Developer Kit Audio Testing

I first went the easy way and downloaded a wav file fronm the Internet to test playback:

The audio plays in my speaker through the Line Out jack. All good. Recording with the built-in microphone required a bit more work:

But it worked fine:

Note that it’s better to speak close to the microphone, as the first time I was around 1.5 meters away and the recorded volume was rather low.

That will be all for this getting started guide. I’d like to thank VOIPAC for sending the iMX8M Industrial Development Kit for review. The kit I received sells for 520 Euros plus 37 Euros for the high-gain antennas, but the Basic kit starts at 477 Euros.

Share this: