Getting Started
Description
The Linux kernel in this repository is the Linux kernel from Xilinx together with drivers & patches applied from Analog Devices.
The driver documentation that are supported by this repository can be found at Drivers. This section focuses on details specific to how this code is structured/organized, how it was derived, etc.
The current main is based on xilinx v2025.1.
For details about the merge see commit
3b1f15dc5c4d
(Merge tag xilinx-v2025.1 of https://github.com/Xilinx/linux-xlnx.git).
In this Xilinx release, the current version of upstream Linux is
Linux 6.12.
How to build
For generic instructions on how to build the Linux Kernel, see How to quickly build a trimmed Linux kernel.
For specific targets broadly used by us:
From the instructions above, you adjust the defconfig, devicetrees of interest,
for example, for bcm2712_defconfig with all ADI’s drivers use
adi_bcm2712_defconfig.
Tip
Instead of building all ADI drivers, learn about how to use menuconfig at
Configuration targets and editors to enable only the drivers of interest.
The CI/CD scripts at ci/build.sh and .github/workflows/build.yml provide detailed steps for all supported targets. Checkout Continuous integration for how to build with CI/CD pipelines.
Built artifacts from our CI/CD are stored at adi/linux (S3), you can batch download by git sha or ref:
~$
cd $(mktemp -d)
/tmp/tmp.XXX$
mkdir ci
/tmp/tmp.XXX$
curl https://raw.githubusercontent.com/analogdevicesinc/linux/refs/heads/ci/ci/lib.sh \
-o ci/lib.sh
/tmp/tmp.XXX$
curl https://raw.githubusercontent.com/analogdevicesinc/linux/refs/heads/ci/ci/download_artifacts.sh \
-o ci/download_artifacts.sh
/tmp/tmp.XXX$
source ci/download_artifacts.sh
/tmp/tmp.XXX$
download_artifacts 494d15a4f
[step]: Get artifacts
...
If you are looking for building or using our Linux distribution Kuiper, please see ADI Kuiper Linux and its Build Flow.
Release branches
All release branches have the [YEAR]_R[NUM] format. There are some special
release branches sometimes (like 2014_R2_altera), because it wasn’t always
possible to match the Linux repo between Xilinx & Intel/Altera.
Each release is matched with a release from the HDL repo. The branching name/model for the HDL repo differs a bit from the one in this repo, but the matching should be obvious. Therefore, each kernel in the release branches is being built using the toolchains from a specific version of Vivado & Quartus. A matching of these can be found at Releases. Release branches can be built using other GCC toolchains, but in the official SD-card images provided, they will use the toolchains from Vivado/Quartus.
Rebased branches
Starting with ADI Linux repository’s branch adi-4.9.0 there are rebased branches. They’re typically rebased branches from Xilinx with the ADI patches on top so that it’s easier to identify patches that are not yet upstreamed.
For ADI Linux repository’s branch adi-4.9.0 the base was branch
xlnx_rebase_v4.9
at commit
e5c22c2179cf
in the ADI repo and commit
45e196f59364
in the Xilinx repo. All ADI patches & drivers up to a specific point in time
were cherry-picked to that branch from master. Note that since the
adi-4.9.0 branch is the first rebased branch, it’s not particularly the
best rebase that could have been done, but it should provide some patches that
are somewhat reasonable to take and apply on top of an upstream 4.9 kernel
after some polishing.
The latest rebased branch depends on the current linux version supported in
master. Also note that a diff between the latest rebased branch and xlnx-main
(e.g., git diff xlnx-main adi-6.12.0) must be NULL.
Raspberry Pi branches
These provide a kernel that is good to run on a Raspberry Pi board. All the drivers present in the master branch should be automatically cherry-picked into the latest rpi branch.
As in the rebased branches, the latest rpi branch should be in accordance with the current kernel version supported in master.
Intel/Altera branches
Because the kernel versions that Intel/Altera were usually not in sync with
Xilinx’s, altera-* branches were created:
These branches are derived from the Intel/Altera linux kernel repo, together with some merged versions of old master branches.
These branches would stop existing, since Intel/Altera seems to keep in sync their kernel version with more recent non-LTS kernels. Typically, the releases/references that are provided for these boards should already be in the mainline kernel, so these branches should no longer be needed.