Software Application Development
This is a getting started guide providing walk through style examples using the AMD Embedded Development Framework (EDF) covering initial board setup and running a pre-built disk image, hardware and software applications development using the pre-built image, and full custom hardware & software builds and image creation.
Table of Contents
Software Application Development on Target
On-target development is convenient because you can use native compilers and tools and a workflow most developers are used to similar to doing native x86 development on a workstation. You can install a rich set of dev packages from the package feed and use familiar build systems like make, autotools, cmake, or meson without having to set up a cross-development environment.
Package Management using RPM
Update for EDF 25.05 - AMD Vivado™ Design Suite 2025.1
This flow is supported as an on-line flow
Prior release (EA) - The Package feed required for this section was only supported as an offline flow for Early access. see Accessing the package feed without an on-line network connection
A package manager and package feed is a convenient way of installing additional packages into your root file system. dnf (Danified Packaging) is the default runtime package manager. The package management feature is enabled in the general purpose Linux file system.
Below is an example to update, search and install the packages using the network-hosted package feed.
amd-edf:~$ sudo dnf update
amd-edf:~$ dnf search <package-name>
amd-edf:~$ sudo dnf install <package-name> |
Accessing the package feed without an on-line network connection
If you do not have online network access, you can download a copy of the package feed, then copy and extract the contents to a USB flash drive on your host PC so that you can use the package feed offline. After the flash drive has been prepared, plug it into the evaluation board and follow the below steps.
AMD EDF 25.05 (VEK385 EA) and Vivado™ Design Suite 2025.1
It is recommended to use the on-line package feed available with EDF 25.05.
An updated package feed can be generated manually for offline use.
(The offline package feed bundle from the AMD Vivado design suite 2025.1 EA release for VEK385 EA can be downloaded from the VEK385 lounge site [rpmfeed_04121214.tar.gz] but this might not be compatible with the latest EDF images)
The below tutorial assumes that your USB flash drive is enumerated as /dev/sda and has one partition /dev/sda1. This might be different depending on your system and device.
# query device
amd-edf:~$ lsblk -S
NAME
HCTL TYPE VENDOR MODEL REV SERIAL TRAN
sda 0:0:0:0 disk SanDisk Cruzer Blade 1.00 usb
# query partitions
amd-edf:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 14.9G 0 disk
`-sda1 8:1 1 14.9G 0 part
# mount partition that contains extracted package feed
amd-edf:~$ sudo mount /dev/sda1 /media
# check directory tree
amd-edf:~$ tree -L 1 /media
/media/
└── rpm
├── aarch64
├── all
├── amd_cortexa78_mali_common
├── any
├── armv8a
├── armv8a_crc
├── cortexa72_cortexa53
├── noarch
└── versal_2ve_2vm_genericNext we need to update the DNF repo file to point to the offline package feed file path based on where the USB partition has been mounted, clean and update the DNF cache.
Toolchain installation
Update for EDF 25.05 - AMD Vivado™ Design Suite 2025.1
This flow is supported as an on-line flow
Prior release (EA) - The Package feed required for this section was only supported as an offline flow for Early Access. see Accessing the package feed without an on-line network connection
In preparation for doing any on-target development, we first need to install the compiler toolchains and other commonly used development utilities. This can be done by installing the self-hosted package group from the package feed.
Note: The installation step takes a while to complete
amd-edf:~$ sudo dnf install packagegroup-self-hosted
[snip]
amd-edf:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-amd-linux/13.4.0/lto-wrapper
Target: aarch64-amd-linux
Configured with: ../../../../../../work-shared/gcc-13.4.0-r0/gcc-13.4.0/configure --build=x86_64-linux --host=aarch64-amd-linux --target=aarch64-amd-linux --prefix=/usr --exec_prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --sysconfdir=/etc --sharedstatedir=/com --localstatedir=/var --libdir=/usr/lib --includedir=/usr/include --oldincludedir=/usr/include --infodir=/usr/share/info --mandir=/usr/share/man --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot=/ --with-gnu-ld --enable-shared --enable-languages=c,c++,fortran --enable-threads=posix --enable-multilib --enable-default-pie --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=aarch64-amd-linux- --without-local-prefix --disable-install-libiberty --disable-libssp --enable-libitm --enable-lto --disable-bootstrap --with-system-zlib --with-linker-hash-style=gnu --enable-linker-build-id --with-ppl=no --with-cloog=no --enable-checking=release --enable-cheaders=c_global --without-isl --with-build-sysroot=/ --disable-static --enable-nls --with-glibc-version=2.28 --enable-initfini-array --enable-__cxa_atexit
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.4.0 (GCC) |
Software application development
In this example we will clone, build and install the example application to test on-target development using common tools:
amd-edf:~$ wget https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz
--2025-05-08 03:09:51-- https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz
Resolving ftp.gnu.org... 209.51.188.20, 2001:470:142:3::b
Connecting to ftp.gnu.org|209.51.188.20|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1017723 (994K) [application/x-gzip]
Saving to: 'hello-2.12.tar.gz'
hello-2.12.tar.gz 100%[==================================================================================================================>] 993.87K 1.49MB/s in 0.7s
2025-05-08 03:09:53 (1.49 MB/s) - 'hello-2.12.tar.gz' saved [1017723/1017723]
amd-edf:~$ tar -xf hello-2.12.tar.gz
amd-edf:~$ cd hello-2.12
amd-edf:~/hello-2.12$ ./configure
[snip]
amd-edf:~/hello-2.12$ make -j8
[snip]
amd-edf:~/hello-2.12$ sudo make install
[snip]
amd-edf:~/hello-2.12$ hello
Hello, world! |
Kernel module development
Update for EDF 25.05 - AMD Vivado™ Design Suite 2025.1
This flow is supported as an on-line flow
Prior release (EA) - The Package feed required for this section was only supported as an offline flow for Early access. see Accessing the package feed without an on-line network connection
Install the kernel-devsrc package which provides the entire kernel source tree for kernel module development. The resulting sources will be installed into /usr/src/kernel
amd-edf:~$ sudo dnf install kernel-devsrc
[snip] |
Prepare the kernel source tree for module build.
Note: the kernel release string shown in this example can be different depending on the exact build/image used.
amd-edf:~$ export LOCALVERSION="-$(uname -r | cut -d'-' -f3)"
amd-edf:~$ echo $LOCALVERSION
-gf28cb5f8491a
amd-edf:~$ export KERNEL_SRC=/usr/src/kernel
amd-edf:~$ cd $KERNEL_SRC
amd-edf:/usr/src/kernel$ make kernelrelease
6.12.40-xilinx-gf28cb5f8491a
# make sure the above output matches the output of uname -r
amd-edf:/usr/src/kernel$ uname -r
6.12.40-xilinx-gf28cb5f8491a
amd-edf:/usr/src/kernel$ sudo -E make modules_prepare
[snip] |
For this example, we will clone the hdmi21-modules repository, after that we will build and install the module. This example is for illustration only, the compiled kernel module is not used subsequently.
If you are building your own kernel module, the same steps apply provided your kernel module source tree and Makefile follow the same structure as the provided example.
See
GitHub - Xilinx/hdmi21-modules for the example code.
amd-edf:/usr/src/kernel$ cd
amd-edf:~$ git clone https://github.com/Xilinx/hdmi21-modules
Cloning into 'hdmi21-modules'...
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 26 (delta 11), reused 26 (delta 11), pack-reused 0 (from 0)
Receiving objects: 100% (26/26), 33.72 KiB | 575.00 KiB/s, done.
Resolving deltas: 100% (11/11), done.
amd-edf:~$ cd hdmi21-modules/
amd-edf:~/hdmi21-modules$ make -j8
make -C /usr/src/kernel M=/home/amd-edf/hdmi21-modules O= modules
make[1]: Entering directory '/usr/lib/modules/6.12.40-xilinx-gf28cb5f8491a/build'
warning: the compiler differs from the one used to build the kernel
The kernel was built by: aarch64-amd-linux-gcc (GCC) 13.4.0
You are using: gcc (GCC) 13.4.0
CC [M] /home/amd-edf/hdmi21-modules/xfmc/x_vfmc.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/fmc.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/fmc74.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/fmc64.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/fmc65.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/tipower.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/idt.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/onsemi_tx.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/onsemi_rx.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/ti_tmds1204_tx.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/ti_tmds1204_rx.o
CC [M] /home/amd-edf/hdmi21-modules/xfmc/si5344.o
LD [M] /home/amd-edf/hdmi21-modules/xfmc/hdmi21-xfmc.o
MODPOST /home/amd-edf/hdmi21-modules/Module.symvers
CC [M] /home/amd-edf/hdmi21-modules/xfmc/hdmi21-xfmc.mod.o
CC [M] /home/amd-edf/hdmi21-modules/.module-common.o
LD [M] /home/amd-edf/hdmi21-modules/xfmc/hdmi21-xfmc.ko
make[1]: Leaving directory '/usr/lib/modules/6.12.10-xilinx-gf28cb5f8491a/build'
amd-edf:~/hdmi21-modules$ sudo -E make modules_install
make -C /usr/src/kernel M=/home/amd-edf/hdmi21-modules modules_install
make[1]: Entering directory '/usr/lib/modules/6.12.40-xilinx-gf28cb5f8491a/build'
INSTALL /lib/modules/6.12.40-xilinx-gf28cb5f8491a/updates/xfmc/hdmi21-xfmc.ko
DEPMOD /lib/modules/6.12.40-xilinx-gf28cb5f8491a
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/lib/modules/6.12.40-xilinx-gf28cb5f8491a/build'
amd-edf:~/hdmi21-modules$ sudo depmod
amd-edf:~/hdmi21-modules$ ls xfmc/*ko
xfmc/hdmi21-xfmc.koYou can now inspect your kernel module, load and unload it as follows.
Note: The exact output of the shown commands can vary based on the kernel version etc.
Development inside container
A devtools container image is provided for on-target development inside a container isolated from the host OS. The devtools container image has toolchains and basic developer tools pre-installed. The image has package management enabled and can easily be extended by installing additional packages from the package feed.
devtools container:
amd-edf:~$ sudo docker pull xilinx/edf:devtools-25.05
amd-edf:~$ sudo docker pull xilinx/edf:hello-world-25.05
amd-edf:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.docker.com/r/xilinx/edf/devtools-25.05 latest 6ec094fb31d2 28 hours ago 425MB
hub.docker.com/r/xilinx/edf/hello-world-25.05 latest e9fff5795aa2 3 weeks ago 13.4MB
amd-edf:~$ sudo docker run -it hub.docker.com/r/xilinx/edf/devtools-25.05 bash
bash-5.2# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-amd-linux/13.4.0/lto-wrapper
Target: aarch64-amd-linux
Configured with: ../../../../../../work-shared/gcc-13.4.0-r0/gcc-13.4.0/configure --build=x86_64-linux --host=aarch64-amd-linux --target=aarch64-amd-linux --prefix=/usr --exec_prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --sysconfdir=/etc --sharedstatedir=/com --localstatedir=/var --libdir=/usr/lib --includedir=/usr/include --oldincludedir=/usr/include --infodir=/usr/share/info --mandir=/usr/share/man --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot=/ --with-gnu-ld --enable-shared --enable-languages=c,c++,fortran --enable-threads=posix --enable-multilib --enable-default-pie --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=aarch64-amd-linux- --without-local-prefix --disable-install-libiberty --disable-libssp --enable-libitm --enable-lto --disable-bootstrap --with-system-zlib --with-linker-hash-style=gnu --enable-linker-build-id --with-ppl=no --with-cloog=no --enable-checking=release --enable-cheaders=c_global --without-isl --with-build-sysroot=/ --disable-static --enable-nls --with-glibc-version=2.28 --enable-initfini-array --enable-__cxa_atexit
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.4.0 (GCC)
# type exit to stop the container.
bash-5.2# exit
amd-edf:~$
# to list all containers
amd-edf:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34c71be1d202 333a4f403bbb "bash" 45 minutes ago Exited (0) 33 minutes ago unruffled_cori
68af55567e65 014d1198c8c8 "hello" About an hour ago Exited (0) About an hour ago charming_faraday
# to restart a container and attach the console
amd-edf:~$ sudo docker start unruffled_cori
amd-edf:~$ sudo docker attach unruffled_cori
bash-5.2# |
You can follow the same steps as mentioned in the on-target software application development and kernel module development tutorials above for building inside the container.
Note: You might want to add bind mounts using -v when starting the container to map directories from the host OS to the container.
Software Application Development using SDK
An SDK for cross-development on an x86 host is useful when a user does not have access to a board for on-target development. Depending on the project, it can speed up the build task compared to building on-target. The downside is that the content of the SDK is fixed and it is not possible to install additional dev packages or utilities into an existing SDK whereas on target, packages can be installed from the package feed.
SDK installation
The EDF Application and Machine SDK script amd-edf-glibc-x86_64-meta-edf-app-sdk-cortexa72-cortexa53-amd-cortexa78-mali-common-toolchain-<release>-<stamp>.sh which can be downloaded from the Downloads and Release Notes is installed as follows.
Once installed, the SDK can be set up by sourcing the environment setup script. This will set all of the required environment variables (CC, CXX, LD, etc.) required for cross compilation of projects.
Note: If you start a new shell, you need to source the env setup script again in the new shell.
Install Toolchain on host machine:
A newly downloaded SDK needs to be made executable so it can be run. The following “chmod” line only needs to be run first after a fresh download.
When installing the SDK, it will ask you where you want the SDK to be installed. Make sure to choose a location on your system to which you have write permission. The following example uses “/scratch/sdk” as the install location; this location might or might not exist on your host system.
Once an SDK is installed to a specific location, it cannot be simply moved; it has been set up to work from that specific location. If you wish to move the SDK to a different location, re-run the install script specifying the new location.
[/scratch]$ chmod +x amd-edf-glibc-x86_64-meta-edf-app-sdk-cortexa72-cortexa53-amd-cortexa78-mali-common-toolchain-25.05+release-S05062043.sh
[/scratch]$ ./amd-edf-glibc-x86_64-meta-edf-app-sdk-cortexa72-cortexa53-amd-cortexa78-mali-common-toolchain-25.05+release-S05062043.sh
AMD Embedded Development Framework Linux distribution SDK installer version 25.05+release-S05062043
===================================================================================================
Enter target directory for SDK (default: /opt/amd-edf/25.05+release-S05062043): sdk
You are about to install the SDK to "/scratch/sdk". Proceed [Y/n]?
Extracting SDK.................................................................................................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /scratch/sdk/environment-setup-cortexa72-cortexa53-amd-linux
[/scratch]$ source sdk/environment-setup-cortexa72-cortexa53-amd-linux
[/scratch]$ export PS1="${PS1}sdk> "
[/scratch/]$ sdk> If you see the below message when installing the SDK or when sourcing the environment setup script, run 'unset LD_LIBRARY_PATH' as stated in the message and rerun the command.
Your environment is misconfigured, you probably need to 'unset LD_LIBRARY_PATH'
but please check why this was set in the first place and that it's safe to unset.
The SDK will not operate correctly in most cases when LD_LIBRARY_PATH is set.
For more references see:Shared Libraries
Why LD_LIBRARY_PATH is bad
Software application development
We can use the same example code as shown in the on-target compilation tutorial.
Note: You have to pass --host=aarch64 to the configure script to indicate that you are cross-compiling for aarch64
Cross compile example code:
[/scratch]$ sdk> wget https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz
--2025-05-08 01:22:40-- https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz
Resolving ftp.gnu.org (ftp.gnu.org)... 209.51.188.20, 2001:470:142:3::b
Connecting to ftp.gnu.org (ftp.gnu.org)|209.51.188.20|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1017723 (994K) [application/x-gzip]
Saving to: ‘hello-2.12.tar.gz’
hello-2.12.tar.gz 100%[==================================================================================================================>] 993.87K 133KB/s in 6.4s
2025-05-08 01:22:48 (154 KB/s) - ‘hello-2.12.tar.gz’ saved [1017723/1017723]
[/scratch]$ sdk> tar -xf hello-2.12.tar.gz
[/scratch]$ sdk> cd hello-2.12/
[hello-2.12]$ sdk>
[hello-2.12]$ sdk> ./configure --host=aarch64
[snip]
[hello-2.12]$ sdk> make -j12
[snip]
[hello-2.12]$ sdk> file hello
hello: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=dbe295a872b578a639907fa8ec500e77aea5bc46, for GNU/Linux 5.15.0, with debug_info, not stripped |
The resulting binary can then be copied over to the target system and run.
Note: Use the IP address assigned to your board in the scp command below. You can query the IP address by running ip a s on the target
[hello-2.12]$ sdk> scp hello amd-edf@192.168.1.214:~/
[snip] |
On the target run the compiled binary
amd-edf:~$ ./hello
Hello, world! |
Kernel module development
The steps are largely analogous to the steps provided for on-target kernel module development.
Note: make sure you source the SDK environment script before you start
First, we prepare the kernel sources.
[/scratch]$ sdk> export KERNEL_SRC=$OECORE_TARGET_SYSROOT/usr/src/kernel
[/scratch]$ sdk> cd $KERNEL_SRC
[kernel] sdk>
[kernel]$ sdk> export LOCALVERSION="-$(echo System.map* | cut -d'-' -f4)"
[kernel]$ sdk> echo $LOCALVERSION
-gf28cb5f8491a
[kernel]$ sdk> make kernelrelease
6.12.10-xilinx-gf28cb5f8491a
[kernel]$ sdk> make modules_prepare
[snip] |
Now we clone our example out-of-tree kernel module repository and build the driver module.
[kernel]$ sdk> cd /scratch
[/scratch]$ sdk> git clone https://github.com/Xilinx/hdmi21-modules
Cloning into 'hdmi21-modules'...
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 26 (delta 11), reused 26 (delta 11), pack-reused 0 (from 0)
Receiving objects: 100% (26/26), 33.72 KiB | 986.00 KiB/s, done.
Resolving deltas: 100% (11/11), done.
[/scratch]$ sdk> cd hdmi21-modules/
[hdmi21-modules]$ sdk>
[hdmi21-modules (master u=)]$ sdk> make -j8
make -C /scratch/sdk/sysroots/cortexa72-cortexa53-amd-linux/usr/src/kernel M=/scratch/hdmi21-modules O= modules
make[1]: Entering directory '/scratch/sdk/sysroots/cortexa72-cortexa53-amd-linux/usr/lib/modules/6.12.10-xilinx-gf28cb5f8491a/build'
CC [M] /scratch/hdmi21-modules/xfmc/x_vfmc.o
CC [M] /scratch/hdmi21-modules/xfmc/fmc.o
CC [M] /scratch/hdmi21-modules/xfmc/fmc74.o
CC [M] /scratch/hdmi21-modules/xfmc/fmc64.o
CC [M] /scratch/hdmi21-modules/xfmc/fmc65.o
CC [M] /scratch/hdmi21-modules/xfmc/tipower.o
CC [M] /scratch/hdmi21-modules/xfmc/idt.o
CC [M] /scratch/hdmi21-modules/xfmc/onsemi_tx.o
CC [M] /scratch/hdmi21-modules/xfmc/onsemi_rx.o
CC [M] /scratch/hdmi21-modules/xfmc/ti_tmds1204_tx.o
CC [M] /scratch/hdmi21-modules/xfmc/ti_tmds1204_rx.o
CC [M] /scratch/hdmi21-modules/xfmc/si5344.o
LD [M] /scratch/hdmi21-modules/xfmc/hdmi21-xfmc.o
MODPOST /scratch/hdmi21-modules/Module.symvers
CC [M] /scratch/hdmi21-modules/xfmc/hdmi21-xfmc.mod.o
CC [M] /scratch/hdmi21-modules/.module-common.o
LD [M] /scratch/hdmi21-modules/xfmc/hdmi21-xfmc.ko
make[1]: Leaving directory '/scratch/sdk/sysroots/cortexa72-cortexa53-amd-linux/usr/lib/modules/6.12.10-xilinx-gf28cb5f8491a/build'
[hdmi21-modules (master % u=)]$ sdk> ls xfmc/*ko
xfmc/hdmi21-xfmc.ko |
You can now copy the generated files to the target via scp.
[hdmi21-modules (master % u=)]$ sdk> scp xfmc/*.ko amd-edf@192.168.1.214:~/
hdmi21-xfmc.ko |
On the target, copy the files to the kernel module directory of the active kernel.
Note: There might be multiple subdirectories under /lib/modules for different kernel versions. Make sure you copy the files to your active kernel (run uname -r on the target) and also make sure that the version matches the version in your SDK (output of make kernelrelease on the host)
amd-edf:~$ ls *.ko
hdmi21-xfmc.ko
amd-edf:~$ mkdir -p /lib/modules/$(uname -r)/updates/xfmc
amd-edf:~$ sudo mv *.ko /lib/modules/$(uname -r)/updates/xfmc
amd-edf:~$ ls /lib/modules/$(uname -r)/updates/xfmc
hdmi21-xfmc.ko
amd-edf:~$ sudo depmod
amd-edf:~$ modinfo hdmi21-xfmc
filename: /lib/modules/6.12.10-xilinx-gf28cb5f8491a/updates/xfmc/hdmi21-xfmc.ko
description: Xilinx Vphy driver
license: GPL
license: GPL v2
description: FMC Expander driver
license: GPL v2
description: FMC74 Expander driver
license: GPL v2
description: FMC64 Expander driver
license: GPL v2
description: FMC65 Expander driver
license: GPL v2
description: TIPOWER Expander driver
license: GPL v2
description: 8T49N24x ccf driver
license: GPL v2
description: ONSEMI NB7NQ621M cable redriver driver
license: GPL v2
description: ONSEMI NB7NQ621M cable redriver driver
license: GPL v2
description: TI TMDS1204 retimer chip driver
license: GPL v2
description: TI TMDS1204 retimer chip driver
license: GPL
description: Si5344 driver
alias: i2c:IDT
alias: i2c:FMC74
alias: of:N*T*CvfmcC*
alias: of:N*T*Cvfmc
alias: i2c:TIPOWER
alias: i2c:expander-fmc64
alias: of:N*T*Cti_tmds1204,ti_tmds1204-rxC*
alias: of:N*T*Cti_tmds1204,ti_tmds1204-rx
alias: i2c:ti_tmds1204tx
alias: i2c:onsemitx
alias: of:N*T*Consemi,onsemi-rxC*
alias: of:N*T*Consemi,onsemi-rx
alias: i2c:FMC
alias: of:N*T*Cti_tmds1204,ti_tmds1204-txC*
alias: of:N*T*Cti_tmds1204,ti_tmds1204-tx
alias: of:N*T*Cexpander-fmcC*
alias: of:N*T*Cexpander-fmc
alias: i2c:si5344
alias: of:N*T*Cexpander-fmc65C*
alias: of:N*T*Cexpander-fmc65
alias: i2c:onsemirx
alias: of:N*T*Csi5344C*
alias: of:N*T*Csi5344
alias: of:N*T*Cexpander-fmc74C*
alias: of:N*T*Cexpander-fmc74
alias: of:N*T*Cexpander-fmc64C*
alias: of:N*T*Cexpander-fmc64
alias: i2c:ti_tmds1204rx
alias: of:N*T*Cexpander-tipowerC*
alias: of:N*T*Cexpander-tipower
alias: of:N*T*Cidt,idt8t49C*
alias: of:N*T*Cidt,idt8t49
alias: i2c:expander-fmc65
alias: of:N*T*Consemi,onsemi-txC*
alias: of:N*T*Consemi,onsemi-tx
depends:
name: hdmi21_xfmc
vermagic: 6.12.10-xilinx-gf28cb5f8491a SMP mod_unload aarch64 |
QEMU based development
The SDK also includes QEMU and QEMU helper scripts that enable full system emulation. The same boot artifacts and disk image that are used to boot on hardware can also be used to boot on QEMU with very minor tweaks. The QEMU system emulates hybrid OSPI + UFS boot mode.
The following tutorial shows how to boot the prebuilt images on QEMU using the runqemu helper script from the installed SDK.
Note: make sure you source the SDK environment script before you start.
First download the prebuilt QEMU prebuilt artifacts tar ball. The bundle consists of the following files that QEMU and the runqemu helper script expect:
VEK385 EA - AMD Vivado™ Design Suite 2025.1 EA
The QEMU prebuilt artifacts tar ball can be downloaded from the VEK385 lounge [versal2-vek385-qemu-prebuilt_04121214.tar.gz]
Update for EDF 25.05 - AMD Vivado™ Design Suite 2025.1
This flow is supported as an on-line flow
Prior release (EA) - The Package feed required for this section was only supported as an offline flow for EA. see Accessing the package feed without a on-line network connection
artifact | file or directory name |
|---|---|
disk image | VEK385 - edf-linux-disk-image-amd-cortexa78-mali-common.rootfs.wic.ufs |
boot image | VEK385 - BOOT-versal2-vek385-sdt-seg.bin |
QEMU device tree folder | qemu-hw-devicetrees/ |
runqemu configuration file | qemuboot.conf |
ospi image (VEK385) | VEK385 - qemu-ospi-versal2-vek385-sdt-seg.bin |
VEK385 EA - AMD EDF 25.05, AMD Vivado™ Design Suite 2025.1
UFS is used as secondary boot medium in QEMU, but the hardware images use SD as secondary boot medium. The next major release is scheduled to use UFS as secondary boot medium for the hardware images.
The SD card wic image (.wic) is using a sector size of 512 bytes whereas the UFS image (.wic.ufs) is using a sector size of 4096 bytes. Therefore, these image are not interchangeable. However they are functionally equivalent.
Change directory into your lounge download folder, extract the QEMU prebuilt artifacts tar ball, and run the following command to start your QEMU session:
Note - Example below is for VEK385, change the filename “versal-2ve-2vm-vek385-sdt-qemu-prebuilt” to the correct filename for the targe board / architecture of your device.
/scratch $ tar -xf versal-2ve-2vm-vek385-sdt-qemu-prebuilt_<timestamp>.tar.gz
/scratch $ cd versal-2ve-2vm-vek385-sdt-qemu-prebuilt_<timestamp>/
/scratch/versal2-vek385-qemu-prebuilt $ runqemu combined.qemuboot.conf nographic slirp
[snip] |
This command will launch three separate QEMU instances:
PMXC: this runs PLM
ASU: this runs ASU firmware
APU: this runs various software payloads and ultimately boots into Linux
Each executes their respective payloads. At the end of the boot process you will land at the Linux login prompt. Upon first boot, Linux requires a password to be set for the default user account.
AMD EDF 25.05 (VEK385 EA) - AMD Vivado™ Design Suite 2025.1 and later
Default username 'amd-edf'
To exit your QEMU session, press Ctrl + A followed by X.
Related Links
Trademarks
Yocto Project and all related marks and logos are trademarks of The Linux Foundation. This website is not, in any way, endorsed by the Yocto Project or The Linux Foundation.
Linux® is the registered trademark of Linus Torvalds in the U.S. and other countries.
© 2025 Advanced Micro Devices, Inc. Privacy Policy