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

Joel Sherrill joel at rtems.org
Fri Mar 25 15:42:05 UTC 2022


Module:    rtems-docs
Branch:    master
Commit:    c0d6983483ac0c29437d743df0036ff2e6572b64
Changeset: http://git.rtems.org/rtems-docs/commit/?id=c0d6983483ac0c29437d743df0036ff2e6572b64

Author:    Alan Cudmore <alan.cudmore at gmail.com>
Date:      Fri Mar 25 08:36:43 2022 -0500

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

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.

---

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

diff --git a/user/bsps/aarch64/xilinx-zynqmp.rst b/user/bsps/aarch64/xilinx-zynqmp.rst
index ca232de..78bff12 100644
--- a/user/bsps/aarch64/xilinx-zynqmp.rst
+++ b/user/bsps/aarch64/xilinx-zynqmp.rst
@@ -44,6 +44,173 @@ 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
 ------------
 



More information about the vc mailing list