The main purpose of the bootloader is to boot the operating system. Other uses of the bootloader include performing manufacturing programming, early initialization of peripherals, or handling of tampering events.

Depending on your use case, you may want to modify the standard bootloader.

Platform code overview

You can access Digi’s U-Boot source code in GitHub.

SOM and carrier board source code

The BSP is located inside folder board/digi/ where there are the following subfolders:

  • ccmp2: contains specific code for the ConnectCore MP25 system-on-module (RAM initialization, eMMC, PMIC, Ethernet, and so on).

  • ccmp25-dvk: contains specific code for the ConnectCore MP25 Development Kit carrier board (Ethernet PHY, power regulators, and so on).

The microSD card controller (on the carrier board) is initialized together with the eMMC (on the SOM) in the ConnectCore MP25 System-On-Chip common code, despite technically being part of the carrier board.

Device tree files

Following the Linux kernel, U-Boot has progressively adopted the device tree model although some drivers may not have full support for all properties.

Digi provides device tree files for the SOM and the carrier board in path arch/arm/dts/ of U-Boot source code.

File Description

ccmp25.dtsi

SOM include file

ccmp25-dvk.dts

ConnectCore MP25 Development Kit DTS file

ccmp25-dvk-u-boot.dtsi

ConnectCore MP25 Development Kit DTS file for U-Boot tweaks

Platform include files

Platform include files in include/configs/ are:

  • ccmp25-dvk.h: contains configuration for the ConnectCore MP25 Development Kit like the board name, the UART to use as console, the Ethernet PHY address, or the default environment.

  • ccmp2_common.h: contains common configuration for the ConnectCore MP25 System-On-Chip, like the location of U-Boot and its environment, or the supported interfaces and commands.

  • digi_common.h: contains common configuration for Digi embedded products.

Modify platform code

Once you understand the structure of U-Boot platform code, you can customize existing code. Example of adaptations include:

  • Ethernet PHY, if a different PHY is used on your board.

  • PMIC voltages, if different LDOs are used to power interfaces that must be enabled during the boot process.

  • GPIOs, IOMUX of pads, per your board’s requirements.

You can make most changes on the ConnectCore MP25 Development Kit device tree to adapt it to your carrier board-specific hardware. For more specific functionality, you may need to adapt the board source code.

See Methods for guidelines on making changes to the configuration and source code of any recipe. The recipe that builds the U-Boot bootloader is called u-boot-dey.