I’m long overdue for an updated version of my AMD FPGA tools install tutorial, and now that I’ve been using the 2025 versions of them for a bit and I’ve settled into the differences in life after upgrading from Ubuntu 22.04 to Ubuntu 24.04, I’m finally getting caught up.
I decided to cover both versions 2025.1 and 2025.2 in the same write-up here since there are only a couple of minor differences which I will call out as appropriate. Also, I’m only covering PetaLinux for the embedded Linux development aspect of the AMD tools because it’s replacement, EDF, needs it’s own write-up as the workflow has changed quite a bit.
It’s also worth noting that PetaLinux is being phased out and will be deprecated with the 2026.2 version of the AMD FPGA tools based on the info message displayed when sourcing the PetaLinux tools to your environment:
I mention this here because personally I wouldn’t start any long term project using PetaLinux at this point. Thankfully EDF is also Yocto based so switching *shouldn’t* be too painful (we’ll see how that goes in my next write-up).
If this is your first time working with and installing the AMD FPGA tools, just know that versions of the tools can’t be mixed within the same project. For example, if you create a hardware design in Vivado 2025.2, you must then use Vitis 2025.2 and/or PetaLinux 2025.2 to develop the corresponding software design.
So even though I’m covering both installations of 2025.1 and 2025.2 here, make sure each of your projects use the same version throughout the design process.
Linux Environment Prep
The first step in prepping the environment for any of the AMD FPGA tools is changing the default shell to Bash. This process is a bit different in Ubuntu 24.04 compared to the past versions I’ve written tutorials for (22.04, 20.04, 18.04…).
It appears from the change logs that Debian has deliberately moved away from using the Debian package configuration system, debconf. Which means the dpkg-reconfigure command no longer works to change shells in Ubuntu.
The annoying thing though is that the dpkg commands all still appear to be available in Ubuntu 24.04 and run without throwing errors. However, the only reason they don’t throw any errors is because they aren’t actually doing anything. So when I initially installed Ubuntu 24.04, I thought I had switched shells using the old dpkg command:
~$ sudo dpkg-reconfigure dash
Only to be thoroughly confused when I went to run Vivado/Vitis for the first time after installing it and got the error message that I needed to change my shell to Bash.
Anyways, with that mini rant out of the way, there are a few different ways the default user shell can be changed in 24.04. I personally find the change shell, chsh, command to be the most straightforward:
~$ chsh
Enter your user password when prompted then specify the path to the Bash shell. The default shell for a clean install of Ubuntu 24.04 is Zsh which is what the chsh command will show as the current default when it prompts you to enter the path for the new shell to use:
Changing the login shell for
Enter the new value, or press ENTER for the default
Login Shell [/usr/bin/zsh]: /bin/bash
Alternately, creating a symbolic link to bash for your user shell will also get the job done:
~$ TARGET=”$(command -v bash)”
~$ LINK=”/bin/sh”
~$ sudo ln -sf “$TARGET” “$LINK”
With the shell changed the next step is to add the 32-bit i386 architecture since Vitis and PetaLinux still require some 32-bit libraries:
~$ sudo dpkg –add-architecture i386
~$ sudo apt update
After running an update, install the rest of the required packages for Vivado/Vitis and PetaLinux (there are a few new ones here for Ubuntu 24.04 compared to past versions):
~$ sudo apt-get install gparted gedit
~$ sudo apt-get install xinetd gawk gcc net-tools libncurses6 libncurses6-dev openssl libssl-dev flex bison xterm autoconf libtool texinfo
~$ sudo apt-get install iproute2 make libselinux1 wget diffstat chrpath socat tar unzip gzip tofrodos libftdi1 libftdi1-2
~$ sudo apt-get install debianutils iputils-ping libsdl1.2-dev cpio tftpd-hpa gnupg tree openssh-server
~$ sudo apt-get install gcc-multilib build-essential automake screen putty pax g++ libstdc++6 cpp
~$ sudo apt-get install python3 python3-pip python3-git python3-jinja2 python3-pexpect
~$ sudo apt-get install zlib1g-dev haveged perl xvfb xz-utils
~$ sudo apt-get install liberror-perl mtd-utils xtrans-dev libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev
~$ sudo apt-get install util-linux sysvinit-utils cython3 google-perftools patch diffutils ocl-icd-libopencl1 opencl-headers ocl-icd-opencl-dev
~$ sudo apt-get install libgcrypt20-dev libgpg-error-dev libsecret-1-dev
~$ sudo apt-get install zlib1g:i386 libfontconfig1:i386 libx11-6:i386 libxext6:i386 libxrender1:i386 libsm6:i386 libstdc++6:i386 libgtk2.0-0t64:i386 libncurses6:i386
~$ sudo apt-get install libnspr4-dev libnss3-dev gir1.2-glib-2.0-dev libdeflate-dev libgdk-pixbuf-2.0-dev libgdk-pixbuf-xlib-2.0-0 libgdk-pixbuf-xlib-2.0-dev libjbig-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev liblerc-dev liblzma-dev libpng-dev libpng-tools libsharpyuv-dev libtiff-dev libtiffxx6 libwebp-dev libwebpdecoder3 libzstd-dev
~$ sudo apt-get install bzip2-doc gir1.2-freedesktop-dev libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev libbrotli-dev libbz2-dev libcairo2-dev libdatrie-dev libegl1-mesa-dev libepoxy-dev libfontconfig-dev libfreetype-dev libfribidi-dev libgraphite2-dev libgtk-3-dev libharfbuzz-cairo0 libharfbuzz-dev libharfbuzz-subset0 libpango1.0-dev libpixman-1-dev libthai-dev libxcb-shm0-dev libxcomposite-dev libxdamage-dev libxft-dev libxtst-dev pango1.0-tools wayland-protocols
Now I have tested/run both the 2025.1 and 2025.2 versions of the AMD FPGA tools on Ubuntu 22.04 as well. So for anyone reading this that might still be using 22.04 (I don’t blame you, 24.04 has been an adjustment), here are the package dependencies you’ll need:
~$ sudo apt-get install gparted
~$ sudo apt-get install xinetd gawk gcc net-tools ncurses-dev openssl openssl-devel libssl-dev flex bison xterm autoconf libtool texinfo
~$ sudo apt-get install iproute2 make tftpd libselinux1 wget diffstat chrpath socat tar unzip gzip tofrodos lsb libftdi1 libftdi1-2
~$ sudo apt-get install debianutils iputils-ping libegl1-mesa libsdl1.2-dev cpio tftpd-hpa gnupg tree openssh-server
~$ sudo apt-get install gcc-multilib build-essential automake screen putty pax g++ libstdc++6 cpp
~$ sudo apt-get install python3 python3-pip python3-git python3-jinja2 python3-pexpect
~$ sudo apt-get install zlib1g-dev zlib1g:i386 haveged perl xvfb xz-utils
~$ sudo apt-get install libncurses5 libncurses5-dev libncursesw5:amd64 libncursesw5-dev libncurses5:i386 libtinfo5
~$ sudo apt-get install lib32stdc++6 libgtk2.0-0:i386 libfontconfig1:i386 libx11-6:i386 libxext6:i386 libxrender1:i386 libsm6:i386
~$ sudo apt-get install liberror-perl mtd-utils xtrans-dev libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev
~$ sudo apt-get install util-linux sysvinit-utils cython3 google-perftools patch diffutils ocl-icd-libopencl1 opencl-headers ocl-icd-opencl-dev
~$ sudo apt-get install libstdc++6:i386 dpkg-dev:i386
~$ sudo apt-get install libgcrypt20-dev libgpg-error-dev libsecret-1-dev
Next, if you haven’t done so already, a TFTP server needs to be created for PetaLinux to use. Create the TFTP service in /etc/xinetd.d using your text editor of choice:
~$ sudo gnome-text-editor /etc/xinetd.d/tftp
And give it the following specs:
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
Create the directory for the boot files to be pulled from during the TFTP boot process and give it the appropriate permissions. Then reboot network services for all the changes to take affect in the system:
~$ sudo mkdir /tftpboot
~$ sudo chmod -R 777 /tftpboot
~$ sudo chown -R nobody /tftpboot
~$ sudo /etc/init.d/xinetd stop
~$ sudo /etc/init.d/xinetd start
The final bit of environment prep for Ubuntu prior to installing/using the AMD FPGA tools is to add your user to the dialout group so the USB ports can be accessed by the IDEs:
~$ sudo adduser $USER dialout
This is only necessary on fresh installs on Ubuntu and not a step that needs to be repeated if it was already done in the past.
Run AMD Installer for Vivado & Vitis
AMD still provides three versions of their installer on their Downloads page: a Windows self-extracting web installer, Linux self-extracting web installer, and a single file download (SFD) of the the full installer.
My experience and therefore option has not changed that while the SFD installer is quite the space hog on your hard drive, it is still the preferable installer to use (and you can delete the installer or move it to an external drive once you have everything installed so you can reclaim the space it uses). The self-extracting web installers still seem to get blocked by most company firewalls and are sensitive to network connection hiccups.
Once downloaded, extract the zip file and change directories into the top level of the SFD. The installer is called with the xsetup script.
2025.1:
~$ cd ./Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.1_0530_0145/
~$ sudo ./xsetup
2025.2:
~$ cd ./Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.2_1114_2157
~/Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.2_1114_2157$ sudo ./xsetup
Something new in both 2025 versions of the installer is that it will encourage you to install somewhere besides the root directory / that doesn’t require superuser privileges to install.
I didn’t have the patience to try out an installation somewhere in my user directory (/home/$USER) so I went ahead and ran the installer with root privileges to install it in the traditional default location in the root directory: /tools.
When I have some spare time I’ll try installing it in my user’s home directory, my main concern is with how the IDEs will access hardware via the USB ports. Because there wasn’t any clear documentation with how those permissions would be handled when sand-boxed by the default permissions in the user home directory (although I will fully admit that I may just not fully understand how the default permissions in Ubuntu work).
The first selection in the installer is which of the tools to install. Selecting Vitis will automatically install everything else (Vivado, Doc Nav, etc.). If you want to install the Vitis IDE alone, select Vitis Embedded Development.
Unless you’re sure you only need a subset of the tools and/or you’re pressed for hard drive space, I’d recommend installing all of the tools. However this installer can be rerun at any time to install other tools as needed.
Note: there is a slight difference here with the 2025.1 installer, but it only applies to PetaLinux which I will cover in the next section.
When installing the Vitis Unified Platform (selecting Vitis in the previous window) even though it’s the superset selection, the next window will allow another change to choose a subset of tools to install. Again, I know I’m going to use Vitis, Vivado, HLS, PDM, and Doc Nav so I’m leaving them all selected.
The Vitis IP cache includes things like all of the example application and platform components in the example library in the Vitis IDE. These aren’t downloaded until used by default but selecting Vitis IP cache here will download them all in the installation process.
Aside from the design tools, the libraries for the part families can be individually selected for installation. Personally, I don’t have any projects using Versal or Alevo parts so I unchecked those for installation.
Once the desired tools and parts have been selected for installation, the next page is the standard acknowledgement to all the terms & conditions of using the AMD FPGA tools. You’ll need to check the “I Agree” box for each before being able to move to the next window.
The final window is where the target installation directory is specified. Like I mentioned previously, I still prefer to install the AMD FPGA tools in the historically default location of /tools/Xilinx. Not to mention, my muscle memory at this point for typing this path to source the tools to my environment is hard-coded so I don’t have a choice haha.
After specifying the target installation directory, the final window shows you a summary of the selected installation options and give you one more chance to go back before kicking off the installation:
Once kicking off the installation, go grab a coffee or a snack. The installation with the SFD installer isn’t too terribly long since it doesn’t need to wait for each file to download as it needs it, but overall the installation time will depend on your computer specs (and internet speed if using one of the self-extracting web installers).
My trusty old Intel i9 with 32GB of RAM took about 25 minutes to install the full AMD FPGA toolset.
Even though I covered all of the installation dependencies in the previous section, I always like to run the script that AMD provides to check for and install any missing dependencies just in case.
2025.1:
~$ sudo ./Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.1_0530_0145/installLibs.sh
2025.2:
~$ sudo ./Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.2_1114_2157/installLibs.sh
After double-checking all of the required libraries have been installed, the final step after running the installer is to run the script for the device cable drivers. This includes things like the FTDI drivers for programming FPGA devices via USB (JTAG via USB).
2025.1:
~$ cd /tools/Xilinx/2025.1/data/xicom/cable_drivers/lin64/install_script/install_drivers
/tools/Xilinx/2025.1/data/xicom/cable_drivers/lin64/install_script/install_drivers$ sudo ./install_drivers
2025.2:
~$ cd /tools/Xilinx/2025.2/data/xicom/cable_drivers/lin64/install_script/install_drivers
/tools/Xilinx/2025.2/data/xicom/cable_drivers/lin64/install_script/install_drivers$ sudo ./install_drivers
The cable driver script lives in a few different places throughout the installation directory of the AMD FPGA tools, but they all are linked back to the script in the location specified above.
Run AMD Installer for PetaLinux
The Yocto-based PetaLinux tools for embedded Linux development on AMD FPGAs has always had a separate installation process. That process in 2025.1 deviated from the previous manual process of running a separately downloaded installer from the command line to being integrated into the main installer used to for the rest of the IDEs.
Unfortunately this method only stuck around for version 2025.1, which is a shame since I think it’s much more clean an intuitive (especially for users new to the AMD platform).
To install PetaLinux version 2025.1, launch the installer again:
~$ cd ./Downloads/FPGAs_AdaptiveSoCs_Unified_SDI_2025.1_0530_0145/
~$ sudo ./xsetup
If you had been following the previous steps in 2025.1, you might have noticed that PetaLinux was an option that didn’t appear in the screenshots from my install steps of 2025.2.
While I did talk about how selecting Vitis in this screen was a superset that included the rest of the tools in this list, the one exception was PetaLinux. The installer still has to be run a second time to install PetaLinux explicitly.
Again, to save some hard drive space, the installer will give you the option to only install the layers and libraries for specific platforms. The full installation of PetaLinux for all supported platforms is just under 4GB of disk space so I just installed all.
Again, you’ll need to agree to the standard acknowledgement to all the terms & conditions of using the PetaLinux tools:
Just like with the rest of the tools, the final screen before the install selection summary is to specify the target installation directory. I personally like to install PetaLinux in the same directory with the corresponding version of Vitis and Vivado (in my case: /tools/Xilinx/2025.1).
This is not a hard requirement, you can select differently. I find it helpful since I end up with several versions of the AMD FPGA tools installed at once.
Confirm the installation selection summary and kick off the installation summary:
This installation is a bit quicker, only taking about 15 minutes on my computer (again this is with the SFD installer so everything the installer needs is already available locally).
Once the PetaLinux installation is complete, a pop up will appear with the link to download board support packages (BSPs) for AMD’s development boards. Which I have to say is a great touch, I’m disgruntled this install method of PetaLinux didn’t stick around for 2025.2.
Like I mentioned at the beginning of this section, traditionally PetaLinux has always had a separate installer available under the Embedded Software tab of the AMD Downloads page. So for 2025.2 this is the installer to use for PetaLinux:
After downloading this installer give it the appropriate permissions to run:
~$ sudo chmod 777 ./Downloads/petalinux-v2025.2-11160223-installer.run
Before running the install though, the target installation directory has to be created manually and given the appropriate permissions for the PetaLinux tools to operate:
~$ sudo mkdir -p /tools/Xilinx/2025.2/PetaLinux/
~$ sudo chmod -R 755 /tools/Xilinx/2025.2/PetaLinux/
~$ sudo chown -R whitney:whitney /tools/Xilinx/2025.2/PetaLinux/
Then the PetaLinux installer can be run with the target installation directory specified using the –dir flag:
~$ ./Downloads/petalinux-v2025.2-11160223-installer.run –dir /tools/Xilinx/2025.2/PetaLinux/
It is worth noting that there is a version of the 2025.1 installer available on the AMD Downloads page as well, so theoretically it could be installed using this same manual method as 2025.2. However it didn’t work properly for me and I didn’t take the time to troubleshoot it since the main 2025.1 Vitis installer offered such an easy alternative for installing it.
Workaround for libtinfo5 on Ubuntu 24.04
For those eagle-eyed readers, you might have noticed that the libtinfo5 package was missing from the dependency installation above for Ubuntu 24.04 compared to the Ubuntu 22.04 dependency installation list. This is because libtinfo5 has upgraded to its next version in 24.04.
Unfortunately, PetaLinux is not compatible with the upgraded version of libtinfo so while both the 2025.1 and 2025.2 versions will install without issue, they will throw an error that libtinfo5 is missing when you try to build a project.
Note: this is why PetaLinux versions 2025.1 and 2025.2 are not officially supported on Ubuntu 24.04, they are only officially supported on Ubuntu 22.04.
To work around this, download the package manually using wget and install it separately:
$ sudo apt update
$ wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
$ sudo apt install ./libtinfo5_6.3-2ubuntu0.1_amd64.deb
While this solved the missing dependency issue, attempting to run another build on my test PetaLinux project brought up its next snag with Ubuntu 24.04:
Specifically this is with new security features in Ubuntu 24.04 where the kernel has new restrictions around unprivileged users access to certain functions. Initially I thought simply reinstalling PetaLinux in my user’s home directory would solve this issue but it didn’t.
Unfortunately the only workaround I found was to disable the kernel function that restricts unprivileged users because attempting to run PetaLinux commands with with superuser privileges (sudo) seemed like an even worse idea.
There are two ways to do this, one way that’s not persistent and reset about rebooting the system:
~$ sudo su
~$ echo 0 > /proc/sys/kernel/apparmor_restrict_unprivileged_userns
~$ exit
And the other way that is persistent and has to be manually changed back:
~$ sudo vi /etc/sysctl.d/60-apparmor-namespace.conf
Then add the following rule before saving and closing the file:
kernel.apparmor_restrict_unprivileged_userns=0
I’ve been opting to use the non-persistent option since it is the safer option from a security standpoint and I already know I won’t be using PetaLinux for much longer as its being deprecated in the immediate upcoming releases.
Finally, I don’t know why, but every single time I run the first build of the first project after a fresh install of PetaLinux it errors out complaining it can’t reach the URLs of the mirrors for downloading various package libraries. Every. Single. Time.
Luckily the fix is super simple: just run the build again. I have yet to figure out why this happens. But again, it doesn’t seem like it’s worth the effort to track this issue down since this may be the last version of PetaLinux I’ll be using.
Hopefully that covers everything you might need to get the AMD FPGA tools versions 2025.1 and 2025.2 up and running on Ubuntu. Let me know if I missed anything in the comments.