Install and Run Ubuntu 20.04 on Xilinx Zynq-7000 SoC ZC706 Through a Bootable SD Card, and Access It Through the Serial Port

In a new research project we are going to use the Zynq-7000 SoC ZC 706 Evaluation Kit. Below I document the steps I took to prepare Ubuntu 20.04 for the evaluation board and make sure it is running by connecting through a serial port. Additionally I document how I enabled remote access for colleagues and myself (so I don’t have to use the UART port every time I want to connect to the board).

I thank Chathura Niroshan for writing up the steps for installing Ubuntu 16.04 on Zynq-7000 SoC ZC702. To ensure I followed the correct and most up-to-date steps, I used PetaLinux’s Reference Guide and his write up side by side to install Ubuntu on a bootable SD card for ZC706.

The main difference between the steps I took and Chathura’s steps is that I did not need Vivado to create a hardware design. Instead, I used a readily available board support packages (BSP) file for ZC706 that includes a default hardware design. (Nevertheless, because I thought I am going to need Vivado during the steps, I did download and install it. I experienced an issue during the installation which I could resolve with the solution mentioned in this comment which instructs to install packages libtinfo5 and libncurses5.)

I executed the steps below on my laptop with an Intel CPU E3-1505M v5 and 64GB RAM that is running Ubuntu 20.04. To create the bootable files I used PetaLinux Tools version 2020.2 and copied them to a 256 GB SD card.

Create Bootable SD Card

We need to format the SD card and create 2 partitions of which the first will contain the boot information and the second partition will contain the root filesystem. First three steps under the section Configuring SD Card ext File System Boot of the Reference Guide describe how these partitions should be configured. Following the steps below we can create such two partitions:

  1. Insert the SD card into the SD card reader slot connected to your machine.

Install PetaLinux Tools

As noted under the section Installation Steps in the Reference Guide, the recommended minimum workstation requirements are a 2 GHz CPU with 8 cores at minimum, 8 GB of RAM and 100 GB of free disk space. In my case, I did fine with a CPU of 4 cores and 2.8 GHz clock speed. Although Ubuntu 20.04 (running on my laptop) was not listed as a Supported OS, I had no issues installing and using PetaLinux Tools after getting the required packages. Steps for installing PetaLinux Tools v2020.2:

  1. As mentioned in the Reference Guide, PetaLinux requires that /bin/sh is ‘bash’. Check by executing ls -l /bin/sh if it is pointing to ‘bash’ or ‘dash’. If it is ‘dash’, reconfigure it by executing sudo dpkg-reconfigure dash . Select <No> when asked “Use dash as the default system shell (/bin/sh)?”. /bin/sh should now be ‘bash’.

Prepare BOOT Partition Files

Next we prepare the boot files that we will copy to the SD card. More information about the performed steps below can be found under sections PetaLinux BSP Installation, PetaLinux Configuration and Build System Image, Boot Images Storage Configuration, Build System Image and Generate Boot Image for Zynq-7000 Devices of the Reference Guide.

  1. Download the board support package (BSP) file for your board, in our case xilinx-zc706-v2020.2-final.bsp for ZC706, from Important to highlight from the Reference Guide is that PetaLinux 2020.2 only works with hardware designs exported from Vivado Design Suite version 2020.2. So in case you are using a different version of PetaLinux, it might be better to get the BSP file from the download page of your version of PetaLinux.

Prepare RootFS Partition Files

We will install Ubuntu 20.04 LTS in the RootFS partition. Since the rootfs.tar.gz file, created during the petalinux build above, does not contain Ubuntu, we ignore that file and follow steps from’s wiki page to get Ubuntu 20.04 LTS root filesystem.

  1. Download the tar file ubuntu-20.04-minimal-armhf-2020–05–10.tar.xz from

Copy Files to the SD Card

Related section for copying files to the SD card is the Copying Image Files section in the Reference Guide. Steps for preparing the Ubuntu root filesystem are from digikey’s wiki page.

  1. Insert the SD card into the SD card reader slot connected to your machine.

Connect to the Board Through the Serial Port

To test our installation, we connect through the serial port and see if the board is booting into Ubuntu.

  1. Start with the board turned off.

Image supporting step 3 above:

Boot Mode Switch configured to boot from the SD card. Image from

References for the steps above:

Enable Remote Access From Outside Local Network

Finally, I will describe the steps I took to enable remote access to the boards to colleagues and myself. This will allow to connect through SSH and will save myself from having to connect through the serial port every time. Ubuntu installed on the board already allows connecting with SSH. However, because it is behind the firewall of my Verizon router, I had to adjust the firewall settings to allow incoming SSH requests and route them to the board.

Important: consider changing the default password of the ubuntu user on the board before making the board accessible over the internet.

Adjusting firewall settings:

  1. Make sure the board is ON and connected to the router with an Ethernet cable.

Thank you for reading! Please leave a comment if you have questions or issues related to the steps above.

Security Researcher @ Stevens Institute of Technology