September 24, 2021
Editor’s Note: This content is republished from the MicroZed Chronicles, with permission from the author.
Having an embedded Linux operating system is critical for Xilinx heterogeneous SoCs to be able to achieve their full potential. The standard Xilinx embedded Linux solution is PetaLinux. Recently however, Xilinx announced the results of a project that started just after XDF in 2019 called Ubuntu 2020.4 LTS (certified by Canonical). This release is a single image that is downloaded from the Canonical Ubuntu webpage and supports the ZCU102, ZCU104, and ZCU106 evaluation kits with future support for KV260. Later in the blog, I will explain how a single image can work on all three boards.
Other frameworks and boards like PYNQ and Snickerdoodle have released ports of Ubuntu. However, these were not officially certified by Canonical. Since certification brings with it the ability to engage with Canonical technical support, this can be very useful for deployed products.
Downloading the image and writing it to a SD card will result in your target board running a full Ubuntu desktop environment if the DisplayPort output is connected. You can get started testing the Ubuntu image by simply adding a USB keyboard and mouse.
The out-of-the-box design example contains a Deep Learning Processor Unit (DPU) in the programmable logic that can be installed once the machine is booted. This allows the user to run Vitis AI models on the board, leveraging Xilinx model zoo. On the ZCU10x boards, the HDMI outputs are used as part of the demonstration applications, which is why the DisplayPort is used for the desktop.
The out-of-the-box applications are impressive as you would expect when the DPU is used and using Ubuntu to run opens the framework to developers / scientists who are more familiar with the Ubuntu environment.
Of course, it goes without saying that eventually developers will want to create their own applications for the PL. This is where the new Xilinx snap xlnx-config comes in. Xlnx-config is what enables the creation of a single universal boot image. It’s also capable of taking a custom programmable logic design and creating the boot artifacts so that it is in a format compatible with the certified Ubuntu boot process.
Coming back to the boot process, it is very interesting to understand how a single generic image is provided and can be used across all three boards. The implementation is both simple and elegant. Following the sampling of the mode pins (set to SD Card), a stripped down boot.bin is loaded. This boot.bin then reads an eeprom on the development board which defines the boards’ identity. Once the identity of the board is known, the WBSTAR register is loaded appropriately and soft reset is applied. This then picks up the board-specific boot file (also included in the image) and the load completes.
To ensure recovery if something goes wrong, the boot creation process also provides a golden image that can be used to recover the image if something goes wrong or gets corrupted.
One of the great things about Ubuntu is the ability to use the package managers to add in additional packages required for specific application development. This makes the performance of the programmable logic available to developers like data scientists who are familiar with the Ubuntu environment.
As you would expect, there is more to the Ubuntu release and specific elements than can be covered in a single blog so we will revisit this topic in more detail at a later date. You can, however, find some very detailed descriptions here on the Xilinx Wiki. Also, check out my interview with Tony McDowell and Terry O’Neal from Xilinx to learn more about the Ubuntu release and what might be on the product roadmap.
Something of special interest is the upcoming release of the KV260 Ubuntu image for the SOM. This enables engineers to have a production-ready SOM solution with a software solution that can also be supported in the field by Canonical.
I am looking forward to working more closely with Ubuntu running on the ZCU10x and trying to create my own overlay to test out the snaps.