The device tree is a data structure that describes the hardware components available on a system. The Linux kernel queries the device tree to find out which drivers to load during boot.
Device tree file types
Device tree files are located at arch/arm64/boot/dts/digi/
and can have two extensions:
-
.dtsi
files are device tree source include files. They describe hardware that is common to several platforms that include these files in their.dts
files. -
.dts
files are device tree source files. They describe one specific platform.
System-on-module device tree
The ConnectCore 8M Mini is a system-on-module (SOM) solution that integrates:
-
NXP {cpu-family} system-on-chip featuring many interfaces such as UART, CAN, SPI, and I2C
-
LPDDR4 memory
-
eMMC memory
-
PMIC chip
-
Crypto-authentication chip
-
Optional Wi-Fi + Bluetooth chip
-
Micro Controller Assist (MCA) chip
The ConnectCore 8M Mini system-on-module needs to be soldered to a carrier board.
For this reason, there is not a single .dts
file for it.
Instead, its hardware features are collected into .dtsi
files that can be included by a final platform .dts
.
Even though the ConnectCore 8M Mini system-on-module is offered in different variants, only one .dtsi
file has been defined to describe the hardware inside:
ccimx8mm.dtsi
.
Your final platform .dts
file must include this SOM include file.
Variants of the SOM are handled through the use of device tree overlays, which are explained later in this same page.
Carrier board device tree
The ConnectCore 8M Mini Development Kit is a carrier board assembling the ConnectCore 8M Mini system-on-module. The carrier board assembles additional hardware like a video port, Ethernet PHY, audio chip, PCIe minicard, microSD card holder, user LEDs, and so on.
As a final platform, the carrier board has a .dts
file that includes the ConnectCore 8M Mini system-on-module .dtsi
file:
ccimx8mm-dvk.dts
.
Device tree overlays
Complex embedded SoMs and carrier boards would require of multiple device tree blobs to account for the many different SoM/board variants and feature combinations.
Device tree overlays are special device tree blob fragments that allow you to override specific parts of a device tree on-the-fly in the boot loader, before booting the operating system. This allows you to combine a base device tree with optional elements, that you decide at boot time, without the need to recompile a device tree for just a tiny change.
Overlays can only perform constructive changes such as adding or modifying nodes or properties. They cannot be used to perform destructive changes such as deleting nodes or properties. |
File naming conventions
Digi device tree overlay filenames follow these conventions:
-
Source files use the regular
.dts
extension. -
Compiled device tree overlay blobs use the
.dtbo
extension. -
Filenames follow the syntax:
ov<som|board>_<functionality>[_<hardware>].dts
, where-
_ov_
identifies the file as a device tree overlay. -
<som|board>
indicates whether the overlay affects the SoM or the carrier board. -
<functionality>
indicates the specific interface enabled/affected by the overlay. -
<hardware>
optionally describes the specific hardware targeted by the overlay.
-
Digi device tree overlays mechanism
The Digi ConnectCore 8M Mini carrier board has a base device tree blob with the default hardware configuration. Digi also provides a number of pre-compiled device tree overlays that enable different hardware and peripherals.
The Digi modified U-Boot boota
command does the following:
-
Loads the base device tree (defined in variable
fdt_file
). -
Loads and applies the SOM-specific device tree overlays (this is done automatically).
-
Parses the contents of variable
overlays
(a comma-separated list of device tree overlay filenames). -
Sequentially loads and applies each overlay over the base device tree and SOM-specific overlays. If an overlay fails to load, the boot process is aborted.
To apply an overlay to the base device tree, set the overlays
variable to your device tree overlay filename.
For example:
=> setenv overlays my-overlay.dtbo
You can instruct boota
to apply several device tree overlay files by separating them with commas:
=> setenv overlays my-overlay1.dtbo,my-overlay2.dtbo,my-overlay3.dtbo
This mechanism resolves the overlays that need to be applied for the hardware detected on your ConnectCore 8M Mini variant.
From there, you may set the overlays
variable to any custom (or pre-compiled) overlay you want to additionally apply for your purposes.
Pre-compiled device tree overlays
Digi Embedded for Android provides a number of pre-compiled device tree overlays that resolve combinations of ConnectCore 8M Mini SOM variants and hardware versions, as well as others that help test interfaces that are disabled on the default device tree due to multiplexing with other interfaces.
SOM overlays
File | Description |
---|---|
_ov_som_bt_ccimx8m.dtbo (dts) |
Enable the Bluetooth interface |
_ov_som_mca-keypad_ccimx8m.dtbo (dts) |
Enable the MCA keypad |
_ov_som_trusty_ccimx8m.dtbo (dts) |
Enable Trusty. See Digi TrustFence for Android. |
_ov_som_wifi_ccimx8m.dtbo (dts) |
Enable the Wi-Fi interface |
As described in Digi device tree overlays mechanism, the SOM overlays are automatically added to the list in U-Boot overlays variable by boota command, based on the detected SOM variant.
|
Carrier board overlays
File | Description |
---|---|
|
Enable a Quad-SPI interface example (and disable any conflicting interface) |
|
Enable the MIPI-to-LVDS display bridge (and disable the MIPI-to-HDMI in return) |
|
Demo overlay for ConnectCore 8M Mini Development Kit user LEDs |