From c0d6983483ac0c29437d743df0036ff2e6572b64 Mon Sep 17 00:00:00 2001 From: Alan Cudmore Date: Fri, 25 Mar 2022 08:36:43 -0500 Subject: 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(+) (limited to 'user/bsps') 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. `_ +The reference for setting up a SD card and obtaining pre-built boot images is +`here. `_ + +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. `_ + +Once you have the card formatted correctly, you need to place the files from +`this archive `_ +on the FAT partition. The following file was used for this example: +`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 `_ +or dd. The Ubuntu image is available `here. `_ +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@ff170000: 0 + In: serial@ff000000 + Out: serial@ff000000 + Err: serial@ff000000 + Bootmode: SD_MODE1 + Reset reason: SOFT + Net: + ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr 12, interface rgmii-id + + Warning: ethernet@ff0e0000 (eth0) using random MAC address - 82:32:1d:80:d9:c9 + eth0: ethernet@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 ------------ -- cgit v1.2.3