[PATCH] rtems-docs: add example booting aarch64 image on Xilinx ZCU102

Alan Cudmore alan.cudmore at gmail.com
Fri Mar 18 16:04:18 UTC 2022


This patch is for the rtems-docs repo. I added details on the procedure I
used to boot RTEMS images on the Xilinx ZCU102 board. I applied this patch,
and  generated the HTML docs, and everything looks ok to me.
Thanks,
Alan

---
 user/bsps/aarch64/xilinx-zynqmp.rst | 138 ++++++++++++++++++++++++++++
 1 file changed, 138 insertions(+)

diff --git a/user/bsps/aarch64/xilinx-zynqmp.rst
b/user/bsps/aarch64/xilinx-zynqmp.rst
index ca232de..3d55c4c 100644
--- a/user/bsps/aarch64/xilinx-zynqmp.rst
+++ b/user/bsps/aarch64/xilinx-zynqmp.rst
@@ -44,6 +44,144 @@ When booting via u-boot, RTEMS must be packaged into a
u-boot image or booted
 as a raw binary since u-boot does not currently support ELF64 which is
required
 for AArch64 ELF binaries.

+
+Example: Booting a RTEMS image on the ZCU102 ZynqMP board
+---------------------------------------------------------
+
+This example will walk through the steps needed for booting RTEMS from a
SD card on the
+`ZCU102 ZynqMP board. <
https://www.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html>`_ The
reference for setting up a SD card and obtaining pre-built boot images is
`here. <
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841858/Board+bring+up+using+pre-built+images
>`_
+
+Hardware Setup
+^^^^^^^^^^^^^^
+
+Set the dip switch SW6 according to the table below. This will allow the
board to boot from the SD card. Connect a Micro-USB cable to the USB UART
interface J83. This is a quad USB UART interface which will show up on the
development host computer as four different serial or tty devices. Use the
first channel for the console UART. It should be set to 115k baud.
+
++---------------------------+
+| Dip Switch JW6            |
++------+------+------+------+
+|  ON  |  OFF |  OFF |  OFF |
++------+------+------+------+
+
+Prepare a SD card with a bootable partition
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The goal is to have a bootable SD card with a partition that is formatted
with the FAT file system. The file system will contain the boot artifacts
including BOOT.bin and the u-boot image. The RTEMS image will be placed on
this volume. To create the bootable SD card, follow the directions `here. <
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842385/How+to+format+SD+card+for+SD+boot
>`_
+
+Once you have the card formatted correctly, you need to place the files
from `this archive <
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/2202763266/2021.2+Release#Downloads>`_
on the FAT partition. The following file was used for this example:
`xilinx-vck190-v2021.2-final.bsp <
https://www.xilinx.com/member/forms/download/xef.html?filename=xilinx-vck190-v2021.2-final.bsp
>`_
+
+In order to download these files, you need to have a Xilinx account login.
As an alternative, you can download a bootable image for Ubuntu 20.04 and
write it to an SD card using a utility such as `Balena Etcher <
https://www.balena.io/etcher>`_  or dd. The Ubuntu image is available
`here. <https://ubuntu.com/download/xilinx>`_ Download the image for the
Zynq Ultrascale+ MPSoC Development boards, uncompress it and write it to
the SD card. This image creates multiple partitions, but we only need to
use the FAT partition with the boot artifacts on it.
+
+Verify that the board can boot from the SD card
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+It is worth booting the board from the SD card before trying to boot
RTEMS. Insert the card and power on the board. You should see the messages
on the first console indicating the various boot loader stages and
eventually the Linux kernel. The goal is to interrupt u-boot when given the
chance to access the u-boot command prompt.
+
+Build RTEMS with examples
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Build the RTEMS `xilinx-zynqmp-lp64-zu3eg` BSP. Use the ticker.exe sample
which can be found in the directory:
+
+.. code-block:: shell
+
+  build/aarch64/xilinx-zynqmp-lp64-zu3eg/testsuites/samples
+
+Prepare the RTEMS image
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Prepare your RTEMS image to boot from u-boot with the following commands:
+
+.. code-block:: shell
+
+  $ aarch64-rtems6-objcopy -Obinary ticker.exe ticker.bin
+  $ gzip -9 ticker.bin
+  $ mkimage -A arm64 -O rtems -T kernel -a 0x10000000 -e 0x10000000 -n
RTEMS -d ticker.bin.gz rtems.img
+
+Boot the RTEMS image
+^^^^^^^^^^^^^^^^^^^^
+Copy the prepared RTEMS image to the SD card and insert the SD crd in the
ZCU102 board. Power on the board.
+When you see the prompt on the console to interupt u-boot, hit a key to
bring up the u-boot command prompt. On the u-boot command prompt you can
boot your RTEMS image:
+
+.. code-block:: shell
+
+  Zynq-MP> fatload mmc 0:1 0x1000 rtems.img
+  Zynq-MP> bootm 0x1000
+
+This is the entire boot sequence:
+
+.. code-block:: shell
+
+  Pre-FSBL boot Started
+  Xilinx Zynq MP First Stage Boot Loader
+  Release 2020.2   Nov 18 2020  -  11:46:01
+  NOTICE:  ATF running on XCZU9EG/silicon v1/RTL5.1 at 0xfffea000
+  NOTICE:  BL31: v2.2(release):xilinx_rebase_v2.2_2020.1-10-ge6eea88b1
+  NOTICE:  BL31: Built : 12:28:45, Nov 17 2020
+
+  U-Boot 2020.01 (Jun 15 2021 - 14:24:32 +0000)
+
+  Model: ZynqMP ZCU102 Rev1.0
+  Board: Xilinx ZynqMP
+  DRAM:  4 GiB
+  PMUFW:  v1.1
+  EL Level:       EL2
+  Chip ID:        zu9eg
+  NAND:  0 MiB
+  MMC:   mmc at ff170000: 0
+  In:    serial at ff000000
+  Out:   serial at ff000000
+  Err:   serial at ff000000
+  Bootmode: SD_MODE1
+  Reset reason:   SOFT
+  Net:
+  ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr 12, interface rgmii-id
+
+  Warning: ethernet at ff0e0000 (eth0) using random MAC address -
82:32:1d:80:d9:c9
+  eth0: ethernet at ff0e0000
+  Hit any key to stop autoboot:  0
+
+  ZynqMP> fatload mmc 0:1 0x1000 rtems.img
+  46669 bytes read in 27 ms (1.6 MiB/s)
+  ZynqMP> bootm 0x1000
+  ## Booting kernel from Legacy Image at 00001000 ...
+     Image Name:   RTEMS
+     Image Type:   AArch64 RTEMS Kernel Image (gzip compressed)
+     Data Size:    46605 Bytes = 45.5 KiB
+     Load Address: 10000000
+     Entry Point:  10000000
+     Verifying Checksum ... OK
+     Uncompressing Kernel Image
+  ## Transferring control to RTEMS (at address 10000000) ...
+
+  *** BEGIN OF TEST CLOCK TICK ***
+  *** TEST VERSION: 6.0.0.f381e9bab29278e4434b1a93e70d17a7562dc64c
+  *** TEST STATE: EXPECTED_PASS
+  *** TEST BUILD: RTEMS_POSIX_API RTEMS_SMP
+  *** TEST TOOLS: 10.3.1 20210409 (RTEMS 6, RSB
ad54d1dd3cf8249d9d39deb1dd28b2f294df062d, Newlib eb03ac1)
+  TA1  - rtems_clock_get_tod - 09:00:00   12/31/1988
+  TA2  - rtems_clock_get_tod - 09:00:00   12/31/1988
+  TA3  - rtems_clock_get_tod - 09:00:00   12/31/1988
+  TA1  - rtems_clock_get_tod - 09:00:05   12/31/1988
+  TA2  - rtems_clock_get_tod - 09:00:10   12/31/1988
+  TA1  - rtems_clock_get_tod - 09:00:10   12/31/1988
+  TA1  - rtems_clock_get_tod - 09:00:15   12/31/1988
+  TA3  - rtems_clock_get_tod - 09:00:15   12/31/1988
+  TA2  - rtems_clock_get_tod - 09:00:20   12/31/1988
+  TA1  - rtems_clock_get_tod - 09:00:20   12/31/1988
+  TA1  - rtems_clock_get_tod - 09:00:25   12/31/1988
+  TA2  - rtems_clock_get_tod - 09:00:30   12/31/1988
+  TA1  - rtems_clock_get_tod - 09:00:30   12/31/1988
+  TA3  - rtems_clock_get_tod - 09:00:30   12/31/1988
+
+  *** END OF TEST CLOCK TICK ***
+
+  [ RTEMS shutdown ]
+
+
+Follow up
+^^^^^^^^^
+
+This is just one possible way to boot the RTEMS image. For a development
environment you may wish to configure u-boot to boot the RTEMS image from a
TFTP server. For a production environment, you may wish to download,
configure, and build u-boot, or develop a BOOT.BIN image with the RTEMS
application.
+
 Clock Driver
 ------------

-- 
2.30.1 (Apple Git-130)


More information about the devel mailing list