Ubuntu on Zynq

This page describes how Ubuntu can be run on Zynq platforms. The Ubuntu system described on this page is pretty minimalistic and does not feature any graphical user interface. There is a Ubuntu Tech tip on our wiki as well with a graphical user interface. There is also an Arch Linux root file system available.

Table of Contents

Required Files

To boot the system we need the usual set of files. Pre-built images can be downloaded here.
Additionally we need the Ubuntu root file system, which is also found in the download section.
To use this Ubuntu system, you'll need a SD card to boot your Zynq platform from.


Boot Images

The archive zynq-ubuntu-core-12.10-core-armhf-boot.tar.xz holds Zynq boot images, currently only for zc702.


zc702/boot.binboot imaged0e3bab18bc898a6d594029f659105ba
zc702/fsbl.elfFSBL binary used for the boot image07e9613068b47cdb992293c886a43a39
zc702/u-boot.elfu-boot binary used for the boot image480b2b0b32b40edc6b0d09c188368626
uImageLinux kernelc891286253097d17f9dc44aeb8d16e88
zc702/devicetree.dtbdevice tree blobebc5e6fc8884ed059ff9d2ab05ecf4a8
These files are tested to work, but it shouldn't be difficult to replace them. Though not tested, this whole process should be portable to other platforms by reusing the released boot images. The Dirty Details section has more details about the files.

Root File System

The Ubuntu root file system is provided through zynq-ubuntu-core-12.10-core-armhf-rootfs.tar.xz. The file system is based on Ubuntu's core file system, in particular the armhf release of Ubuntu 12.10 (Quantal Quetzal).

Copy the System to an SD Card

You need a SD card with two partitions. Partition one will be the boot partition and partition two will hold the root file system. Please follow these instructions for partitioning your SD card.

Extract the boot images to a temporary directory and copy the files appropriate for you platform to the root of the boot partition of your SD card, i.e. the files must not be in any subdirectories.

Then extract the root file system to a temporary directory and copy it to the root partition of your SD card. Since the root file system has files with root permissions, you need root privileges for all these steps.

That's it. Remove the SD card from your computer and insert it in your Zynq platform. Set it up for SD boot and power it up.

Login to the System

The system should boot up (see boot log below) and greet you with a login prompt.
Valid users to login with are:
The fundamental tools should be available and others can be installed and updated with apt-get
Note that the sorce.list can be outdated and might require to add new sources in order to count on recent packages.

To use dhcp to enable networking start the dhcpd client
To set this as default, add the following line to /etc/network/interfaces

The Dirty Details

Root File System

The following lines have been added to /etc/securetty

The file /etc/init/ttyPS0 has been added (based on /etc/init/tty1)

The kernel modules are installed in /lib/modules/`uname -r` and kernel headers are found in /usr/src/linux-headers-`unare -r`.

A few additional packages have been installed. Amongst others:
  • vim
  • aptitude
  • net-tools
  • openssh-server
  • isc-dhcp-client


The initramfs is created with buildroot using the attached config files for buildroot and busybox.

NOTE: The created initramfs is compressed using LZMA. If you replace the kernel, make sure the LZMA decompressor is enabled.

The exact state of the buildroot repository at creation time was pretty much commit
Plus a patch floating around on the mailing list which automates adding a u-boot header to the created image

The init script of the resulting initramfs is replaced with the following code, in order to make the switch to the Ubuntu system

Obviously here is a lot of potential to do things prettier:
  • acutally parse the kernel command line and honor root=... arguments
  • error checking in case the root device is not available/mountable and dropping a shell
  • and probably many more


The devictree has been compiled from the zynq-zc702.dts as present in the xilinx-v14.5 tag, with following modifications:
  • the ip=... argument is removed
  • the root argument is changed to root=/dev/mmcblk0p2

Linux Kernel

The kernel has been created from a commit a little ahead of the xilinx-v14.5 tag with the default config file. The kernel should be easily replaceable with a custom kernel.


U-Boot has been created from the xilinx-v14.5 tag.


The FSBL is a standard FSBL for zc702 created with 2013.1/14.5 version of XSDK.

Related Links