Bar
SpaceWire UK
Specialist providers of VHDL Intellectual Property & Design Services
BarBarBarBar
Tutorial
Missing Image!
Part 31 - PetaLinux 2024.2 to 2025.2 migration

Introduction

This tutorial details the steps required to migrate the zedboard_linux project from PetaLinux 2024.2 to PetaLinux 2025.2. This migration shall use the same approach as the last one. Create a brand new project from scratch and then integrate the absent & differing sources into it. By using this approach a better understanding of what has actually changed under the hood should be achieved.

Worth taking a look at the OS support vs. PetaLinux version at this point. The Yes & No refers to what Xilinx officially support. A green marker indicates the progress this tutorial is making towards bumping both the OS & PetaLinux to something later.

UbuntuPetaLinux
OS versionCode nameRelease dateStandard support untilPetaLinux 2021.2PetaLinux 2022.2PetaLinux 2023.2PetaLinux 2024.2PetaLinux 2025.2
Ubuntu 16.04 LTSXenial Xerus21 Apr 201630 Apr 2021YesNoNoNoNo
Ubuntu 18.04 LTSBionic Beaver26 Apr 201831 May 2023YesYesYesNoNo
Ubuntu 20.04 LTSFocal Fossa23 Apr 202029 May 2025YesYesYesYesNo (this)
Ubuntu 22.04 LTSJammy Jellyfish21 Apr 202201 Jun 2027NoNoYesYesYes
Ubuntu 24.04 LTSNoble Numbat25 Apr 202431 May 2029NoNoNoNoNo

Aims

The aims of this tutorial are as follows :-

    Part 1 - Setup environment

    1. Pre-requisites

    Part 2 - Move Zedboard Linux project from 2024.2 to 2025.2

    1. Create PetaLinux project
    2. Add hardware platform
    3. Align PetaLinux - 1
    4. Check GIT status
    5. Align PetaLinux - 2
    6. Bump version

    Part 3 - Build & package PetaLinux

    1. Build PetaLinux
    2. Package PetaLinux

    Part 4 - Hardware Deployment

    1. Copy files to SD-Card
    2. Reload OS into Zedboard PetaLinux v20.0

    Part 5 - Check everything is working as expected

    1. Check BOOT sequence
    2. Check Apache2, PHP & CGI
    3. Check SQLite
    4. Check phpLiteAdmin
    5. Check HDMI
    6. Check Userspace I/O

    Part 9 - Revision Control

    1. Commit new & updated files
    2. Create production release

    Part 10 - Hardware Deployment

    1. Copy BOOT files to the SD-Card
    2. Reload the Operating System using the Webserver

    Part 11 - Check everything is working as expected

    1. Final checks

    Part 12 - Final resulting build file(s)

    1. Resulting BOOT files
    #### Part 1 - Setup environment ####

    1. Pre-requisites

    Starting from this point is possible but requires a few pre-requisites.
    #### Part 2 - Move Zedboard Linux project from 2024.2 to 2025.2 ####

    2. Create PetaLinux project

    Create a brand new PetaLinux project using the 2025.2 toolchain.
    steve@Desktop:~/swuk_tutorial$ cd zedboard_linux/os
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os$ rm -rf petalinux
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os$ petalinux-create project --template zynq --name petalinux
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os$ cd petalinux

    3. Add hardware platform

    Configure the PetaLinux project to use the exported hardware platform from the Zedboard Video TPG HDMI Vivado project.

    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ sdtgen
    sdtgen% set_dt_param -dir /tmp/dts -xsa ~/Documents/swuk_tutorial/hardware/zedboard_video_tpg_hdmi_v1.0.xsa
    sdtgen% generate_sdt
    sdtgen% exit
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ rm -rf .Xil
    Two options now exist to set a fixed IP address :-
    1. Router sets the IP address based on the MAC address.
    2. PetaLinux sets its own IP address.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ petalinux-config --get-hw-description=/tmp/dts
    Option 1 - Set a fixed MAC address & let router assign a fixed IP Address

    When the PetaLinux System Configuration menu appears :-

    Select : Subsystem Hardware Settings  ---> Ethernet Settings  ---> Ethernet MAC address
    Change: ff:ff:ff:ff:ff:ff
    To: 00:0A:35:00:1E:53
    Ok ---> Save ---> Ok ---> Exit ---> Exit ---> Exit ---> Exit

    Option 2 - Set a fixed IP address

    When the PetaLinux System Configuration menu appears :-

    Select : Subsystem Hardware Settings ---> Ethernet Settings ---> [ ] Obtain IP address automatically ---> Static IP address (NEW)
    Change: 192.168.0.10
    To: 192.168.2.87
    Ok ---> Save ---> Ok ---> Exit ---> Exit ---> Exit ---> Exit

    4. Align PetaLinux - 1

    Align the brand new PetaLinux (2025.2) project with the existing PetaLinux (2024.2) project.

    Add back in the (now absent) Applications & Apache configuration.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git restore project-spec/meta-user/recipes-apps
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git restore project-spec/meta-user/recipes-httpd/apache2/apache2_%.bbappend

    5. Check GIT status

    Check the GIT status.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git status -u
    On branch master
    Your branch is up to date with 'origin/master'.

    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
       modified:   .petalinux/metadata
       modified:   project-spec/configs/.statistics
       modified:   project-spec/configs/config
       modified:   project-spec/configs/configs/Kconfig
       modified:   project-spec/configs/configs/Kconfig.bootcompconfigurations
       modified:   project-spec/configs/configs/Kconfig.dtgsettings
       modified:   project-spec/configs/configs/Kconfig.linuxcompselection
       modified:   project-spec/configs/configs/Kconfig.main
       modified:   project-spec/configs/configs/Kconfig.syshw
       modified:   project-spec/configs/configs/Kconfig.yoctomachinesettings
       deleted:    project-spec/configs/flash_parts.txt
       deleted:    project-spec/configs/gen-machineconf.log.old
       deleted:    project-spec/configs/plnx_syshw_data
       modified:   project-spec/configs/rootfs_config
       modified:   project-spec/configs/rootfsconfigs/Kconfig
       modified:   project-spec/configs/rootfsconfigs/Kconfig.part
       modified:   project-spec/configs/rootfsconfigs/Kconfig.user
       modified:   project-spec/configs/rootfsconfigs/user-rootfsconfig
       deleted:    project-spec/hw-description/system.xsa
       modified:   project-spec/meta-user/conf/petalinuxbsp.conf
       modified:   project-spec/meta-user/conf/user-rootfsconfig
       modified:   project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

    Untracked files:
      (use "git add <file>..." to include in what will be committed)
       project-spec/configs/DRVLISTConfig.cmake
       project-spec/configs/configs/Kconfig.bootcompselection
       project-spec/configs/ip_drv_map.yaml
       project-spec/configs/petalinux_config.yaml
       project-spec/configs/u-boot-xlnx/config.cfg
       project-spec/hw-description/include/dt-bindings/clock/xlnx-versal-clk.h
       project-spec/hw-description/include/dt-bindings/clock/xlnx-versal-net-clk.h
       project-spec/hw-description/include/dt-bindings/clock/xlnx-versal2-clk.h
       project-spec/hw-description/include/dt-bindings/clock/xlnx-zynqmp-clk.h
       project-spec/hw-description/include/dt-bindings/dma/xlnx-zynqmp-dpdma.h
       project-spec/hw-description/include/dt-bindings/gpio/gpio.h
       project-spec/hw-description/include/dt-bindings/input/input.h
       project-spec/hw-description/include/dt-bindings/input/linux-event-codes.h
       project-spec/hw-description/include/dt-bindings/interrupt-controller/arm-gic.h
       project-spec/hw-description/include/dt-bindings/interrupt-controller/irq.h
       project-spec/hw-description/include/dt-bindings/net/mscc-phy-vsc8531.h
       project-spec/hw-description/include/dt-bindings/net/ti-dp83867.h
       project-spec/hw-description/include/dt-bindings/phy/phy.h
       project-spec/hw-description/include/dt-bindings/pinctrl/pinctrl-zynqmp.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal-net-power.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal-power.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal-regnode.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal2-power.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-zynqmp-power.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-versal-net-resets.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-versal-resets.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-versal2-resets.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-zynqmp-resets.h
       project-spec/hw-description/include/dt-bindings/thermal/thermal.h
       project-spec/hw-description/pcw.dtsi
       project-spec/hw-description/pl.dtsi
       project-spec/hw-description/skeleton.dtsi
       project-spec/hw-description/system-top.dts
       project-spec/hw-description/zynq-7000.dtsi

    no changes added to commit (use "git add" and/or "git commit -a")

    6. Align PetaLinux - 2

    Quite a few changes and movements. The files that were previously edited are as follows. These need to be carefully compared with their new counterparts.
    Examine the rootfs_config file.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git difftool project-spec/configs/rootfs_config
    The following table shows the file differences (sections of interest).

    HeadingAction changeOriginal 2024.2 rootfs_configNew 2025.2 rootfs_config
    i2c-toolsYes CONFIG_i2c-tools=y
    # CONFIG_i2c-tools-dev is not set
    # CONFIG_i2c-tools-dbg is not set
    # CONFIG_i2c-tools-misc is not set
    # CONFIG_i2c-tools is not set
    # CONFIG_i2c-tools-dev is not set
    # CONFIG_i2c-tools-dbg is not set
    # CONFIG_i2c-tools-misc is not set
    user packagesYes CONFIG_adv7511-config=y
    CONFIG_axi-gpio-zed-test=y
    CONFIG_boot-extras=y
    # CONFIG_gpio-demo is not set
    CONFIG_led-runner=y
    CONFIG_peekpoke=y
    CONFIG_peekpokecgi=y
    CONFIG_website=y



    # CONFIG_gpio-demo is not set

    # CONFIG_peekpoke is not set


    PetaLinux RootFS SettingsNo CONFIG_ADD_EXTRA_USERS="root:root;petalinux:petalinux;"
    CONFIG_CREATE_NEW_GROUPS="aie;"
    CONFIG_ADD_USERS_TO_GROUPS="petalinux:audio,video,aie,input,disk;"
    CONFIG_ADD_USERS_TO_SUDOERS="petalinux"
    CONFIG_ADD_EXTRA_USERS="root:root;petalinux::passwd-expire;"
    CONFIG_CREATE_NEW_GROUPS="aie;"
    CONFIG_ADD_USERS_TO_GROUPS="petalinux:audio,video,aie,input;"
    CONFIG_ADD_USERS_TO_SUDOERS="petalinux"


    For now just restore the 3 sections marked with Yes. Use Beyond Compare (or equivalent) to update the new file & save the changes.
    Examine the petalinuxbsp.conf file.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git difftool project-spec/meta-user/conf/petalinuxbsp.conf
    The following table shows the file differences.

    Action changeOriginal 2024.2 petalinuxbsp.confNew 2025.2 petalinuxbsp.conf
    Yes
    #
    # File .......... petalinuxbsp.conf
    # Author ........ Steve Haywood
    # Website ....... http://www.spacewire.co.uk
    # Project ....... Zedboard Linux (SpaceWire UK Tutorial)
    # Date .......... 28 Feb 2026
    # Version ....... 3.0
    # Description ...
    #   Updated to install the following :-
    # -- ntp ....... Network Time Protocol
    # -- ntpdate ... Set the date and time via NTP
    # -- ntpq ...... Standard NTP query program
    # -- sntp ...... Simple Network Time Protocol
    # -- nano ...... Text editor
    # Updated to install a LAMP style stack :-
    # -- Apache .... HTTP server
    # -- SQLite .... SQL database engine
    # -- PHP ....... Scripting language
    #
    
    #User Configuration
    
    #OE_TERMINAL = "tmux"
    
    IMAGE_INSTALL:append = " ntp ntpdate ntpq sntp nano"
    PACKAGECONFIG:append:pn-php = " apache2"
    IMAGE_INSTALL:append = " apache2 sqlite3 php-modphp"
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    #User Configuration
    
    #OE_TERMINAL = "tmux"
    
    
    
    
    


    Restore the entire file.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git restore project-spec/meta-user/conf/petalinuxbsp.conf

    Examine the user-rootfsconfig file.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git difftool project-spec/meta-user/conf/user-rootfsconfig
    The following table shows the file differences.

    Action changeOriginal 2024.2 fileNew 2025.2 file
    Yes
    #Note: Mention Each package in individual line
    #These packages will get added into rootfs menu entry
    
    CONFIG_gpio-demo
    CONFIG_peekpoke
    CONFIG_led-runner
    CONFIG_website
    CONFIG_peekpokecgi
    CONFIG_axi-gpio-zed-test
    CONFIG_adv7511-config
    CONFIG_boot-extras
    
    #Note: Mention Each package in individual line
    #These packages will get added into rootfs menu entry
    
    CONFIG_gpio-demo
    CONFIG_peekpoke
    
    
    
    
    
    
    


    File does not contain the entries for the user applications. Restore the entire file.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git restore project-spec/meta-user/conf/user-rootfsconfig

    Examine the system-user.dtsi file.

    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git difftool project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
    The following table shows the file differences.

    Action changeOriginal 2024.2 fileNew 2025.2 file
    Yes
    /*
     * File .......... system-user.dtsi
     * Author ........ Steve Haywood
     * Website ....... http://www.spacewire.co.uk
     * Project ....... Zedboard Linux (SpaceWire UK Tutorial)
     * Date .......... 29 Oct 2022
     * Version ....... 2.0
     * History .......
     *   1.0 TEMPLATE
     * Description ...
     *   Added User Space I/O (UIO) for the AXI GPIO Zed module.
     */
    
    /include/ "system-conf.dtsi"
    
    / {
        chosen
        {
          bootargs = "uio_pdrv_genirq.of_id=generic-uio";
        };
    };
    
    &axi_gpio_zed_0
    {
      #interrupt-cells = <2>;
      interrupt-controller;
      interrupts = <0 29 1>;
      compatible = "generic-uio";
    };
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    /include/ "system-conf.dtsi"
    
    / {
    
    
    
    
    };
    
    
    
    
    
    
    
    
    


    Template file. Obviously missing the entries previous added. Restore the entire file.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git restore project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

    7. Bump version

    Change the version (or revision) number for this new development, this prevents ghost (post-release, same version) builds from appearing.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ cd ../../..
    steve@Desktop:~/swuk_tutorial$ sed -i 's/19.0/20.0/g' zedboard_linux/os/petalinux/project-spec/meta-user/recipes-apps/website/files/project.txt
    Just for completeness :-

    project.txt

    Zedboard PetaLinux
    SpaceWire UK
    Steve Haywood
    20.0
    
    Direct download available here :-
    steve@Desktop:~/swuk_tutorial$ wget https://spacewire.co.uk/tutorial/shared/repos/0037/zedboard_linux/os/petalinux/project-spec/meta-user/recipes-apps/website/files/project.txt -O zedboard_linux/os/petalinux/project-spec/meta-user/recipes-apps/website/files/project.txt
    Check out the changes.
    steve@Desktop:~/swuk_tutorial$ git difftool zedboard_linux/os/petalinux/project-spec/meta-user/recipes-apps/website/files/project.txt
    #### Part 3 - Build & package PetaLinux ####

    8. Build PetaLinux

    Attempt to build the new 2025.2 PetaLinux project.
    steve@Desktop:~/swuk_tutorial$ cd zedboard_linux/os/petalinux
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ swuk_petalinux-build
    1st warning encountered :-
    [WARNING] The PetaLinux toolset is scheduled for deprecation in the 2026.2 release. Users are advised to adopt AMD EDF and its Yocto Project based workflows.
    1st error encountered :-
    NOTE: Tasks Summary: Attempted 6749 tasks of which 5475 didn't need to be rerun and all succeeded.

    Summary: There were 5 WARNING messages.
    Summary: There were 2 ERROR messages, returning a non-zero exit code.
    [ERROR] Command bitbake petalinux-image-minimal failed
    Scrolling back up the Terminal shows the errors are caused by Fetcher failure's.

    Simply restart the build at this stage.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ swuk_petalinux-build
    All good!

    9. Package PetaLinux

    Package PetaLinux to produce the boot image BOOT.BIN, this will include the first stage boot loader zynq_fsbl.elf, the programmable logic system.bit, the Linux boot loader u-boot.elf and the device tree blob system.dtb.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --uboot images/linux/u-boot.elf
    #### Part 4 - Hardware Deployment ####

    10. Copy files to SD-Card

    Upload the newly created PetaLinux Boot & OS files.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ swuk_ssh 192.168.2.87
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ sshpass -p petalinux ssh -t petalinux@192.168.2.87 "mkdir /media/sd-mmcblk0p1/petalinux/v20.0"
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ sshpass -p petalinux scp /tftpboot/{BOOT.BIN,boot.scr,image.ub} petalinux@192.168.2.87:/media/sd-mmcblk0p1/petalinux/v20.0

    11. Reload OS into Zedboard PetaLinux v20.0

    Access the webserver running on the Zedboard using a browser pointing at the Zedboard's IP address (192.168.2.87).

    Select System from the menu bar. Do a "Shift-Refresh" (Hard Reset) to clear the cache & reload the page (use Shift + Reload Button or Ctrl + Shift + R).

    Select v20.0 from the Reload Operating System drop-down in an attempt to change the Operating System in use from the current v19.0 to the newly created v20.0. Missing Image!
    #### Part 5 - Check everything is working as expected ####

    12. Check BOOT sequence

    Use the Debug terminal to monitor the boot sequence. All being well it should result in the PetaLinux 2024.2 release tag followed by a login prompt.
    ::
    ::
    PetaLinux 2025.2+release-S11151021 petalinux ttyPS0

    petalinux login:
    Looks good!

    13. Check Apache2, PHP & CGI

    After the Operating System reload sequence has finished the System Information & Operating System / Firmware Load page should be reloaded. This page in itself checks the following three points :-
    1. The Apache2 server is up and running.
    2. The PHP interpreter is working.
    3. The CGI binaries are operating as expected.
    Take a look :- Missing Image! Looks good! The Apache2 webserver is up & running, the PHP interpreter is working fine & the CGI is firing properly.

    14. Check SQLite

    Select SQLite Basic Test from the Misc menu to see if the SQLite service is working. Missing Image! All good! The SQLite service is up & running and the test.db database held in the database directory on the SD-Card has been read successfully.

    15. Check phpLiteAdmin

    Select PHP Lite Admin from the Misc menu to see if the phpLiteAdmin webpage is being served. Missing Image! Looking good! Login with the default password admin. Missing Image! All good! The phpLiteAdmin webpage is being served and shows the test.db database held in the database directory on the SD-Card.

    16. Check HDMI

    Check the HDMI video output is still working OK. For this the adv7511-config auto-start application must have fired and configuration via the CGI peek & poke binaries must work.

    Select Peek & Poke from the menu bar.

    Select zedboard_video_tpg_hdmi from the Configuration drop-down in an attempt to load the configuration file from the SD-Card.

    Click on Poke All to setup the Zedboard Video TPG HDMI registers to output video via HDMI.



    All being well the monitor should fire into life with the test pattern :-



    All good!

    17. Check Userspace I/O

    Check to see if the Userspace I/O driver is still operational by running the previously created axi-gpio-zed-test application from within the Debug terminal.
    petalinux:~$ sudo axi-gpio-zed-test
    All being well the application should run and display the following :-
    Simple User Space device driver example with interrupts

    Device in use ... /dev/uio0
    Memory size ..... 65536 (obtained from /sys/class/uio/uio0/maps/map0/size)

    Use the buttons to control the LED's :-

    Centre - Reset LED's to 00111100
    Left   - Rotate LED's left
    Right  - Rotate LED's right
    Up     - Increase illuminated LED's
    Down   - Decrease illuminated LED's

    Press Ctrl-C to quit application
    Pressing a Push Button should perform the action stated and display the GPIO3 data register, for example :-
    Interrupt detected, button register = 0x00000001
    Interrupt detected, button register = 0x00000004
    All good!
    #### Part 9 - Revision Control ####

    18. Commit new & updated files

    Check GIT status to make sure all is well and there are no spurious elements.
    steve@Desktop:~/swuk_tutorial$ git status -u
    On branch master
    Your branch is up to date with 'origin/master'.

    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
       modified:   .petalinux/metadata
       modified:   project-spec/configs/.statistics
       modified:   project-spec/configs/config
       modified:   project-spec/configs/configs/Kconfig
       modified:   project-spec/configs/configs/Kconfig.bootcompconfigurations
       modified:   project-spec/configs/configs/Kconfig.dtgsettings
       modified:   project-spec/configs/configs/Kconfig.linuxcompselection
       modified:   project-spec/configs/configs/Kconfig.main
       modified:   project-spec/configs/configs/Kconfig.syshw
       modified:   project-spec/configs/configs/Kconfig.yoctomachinesettings
       modified:   project-spec/configs/flash_parts.txt
       modified:   project-spec/configs/gen-machineconf.log.old
       deleted:    project-spec/configs/plnx_syshw_data
       modified:   project-spec/configs/rootfs_config
       modified:   project-spec/configs/rootfsconfigs/Kconfig
       modified:   project-spec/configs/rootfsconfigs/Kconfig.part
       deleted:    project-spec/hw-description/system.xsa
       modified:   project-spec/meta-user/recipes-apps/website/files/project.txt

    Untracked files:
      (use "git add <file>..." to include in what will be committed)
       project-spec/configs/DRVLISTConfig.cmake
       project-spec/configs/configs/Kconfig.bootcompselection
       project-spec/configs/ip_drv_map.yaml
       project-spec/configs/petalinux_config.yaml
       project-spec/configs/u-boot-xlnx/config.cfg
       project-spec/hw-description/include/dt-bindings/clock/xlnx-versal-clk.h
       project-spec/hw-description/include/dt-bindings/clock/xlnx-versal-net-clk.h
       project-spec/hw-description/include/dt-bindings/clock/xlnx-versal2-clk.h
       project-spec/hw-description/include/dt-bindings/clock/xlnx-zynqmp-clk.h
       project-spec/hw-description/include/dt-bindings/dma/xlnx-zynqmp-dpdma.h
       project-spec/hw-description/include/dt-bindings/gpio/gpio.h
       project-spec/hw-description/include/dt-bindings/input/input.h
       project-spec/hw-description/include/dt-bindings/input/linux-event-codes.h
       project-spec/hw-description/include/dt-bindings/interrupt-controller/arm-gic.h
       project-spec/hw-description/include/dt-bindings/interrupt-controller/irq.h
       project-spec/hw-description/include/dt-bindings/net/mscc-phy-vsc8531.h
       project-spec/hw-description/include/dt-bindings/net/ti-dp83867.h
       project-spec/hw-description/include/dt-bindings/phy/phy.h
       project-spec/hw-description/include/dt-bindings/pinctrl/pinctrl-zynqmp.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal-net-power.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal-power.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal-regnode.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-versal2-power.h
       project-spec/hw-description/include/dt-bindings/power/xlnx-zynqmp-power.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-versal-net-resets.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-versal-resets.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-versal2-resets.h
       project-spec/hw-description/include/dt-bindings/reset/xlnx-zynqmp-resets.h
       project-spec/hw-description/include/dt-bindings/thermal/thermal.h
       project-spec/hw-description/pcw.dtsi
       project-spec/hw-description/pl.dtsi
       project-spec/hw-description/skeleton.dtsi
       project-spec/hw-description/system-top.dts
       project-spec/hw-description/zynq-7000.dtsi

    no changes added to commit (use "git add" and/or "git commit -a")
    Looks good! Commit the updates, create an annotated tag and push the commit & tag up to the remote repository.
    steve@Desktop:~/swuk_tutorial$ git add -A
    steve@Desktop:~/swuk_tutorial$ git commit -a -m "Basic Zedboard design consisting of a ZYNQ7 Processing System controlling a pair of cascading Test Pattern Generators that output video via HDMI (PetaLinux 2025.2)."
    steve@Desktop:~/swuk_tutorial$ git push
    steve@Desktop:~/swuk_tutorial$ git tag -a my_zedboard_linux_v20.0 -m "ZYNQ & Cascading TPG's with HDMI output (PetaLinux 2025.2)"
    steve@Desktop:~/swuk_tutorial$ git push origin my_zedboard_linux_v20.0

    19. Create production release

    Create a potential production release for the PetaLinux (20.0) project using pure repository source. .

    (optional) Clear out all the superfluous files from the project area (non-tracked files).
    steve@Desktop:~/swuk_tutorial$ cd zedboard_linux/os/petalinux
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git clean -fdx
    (optional) Clear out the transfer area.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ rm -rf /tftpboot/*
    Double check GIT status.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git status -u
    On branch master
    Your branch is up-to-date with 'origin/master'.

    nothing to commit, working tree clean
    Build/rebuild PetaLinux.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ swuk_petalinux-build
    Note: A fresh build of PetaLinux takes a long time to complete and can be prone to failure due to internet downloads. If the build process fails, firstly check the GIT status & difftool for any noddy file changes, restore these file changes and then execute the build command again until it finally completes.

    Package PetaLinux to produce the boot image BOOT.BIN, this will include the first stage boot loader zynq_fsbl.elf, the programmable logic system.bit, the Linux boot loader u-boot.elf and the device tree blob system.dtb.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --uboot images/linux/u-boot.elf
    Archive the generated files for safe keeping. These files are not held in the repository as they can be recreated from source.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ mkdir -p ~/Documents/swuk_tutorial/petalinux/v20.0
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ cp /tftpboot/{BOOT.BIN,boot.scr,image.ub} ~/Documents/swuk_tutorial/petalinux/v20.0
    #### Part 10 - Hardware Deployment ####

    20. Copy BOOT files to the SD-Card

    Upload the newly created PetaLinux Boot & OS files to the SD-Card.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ swuk_ssh 192.168.2.87
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ sshpass -p petalinux scp -r ~/Documents/swuk_tutorial/petalinux/v20.0 petalinux@192.168.2.87:/media/sd-mmcblk0p1/petalinux

    21. Reload the Operating System using the Webserver

    Refresh the System page. Do a "Shift-Refresh" (Hard Reset) to clear the cache & reload the page (use Shift + Reload Button or Ctrl + Shift + R).

    Select v20.0 from the drop-down menu in the Reload Operating System section. Missing Image! After the reload sequence has finished...
    #### Part 11 - Check everything is working as expected ####

    22. Final checks

    The Operating System Information table should show Zedboard PetaLinux description along with a version of 20.0.

    The Firmware Information table should show Zedboard Video TPG HDMI description along with a version of 1.0.

    There should be no unsavoury comments after the version numbers! Missing Image! The Timestamp & Hash shown from GIT (1st entry) should marry up perfectly with the displayed Operating System Information.
    steve@Desktop:~/swuk_tutorial/zedboard_linux/os/petalinux$ git log -1
    commit a79405d83c40d95d8b3160acf95a2979c1c55a4b (HEAD -> master, tag: zedboard_linux_v20.0, origin/master, origin/HEAD)
    Author: Steve Haywood <steve@spacewire.co.uk>
    Date:   Mon Mar 23 08:57:49 2026 +0000

        Basic Zedboard design consisting of a ZYNQ7 Processing System controlling a pair of cascading Test Pattern Generators that output video via HDMI (PetaLinux 2025.2).
    Looks good!
    #### Part 12 - Final resulting build file(s) ####

    23. Resulting BOOT files

    The resulting BOOT files from the above build can be obtained from here: v20.0 (2025.2).