The Wandboard is an inexpensive NXP i.MX6-based board with broad community support. It is perfect for exploration and educational purposes, more feature rich than a Raspberry Pi, and much closer to professional high-end embedded systems.
Designed and sold by Technexion, a Taiwanese company, it comes in four flavors based around a SoM with different i.MX6 SoC variants, the solo, dual, quad, and quad plus, featuring one, two, or four cores.
Technexion made the schematics for both the board and the SoM available as PDF, which gave the board a taint of openness.
The Wandboard is still widely used, easy to purchase, and with a wide community, so we will use it as an example in the following chapters. However, any i.MX6-based board could be used to follow the book. The know-how will then be applicable to any embedded platform that uses the Yocto Project.
The Wandboard has been released in different revisions throughout its history: a0, b1, c1, and d1. The revision is printed on the PCB and it will become important as the software that runs in each revision differs.
The Wandboard features the following specification:
- 2 GB RAM
- Broadcom BCM4330 802.11n Wi-Fi
- Broadcom BCM4330 4.0 Bluetooth
- HDMI
- USB
- RS-232
- uSD
Revision D introduced a MMPF0100 PMIC, replaced the Ethernet PHY Atheros AR8031 with Atheros AR8035, and replaced the BCM4330 with a BCM4339 802.11ac Wi-Fi, among other minor changes.
It is a perfect multimedia enabled system with a Vivante 2D and 3D graphical processing unit, hardware graphics and video acceleration, and an SGTL5000 audio codec. The different i.MX6-based systems are widely used in industrial control and automation, home automation, automotive, avionics, and other industrial applications.
For production, professional OEMs and products are recommended, as they can offer the industrial quality and temperature ranges, component availability, support, and manufacturing guarantees that final products require.
Support for the Wandboard is included in the meta-freescale-3rdparty
FSL community BSP layer. All of the Wandboard board variants are bundled in a single Yocto machine called wandboard
.
To build an image for the wandboard
machine for the Poky distribution, use the following commands:
$ cd /opt/yocto/fsl-community-bsp$ MACHINE=wandboard DISTRO=poky source setup-environment wandboard$ bitbake core-image-minimal
The setup-environment
script is a wrapper around the oe-init-build-env
we used before. It will create a build directory, set up the MACHINE
variable and DISTRO
with the provided values, and prompt you to accept the NXP EULA as described earlier. Your conf/local.conf
configuration file will be updated both with the specified machine and the EULA
acceptance variable. To accept the license, the following line has been automatically added to the project's conf/local.conf
configuration file:
ACCEPT_FSL_EULA = "1"
Note
Remember that if you close your Terminal session, you will need to set up the environment again before being able to use BitBake. You can safely rerun the setup-environment script shown next, as it will not touch an existing conf/local.conf
file:$ cd /opt/yocto/fsl-community-bsp/
$ source setup-environment wandboard
The preceding BitBake command creates a core-image-minimal-wandboard.wic.gz
file, that is, a compressed WIC file, inside the tmp/deploy/images/wandboard
folder.
A WIC file is created by Yocto using the WIC tool and it is a partitioned image from Yocto build artifacts that can then be directly programmed.
This image can be programmed into a microSD card, inserted in the primary slot in the Wandboard CPU board (the one in the side of the i.MX6 SoM and under the heatsink), and booted using the following commands:
$ cd /opt/yocto/fsl-community-bsp/wandboard/tmp/deploy/images/wandboard/$ sudo bmaptool copy --nobmap core-image-minimal-wandboard.wic.gz /dev/sdN
Here, /dev/sdN
corresponds to the device node assigned to the microSD card in your host system.
Note
If the bmaptool utility is missing from your system, you can install it with:$ sudo apt-get install bmap-tools
bmaptool will refuse to program mounted devices and it will complain with:bmaptool: ERROR: cannot open block device '/dev/sdN' in exclusive mode: [Errno 16] Device or resource busy: '/dev/sdN'
You will need to unmount the SD card if Ubuntu auto mounted it with:$ sudo umount /dev/sdN
Here, N
is a letter assigned by the Linux kernel. Check the dmesg
to find out the device name.
The --nobmap
option passed to bmaptool requires some explanation. bmaptool is a utility specialized in copying data to block devices, similar to the traditional dd
command. However, it has some extra functionality that makes it a very convenient tool to use in embedded device development work:
- It is able to copy from compressed files, as we can see with the
wic.gz
file - It is able to use a BMAP file to speed up the copying of sparse files
When data is stored in a filesystem, blocks of data are mapped to disk sectors using an on-disk index. When a block of data is not mapped to any disk sector, it's called a hole, and files with holes are called sparse files. A BMAP file provides a list of mapped areas as well as checksums for both the BMAP file itself and the mapped areas.
Using this BMAP file, bmaptool can significantly speed up the process of copying sparse files.
However, as we are not using a BMAP file, we pass the --nobmap
file and use bmaptool for the convenience of using a compressed file. It also has other optimizations over dd
that make it a better tool for the job.
- You can find more information regarding the repo tool in Android's documentation at https://source.android.com/setup/using-repo
- The bmaptool documentation can be accessed at https://source.tizen.org/documentation/reference/bmaptool
More information about the different hardware mentioned in this section can be found at:
- Digi International's ConnectCore 6 SBC at https://www.digi.com/products/embedded-systems/single-board-computers/connectcore-6-sbc
- The Wandboard at https://www.wandboard.org/