Additional device tree overlays to support different hardware on Radxa products
Due to the much more frequent development happening on the overlay compared to the kernel in general, we are once again splitting the overlay into a dedicated package.
However, to guarantee the overlay is compatible with the installed kernel, this package will be delivered as a source code package using dkms, instead of a prebuilt binary package.
You can build the dkms package using the below commands:
sudo apt-get update
sudo apt-get build-dep --no-install-recommends -y .
make all deb
You will need this patch so this repo can be built with the kernel.
This is how overlays were distributed previously as part of the kernel package. We are still supporting this for older kernels. Newer kernels like Rockchip 6.1 kernel will use the above dkms package instead.
First, make sure you have the running kernel header, gcc
, and device-tree-compiler
installed.
You can then run the following command to build overlays:
make build-dtbo -j$(nproc)
Please be aware this only builds a subset of overlays, and any overlays that depend on vendor headers will fail, as this command will use the current system's kernel header.
Please take a look at the CI workflow to see how to select installed vendor kernel header.
To delete built overlays, run the following command:
make clean
As part of our CI pipeline, the built overlays are uploaded at the end. You can find all CI runs here, and the artifact is located inside each run.
Please be aware that artifacts expire over time, and they are not officially tested versions.
We mandate reference style for our overlays. Please visit the DTO Syntax page to learn more.
If your existing overlay uses target-path
, then the Android documentation does not show a clear migration path. Below is an example of how to convert them:
/{
fragment@0 {
target-path = "/";
__overlay__ {
some_node: some-node {
some_prop = "okay";
...
};
};
};
}
&{/} {
some_node: some-node {
some_prop = "okay";
...
};
}
Currently, we mandate a custom metadata
node in overlays. This data is parsed by rsetup
to provide a human-readable description and conflict detection. Below is a sample metadata
node with detailed guidelines:
/ {
metadata {
title = "Enable ENC28J60 on SPI2";
category = "misc";
compatible = "unknown";
description = "Enable Microchip ENC28J60 SPI Ethernet controller on SPI2.\nINT=40";
exclusive = "GPIO2_B3", "GPIO2_B2", "GPIO2_B1", "GPIO2_B4", "GPIO4_A7";
package = "dkms-enc28j60";
};
};
title
should not contain the product name.rsetup
will only show compatible overlays with compatible
field defined. As such, do not confuse users to second guess if an overlay is truly compatible when the product name is not explicitly mentioned.title
should not end with a period.category
currently can be one of the following:compatible
should not be an SoC unless it is truly compatible with every product using that SoC.rsetup
will match the base device tree's compatible
with the overlay's compatible
. As long as one value from each match, the overlay is considered compatible. Since most products' device tree contains their SoC in compatible
, setting SoC in overlay's compatible
will make it compatible with every such product.compatible
should be unknown
.description
is a multi-line text to describe the function of the overlay. It can be the same as title
with an ending period.description
should use \n
.exclusive
should refer to the device tree node and property.exclusive
should be the GPIO ID.exclusive
.package
specify the additional packages to be used with this overlay.