Running the Demo - Running the Demo - 2026.1 English - UG1186

Libmetal and OpenAMP User Guide (UG1186)

Document ID
UG1186
Release Date
2026-06-24
Version
2026.1 English

Refer to the EDF boot instructions (linked above) to boot the image on your target system.

  1. Identify the correct remoteproc node for R52-0 cluster 0 for ELF load. After the system boots, run the following:
    dmesg | grep remoteproc | grep eba00000
    For example, the following output shows the correct node because the base address is 0xEBA00000:
    [    2.818393] remoteproc remoteproc4: eba00000.r52f is available  # Correct node because the base address is 0xEBA00000.
    The R52 cluster 0, core 0 node uses TCM0A with base address 0xEBA00000, which corresponds to /sys/class/remoteproc/remoteproc4.
  2. Set the firmware path. The firmware ELF file is located at: /lib/firmware/xilinx/vek385/rpu/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv_slot0/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv.elf
  3. Save the path without /lib/firmware/:
    export FW=xilinx/vek385/rpu/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv_slot0/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv.elf
  4. Start the remote processor. Run the following commands as root to start the remote processor:
    sudo -s
    echo $FW > /sys/class/remoteproc/remoteproc4/firmware
    echo start > /sys/class/remoteproc/remoteproc4/state
  5. Verify communication by running the following commands:
    cat /dev/ttyRPMSG0 &
    echo "Hello Zephyr" > /dev/ttyRPMSG0
    # Output: TTY 0: Hello Zephyr
    
    echo "Goodbye Zephyr" > /dev/ttyRPMSG0
    # Output: TTY 0: Goodbye Zephyr
    
  6. Use the following helper script to automate remoteproc detection and firmware start:
    echo 8 > /proc/sys/kernel/printk ; 
    export BASE_ADDR=eba00000 
    export FW=xilinx/vek385/rpu/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv_slot0/vek385-r5-0-zephyr-openamp-rpmsg-multi-srv.elf
    
    # Find the correct remoteproc node (e.g., /sys/class/remoteproc/remoteproc4)
    NODE=$(grep -l "$BASE_ADDR" /sys/class/remoteproc/*/name | sed 's|/name||')
    
    echo "Found node: $NODE"
    echo $FW > $NODE/firmware
    echo start > $NODE/state
    
  7. Set up and test RPMsg devices by preparing endpoints with the following commands:
    rpmsg_export_dev /dev/rpmsg_ctrl0 rpmsg-tty 256 -1
    rpmsg_export_dev /dev/rpmsg_ctrl0 rpmsg-tty 257 -1
    
    rpmsg_export_ept /dev/rpmsg_ctrl0 my_endpoint1 100 1
    rpmsg_export_ept /dev/rpmsg_ctrl0 my_endpoint2 101 1
    
  8. Run the following ping test to verify endpoints:
    rpmsg_ping /dev/rpmsg0
    # message for /dev/rpmsg0: "from ept 0x0402: ping /dev/rpmsg0"
    
    rpmsg_ping /dev/rpmsg1
    # message for /dev/rpmsg1: "from ept 0x0001: ping /dev/rpmsg1"
    
  9. Run the following commands to clean up endpoints:
    rpmsg_destroy_ept /dev/rpmsg1
    rpmsg_destroy_ept /dev/rpmsg2