Linux Boot from U‑Boot and OpenAMP Application Run - Linux Boot from U‑Boot and OpenAMP Application Run - 2026.1 English - UG1186

Libmetal and OpenAMP User Guide (UG1186)

Document ID
UG1186
Release Date
2026-06-24
Version
2026.1 English
The following steps describe how to boot Linux on an AMD Zynq™ UltraScale+™ MPSoC board using U‑Boot from an SD card (or JTAG as an alternative) and then run the OpenAMP echo‑test demo to verify communication between the APU and RPU.
  1. Go to the U-Boot prompt and boot Linux from the SD card:
    ZynqMP> mmcinfo && fatload mmc 0 0x10000000 image.ub && fatload mmc 0 0x14000000 openamp.dtb
    
    Device: mmc@ff170000
    
    Manufacturer ID: 3
    
    OEM: 5344
    
    Name: SL16G
    
    Bus Speed: 100000000
    
    Mode: UHS SDR50 (100MHz)
    
    Rd Block Len: 512
    
    SD version 3.0
    
    High Capacity: Yes
    
    Capacity: 14.8 GiB
    
    Bus Width: 4-bit
    
    Erase Group Size: 512 Bytes
    
    57212600 bytes read in 3718 ms (14.7 MiB/s)
    
    40961 bytes read in 26 ms (1.5 MiB/s)
    
    ZynqMP> bootm 0x10000000 0x10000000 0x14000000
    Note: As an alternative to all steps above to SD boot, you can JTAG boot the board. For this you need to have connected a JTAG cable, installed JTAG drivers, and created a PetaLinux project using a provided BSP.

    To do this, you must go in the <your project>/pre-built/linux/images directory and replace the system.dtb file by openamp.dtb. Next, type petalinux-boot --jtag --prebuilt 3.

  2. Run the echo-test demo.
    
    root@plnx_aarch64:~# echo image_echo_test > /sys/class/remoteproc/remoteproc0/firmware
    
    root@plnx_aarch64:~# echo start > /sys/class/remoteproc/remoteproc0/state
    
    [  265.772355] remoteproc remoteproc0: powering up ff9a0100.zynqmp_r5_rproc
    
    [  265.779900] remoteproc remoteproc0: Booting fw image echotest_standalone_r5_0.elf, size 719860
    
    [  265.790005] zynqmp_r5_remoteproc ff9a0100.zynqmp_r5_rproc: RPU boot from TCM.
    
    Starting application...
    
    Initialize remoteproc successfully.
    
    creating remoteproc virtio
    
    initializing rpmsg shared buffer pool
    
    initializing rpmsg vdev
    
    initializing rpmsg vdev
    
    Try to create rpmsg endpoint.
    
    Successfully created rpmsg endpoint.
    
    [  265.797738] remoteproc remoteproc0: registered virtio0 (type 7)
    
    [  265.800388] virtio_rpmsg_bus virtio0: rpmsg host is online
    
    [  265.830254] remoteproc remoteproc0: remote processor ff9a0100.zynqmp_r5_rproc is now up
    
    [  265.838381] virtio_rpmsg_bus virtio0: creating channel rpmsg-openamp-demo-channel addr 0x0
    
    root@xilinx-zcu102-2019_1:/lib/firmware# echo_test -d virtio0.rpmsg-openamp-demo-channel.-1.0
    
    Echo test start
    
    Open rpmsg dev /dev/rpmsg0!
    
    **************************************
    
    Echo Test Round 0
    
    **************************************
    Note: This rpmsg device driver is an out-of-tree Linux kernel module. It can be loaded at boot time if you write a start-up init script.