The purpose of this page is to describe the build and execution of the Hello World EL1 Baremetal application as a DomU on Zynq UltraScale+ MPSoC ,using PetaLinux and Xilinx SDK Tools.
- Create Hello World standalone application in SDK by selecting Hypervisor Guest as "yes", Refer image given below,
Before starting you need to create a PetaLinux project. It is assumed that a default PetaLinux reference design is used unchanged in these instructions.
- Once application is created, please confirm following changes in application/BSP
- BSP settings: stdin/stout has to pointed at psu_uart_1
- Application linker file:Application has to be built with starting address: 0x40000000
- Build the application if settings mentioned above are configured correctly. Bin file will be created in the "<app_project>/Debug/" directory, after successful compilation of application.
- If Bin file is not generated automatically, execute this command from the SDK application project Debug directory: aarch64-none-elf-objcopy -O binary --gap-fill 0 <elf file name> <bin file name>
- The peripheral devices used as part of EL1 Baremetal application need to be passthrough in xen-overlay.dtsi (<petalinux_project>/project-spec/meta-user/recipes-bsp/device-tree/files/xen-overlay.dtsi)
- For example , The "Hello world" standalone application uses uart1 to print messages, so passthrough the uart1 device in xen-overlay.dtsi, as shown below,
- Build the images for XEN with above change using the petalinux. Please refer section "Configuring and building XEN from source using PetaLinux 2017.1" in XEN Hypervisor for steps.
- XEN needs xl configuration file, which describes the DomU guest.
- Here is a content of hello_world.cfg, an configuration file used to run Hello World application as an domU guest
- As shown in configuration file, bin file generated through SDK (i.e. xapp_hello_world_el1.bin generated through SDK in previous steps)
has to be mentioned as kernel image in "kernel" field of xen guest configuration file. Also, "irqs" and "iomem" fields are updated
with uart1 interrupt id and base address receptively. Similar way these fields in config needs to be updated for the other peripherals
as well, if application is using any.
- More information on config file can be found at
- Copy the bin file xapp_hello_world_el1.bin generated in previous steps and hello_world.cfg to SD card or else use tftp to get them
in dom0's files system after booting dom0.
- Boot XEN dom0 with the images built in earlier steps. Refer section "TFTP Booting Xen and Dom0 2017.1" in XEN Hypervisor, for dom0 boot up steps.
- Once XEN dom0 is up and running, copy the config file hello_world.cfg and bin file xapp_hello_world_el1.bin from SD card to dom0 file system/use tftp to get them in dom0 file system
- Go to that path in dom0 file system and Execute below command
- xl create hello_world.cfg
- You'll see hello world baremetal application running as XEN domU , prints in bare metal application would be available on uart1 console
- More detail on xl command can be found at https://xenbits.xen.org/docs/unstable/man/xl.1.html