Merge tag 'dey-5.0-r3.1' into dey-5.0/master

Digi Embedded Yocto 5.0-r3.1

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
Javier Viguera 2025-12-19 13:50:41 +01:00
commit e2ed58b70b
20 changed files with 264 additions and 71 deletions

View File

@ -21,6 +21,13 @@ OS versions:
Software for the following hardware platforms is in production support:
## ConnectCore 95
* ConnectCore 95 System-on-Module (SOM)
* [CC-WMX-B30F-B1](https://www.digi.com/products/models/cc-wmx-b30f-b1)
* [CC-MX-B30F-B1](https://www.digi.com/products/models/cc-mx-b30f-b1)
* ConnectCore 95 Development Kit (DVK)
* [CC-WMX95-KIT](https://www.digi.com/products/models/cc-wmx95-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/5.0/cc95/yocto-gs_index))
## ConnectCore MP25
* ConnectCore MP25 System-on-Module (SOM)
* [CC-WST-J17D-NK](https://www.digi.com/products/models/cc-wst-j17d-nk)
@ -101,6 +108,32 @@ Software for the following hardware platforms is in production support:
* [CC-SBP-WMX-JN58](https://www.digi.com/products/models/cc-sbp-wmx-jn58)
* [CC-SBP-WMX-JN7A](https://www.digi.com/products/models/cc-sbp-wmx-jn7a)
## ConnectCore 6 Plus
* ConnectCore 6 Plus System-on-Module (SOM)
* [CC-WMX-KK8D-TN](https://www.digi.com/products/models/cc-wmx-kk8d-tn)
* ConnectCore 6 Plus professional development kit
* [CC-WMX6P-KIT](https://www.digi.com/products/models/cc-wmx6p-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc6plus/yocto-gs_index))
## ConnectCore 6
* ConnectCore 6 System-on-Module (SOM)
* [CC-WMX-J97C-TN](https://www.digi.com/products/models/cc-wmx-j97c-tn)
* [CC-WMX-L96C-TE](https://www.digi.com/products/models/cc-wmx-l96c-te)
* [CC-WMX-L87C-TE](https://www.digi.com/products/models/cc-wmx-l87c-te)
* [CC-MX-L76C-Z1](https://www.digi.com/products/models/cc-mx-l76c-z1)
* [CC-MX-L86C-Z1](https://www.digi.com/products/models/cc-mx-l86c-z1)
* [CC-MX-L96C-Z1](https://www.digi.com/products/models/cc-mx-l96c-z1)
* [CC-WMX-L76C-TE](https://www.digi.com/products/models/cc-wmx-l76c-te)
* CC-WMX-K87C-FJA
* CC-WMX-K77C-TE
* CC-WMX-L97D-TN
* CC-WMX-J98C-FJA
* CC-WMX-J98C-FJA-1
* ConnectCore 6 Jumpstart Development Kit (SBC with Connectore 6 module)
* [CC-WMX6-KIT](https://www.digi.com/products/models/cc-wmx6-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc6/yocto-gs_index))
* [CC-SB-WMX-J97C-1](https://www.digi.com/products/models/cc-sb-wmx-j97c-1)
* [CC-SB-WMX-L87C-1](https://www.digi.com/products/models/cc-sb-wmx-l87c-1)
* [CC-SB-WMX-L76C-1](https://www.digi.com/products/models/cc-sb-wmx-l76c-1)
# Installation
Digi Embedded Yocto is composed of a set of different Yocto layers that work in
@ -121,7 +154,28 @@ Documentation is available online at https://www.digi.com/resources/documentatio
## 5.0-r3
TODO
* ST-based platforms
* Updated BSP
* Trusted Firmware ARM v2.10 (based on tag 'v2.10-stm32mp-r2' by ST)
* OP-TEE v4.0.0 (based on tag '4.0.0-stm32mp-r2' by ST)
* U-Boot v2023.10 (based on tag 'v2023.10-stm32mp-r2' by ST)
* Linux kernel v6.6.78 (based on tag 'v6.6-stm32mp-r2' by ST)
* Updated X-LINUX-AI software package (based on tag 'v6.1.1' by ST)
* Complete TrustFence support for ConnectCore MP25
* Added support to sign/encrypt RPROC firmware for ConnectCore MP25
* Added VREFBUF internal voltage reference for ADC on ConnectCore MP25
* NXP-based platforms
* Added support for ConnectCore 6/6N and ConnectCore 6 Plus
* Added support for ConnectCore 95 (beta)
* Updated BSP
* Trusted Firmware ARM v2.10 (based on tag 'lf-6.6.52-2.2.1' by NXP)
* OP-TEE v4.4.0 (based on tag 'lf-6.6.52-2.2.1' by NXP)
* OEI v1.0 (based on tag 'lf-6.6.52-2.2.1' by NXP)
* System Manager 2025q2 (based on tag 'lf-6.6.52-2.2.1' by NXP)
* U-Boot v2024.04 (based on tag 'lf-6.6.52-2.2.1' by NXP)
* Linux kernel v6.6.52 (based on tag 'lf-6.6.52-2.2.1' by NXP)
* Added 'dey-image-chromium' image recipe for ConnectCore 95
* Added WIC templates for sdcard image generation
## 5.0-r2

View File

@ -52,6 +52,9 @@ KERNEL_DEVICETREE ?= " \
"
FIT_CONF_DEFAULT_DTB = "ccimx95-dvk.dtb"
# Default image for install scripts
DEFAULT_IMAGE_NAME ?= "dey-image-chromium"
# Boot artifacts to be copied from the deploy dir to the installer ZIP
BOOTABLE_ARTIFACTS = " \
imx-boot##SIGNED##-ccimx95-dvk.bin \

View File

@ -134,14 +134,23 @@ ST_USERFS = "0"
# Boot artifacts to be copied from the deploy dir to the installer ZIP
BOOTABLE_ARTIFACTS = " \
${@oe.utils.ifelse(d.getVar('TRUSTFENCE_SIGN') == '1', \
oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'tf-a-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.stm32', \
'tf-a-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.stm32'), \
'tf-a-ccmp25-dvk-optee-emmc.stm32')} \
oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'tf-a-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.stm32 ' \
'tf-a-ccmp25-dvk-optee-usb${SIGN_SUFFIX}.stm32 ', \
'tf-a-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.stm32 ' \
'tf-a-ccmp25-dvk-optee-usb${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.stm32 '), \
'tf-a-ccmp25-dvk-optee-emmc.stm32 ' \
'tf-a-ccmp25-dvk-optee-usb.stm32 ')} \
metadata-ccmp25-dvk.bin \
${@oe.utils.ifelse(d.getVar('TRUSTFENCE_SIGN') == '1', \
oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'fip-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.bin', \
'fip-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin'), \
'fip-ccmp25-dvk-optee-emmc.bin')} \
oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'fip-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.bin ' \
'fip-ccmp25-dvk-optee-usb${SIGN_SUFFIX}.bin ' \
'fip-ccmp25-dvk-ddr-optee-usb${SIGN_SUFFIX}.bin ', \
'fip-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin ' \
'fip-ccmp25-dvk-optee-usb${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin ' \
'fip-ccmp25-dvk-ddr-optee-usb${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin '), \
'fip-ccmp25-dvk-optee-emmc.bin ' \
'fip-ccmp25-dvk-optee-usb.bin ' \
'fip-ccmp25-dvk-ddr-optee-usb.bin ')} \
"
# Per-machine DISTRO_FEATURES customization

View File

@ -8,9 +8,6 @@ include conf/machine/include/digi-defaults.inc
DIGI_FAMILY = "ccmp1"
# Platform T-FA settings
TFA_SIGN_SUFFIX ?= "${@bb.utils.contains('TRUSTFENCE_SIGN', '1', '_signed', '', d)}"
# =========================================================================
# U-Boot
# =========================================================================

View File

@ -21,8 +21,8 @@ SRC_URI = " \
"
SRC_URI:append:ccmp25 = " \
${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \
${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \
"
# Enable remoteproc OTP public key verification for signed firmware support
EXTRA_OEMAKE:append:ccmp25 = " ${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1', 'CFG_REMOTEPROC_PUB_KEY_VERIFY=y', '', d)}"
EXTRA_OEMAKE:append:ccmp25 = " ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1', 'CFG_REMOTEPROC_PUB_KEY_VERIFY=y', '', d)}"

View File

@ -14,7 +14,7 @@ SRC_URI += " \
"
SRC_URI:append:ccmp25 = " \
${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \
${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \
"
install_helper_files() {

View File

@ -0,0 +1,48 @@
From: Isaac Hermida <isaac.hermida@digi.com>
Date: Fri, 21 Nov 2025 10:12:53 +0100
Subject: [PATCH] CC95: early prototypes: enable wireless interfaces
As the HWID is not completed yet, is needed to fill that info manually.
This is just temporal for the initial prototypes.
Additionally, in U-Boot, is needed to set the overlays as:
setenv overlays ccimx9_wifi.dtbo,ccimx9_bt.dtbo
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
---
arch/arm64/boot/dts/digi/ccimx9_bt.dtso | 1 +
arch/arm64/boot/dts/digi/ccimx9_wifi.dtso | 3 +++
2 files changed, 4 insertions(+)
diff --git a/arch/arm64/boot/dts/digi/ccimx9_bt.dtso b/arch/arm64/boot/dts/digi/ccimx9_bt.dtso
index 6b4ca6229706..e073fe328dea 100644
--- a/arch/arm64/boot/dts/digi/ccimx9_bt.dtso
+++ b/arch/arm64/boot/dts/digi/ccimx9_bt.dtso
@@ -23,6 +23,7 @@ __overlay__ {
overlay-description = "SOM: Bluetooth";
bluetooth {
/* U-Boot will fill in the MAC address here */
+ mac-address = [00 04 f3 ff ff fc];
};
};
};
diff --git a/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso b/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso
index 7d73c4c7764d..80d766215ee0 100644
--- a/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso
+++ b/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso
@@ -25,6 +25,7 @@ __overlay__ {
overlay-description = "SOM: Wi-Fi";
wireless {
/* U-Boot will fill in the MAC address here */
+ mac-address = [00 04 f3 ff ff fb];
};
};
};
@@ -42,6 +43,8 @@ __overlay__ {
bus-width = <4>;
non-removable;
wakeup-source;
+ // Workaround: limit max freq to 100MHz
+ max-frequency = <100000000>;
status = "okay";
};
};

View File

@ -23,7 +23,11 @@ SRC_URI:append = " \
"
SRC_URI:append:ccmp25 = " \
${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1' , 'file://0001-ARM64-dts-ccmp25-add-signed-firmware-support-for-RPR.patch', '', d)} \
${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM64-dts-ccmp25-add-signed-firmware-support-for-RPR.patch', '', d)} \
"
SRC_URI:append:ccimx95 = " \
file://0001-CC95-early-prototypes-enable-wireless-interfaces.patch \
"
# Define RT config fragments per machine

View File

@ -0,0 +1,76 @@
###########################################################
#
# classes/ccss.bbclass - ConnectCore Security Services
#
# Generates an SBOM for the CCSS CVE analysis tool
#
# Copyright (C) 2025 Digi International
#
#
# This source is released under the MIT License.
#
###########################################################
inherit vigiles
CCSS_API_VERSION = "0.1"
CCSS_IMAGE_TYPE ?= "dev"
CCSS_ENABLE ?= "1"
python do_ccss_generate_sbom() {
import json
import os
import shutil
import tempfile
# Temporary dir to store all files in the SBOM
ccss_tmp_dir = tempfile.mkdtemp(dir=d.getVar('TOPDIR'))
try:
manifest_file = os.path.join(d.getVar('VIGILES_DIR'), d.getVar('VIGILES_MANIFEST_NAME') + d.getVar('VIGILES_MANIFEST_SUFFIX'))
ccss_kconfig = os.path.join(d.getVar('VIGILES_DIR'),'.'.join([_get_kernel_pf(d), 'config']))
ccss_uconfig = os.path.join(d.getVar('VIGILES_DIR'),'.'.join([_get_uboot_pf(d), 'config']))
# Copy Vigiles manifest and kernel/uboot configs if they're available
if os.path.exists(manifest_file):
shutil.copy(manifest_file, os.path.join(ccss_tmp_dir, 'manifest.json'), follow_symlinks=True)
if os.path.exists(ccss_kconfig):
shutil.copy(ccss_kconfig, os.path.join(ccss_tmp_dir, 'kernel.config'), follow_symlinks=True)
if os.path.exists(ccss_uconfig):
shutil.copy(ccss_uconfig, os.path.join(ccss_tmp_dir, 'uboot.config'), follow_symlinks=True)
dict_out = dict(
api_version = d.getVar('CCSS_API_VERSION'),
date = d.getVar('DATETIME'),
has_ccss_patches = bb.utils.contains('BBFILE_COLLECTIONS', 'digi-security', 'y', 'n', d),
image_type = d.getVar('CCSS_IMAGE_TYPE'),
som = d.getVar('DIGI_SOM'),
yocto_codename = d.getVar('DISTRO_CODENAME')
)
with open(os.path.join(ccss_tmp_dir, 'config.json'), 'w') as f_out:
s = json.dumps(dict_out, indent=2, sort_keys=True)
f_out.write(s)
# Create .zip file
shutil.make_archive(os.path.join(d.getVar('TOPDIR'), 'CCSS_' + d.getVar('IMAGE_BASENAME') + '-' + d.getVar('DATETIME')), 'zip', ccss_tmp_dir)
finally:
# Remove temporary dir
bb.utils.remove(ccss_tmp_dir, recurse=True)
}
# Don't execute do_ccss_generate_sbom() unless explicitly enabled for a given
# image
python __anonymous() {
if d.getVar('CCSS_ENABLE') != '1':
d.setVarFlag('do_ccss_generate_sbom', 'noexec', '1')
}
addtask do_ccss_generate_sbom after do_image before do_image_complete
# Since do_ccss_generate_sbom() uses the DATETIME variable to create the
# metadata JSON, said variable will expand to different values when the
# function is parsed in different stages of the build (first by the bitbake
# cooker, and then by a worker). This causes metadata/hash mismatch errors due
# to non-deterministic content, so exclude DATETIME from the hash calculation.
do_ccss_generate_sbom[vardepsexclude]="DATETIME"

View File

@ -111,14 +111,15 @@ SWUPDATE_UBOOT_PREFIX_TFA ?= "tf-a"
SWUPDATE_UBOOT_EXT ?= ".${UBOOT_SUFFIX}"
SWUPDATE_UBOOT_EXT_TFA ?= ".stm32"
SWUPDATE_UBOOT_MEM_VARIANT ?= "-512MB"
SWUPDATE_UBOOT_NAME ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccimx6sbc ?= "${SWUPDATE_UBOOT_PREFIX}-ccimx6qsbc${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-nand${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee-emmc${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}${SWUPDATE_UBOOT_MEM_VARIANT}-optee-nand${FIP_ENCRYPT_SUFFIX}${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee-emmc${FIP_ENCRYPT_SUFFIX}${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME_TFA ?= ""
SWUPDATE_UBOOT_NAME_TFA:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-nand${SWUPDATE_UBOOT_EXT_TFA}${TFA_SIGN_SUFFIX}"
SWUPDATE_UBOOT_NAME_TFA:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-optee-emmc${SWUPDATE_UBOOT_EXT_TFA}"
SWUPDATE_UBOOT_NAME_TFA:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}${SWUPDATE_UBOOT_MEM_VARIANT}-optee-nand${TF_A_ENCRYPT_SUFFIX}${TF_A_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT_TFA}"
SWUPDATE_UBOOT_NAME_TFA:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-optee-emmc${TF_A_ENCRYPT_SUFFIX}${TF_A_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT_TFA}"
SWUPDATE_UBOOT_OFFSET ?= "${BOOTLOADER_SEEK_BOOTPART}"

View File

@ -45,6 +45,9 @@ TRUSTFENCE_ENCRYPT_ROOTFS:ccmp1 ?= "0"
TRUSTFENCE_ENCRYPT_ROOTFS:ccmp2 ?= "0"
TRUSTFENCE_FILE_BASED_ENCRYPT ?= "${TF_FILE_BASED_ENCRYPT}"
# Co-processor settings
TRUSTFENCE_COPRO_ENABLED ?= "1"
# Read-only rootfs
TRUSTFENCE_READ_ONLY_ROOTFS ?= "${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "1", "0", d)}"
@ -288,7 +291,7 @@ python () {
# Set the key password.
d.setVar("SWUPDATE_PASSWORD_FILE", keys_path + "/keys/key_pass.txt")
elif (d.getVar("DEY_SOC_VENDOR") == "STM"):
d.setVar("SWUPDATE_PRIVATE_KEY_TEMPLATE", d.getVar("FIP_SIGN_KEY"))
d.setVar("SWUPDATE_PRIVATE_KEY_TEMPLATE", d.getVar("SIGN_KEY"))
# Set the key password.
if (d.getVar("DIGI_SOM") == "ccmp15"):
d.setVar("SWUPDATE_PASSWORD_FILE", keys_path + "/keys/key_pass.txt")

View File

@ -33,7 +33,9 @@ power() {
set_btaddr() {
hciconfig ${HCI_IFACE} up
sleep 0.2
bt_addr=$(echo "$(fw_printenv -n btaddr)" | awk -F ":" '{ for(i=NF;i>=1;i--) printf "0x%s ", $i }')
bt_addr=$(hexdump -v -e '1/1 "%02X "' /proc/device-tree/bluetooth/mac-address \
| awk '{ for(i=NF; i>0; i--) printf "0x%s ", $i }' \
| sed 's/ $//')
hcitool -i ${HCI_IFACE} cmd 0x3f 0x0022 0xfe 0x06 ${bt_addr}
hciconfig ${HCI_IFACE} down
sleep 0.2

View File

@ -43,7 +43,9 @@ bt_power() {
set_btaddr() {
hciconfig hci0 up
sleep 0.2
bt_addr=$(echo "$(fw_printenv -n btaddr)" | awk -F ":" '{ for(i=NF;i>=1;i--) printf "0x%s ", $i }')
bt_addr=$(hexdump -v -e '1/1 "%02X "' /proc/device-tree/bluetooth/mac-address \
| awk '{ for(i=NF; i>0; i--) printf "0x%s ", $i }' \
| sed 's/ $//')
hcitool -i hci0 cmd 0x3f 0x0001 ${bt_addr}
hciconfig hci0 down
sleep 0.2

View File

@ -32,7 +32,9 @@ bt_power() {
set_btaddr() {
hciconfig hci0 up
sleep 0.2
bt_addr=$(echo "$(fw_printenv -n btaddr)" | awk -F ":" '{ for(i=NF;i>=1;i--) printf "0x%s ", $i }')
bt_addr=$(hexdump -v -e '1/1 "%02X "' /proc/device-tree/bluetooth/mac-address \
| awk '{ for(i=NF; i>0; i--) printf "0x%s ", $i }' \
| sed 's/ $//')
hcitool -i hci0 cmd 0x3f 0x0001 ${bt_addr}
hciconfig hci0 down
sleep 0.2

View File

@ -87,6 +87,12 @@ do_install() {
fi
}
do_install:append:ccimx6ul() {
if [ -z "${CCCS_CONF_PATH}" ]; then
sed -i "/url = \"edp12.devicecloud.com\"/c\url = \"remotemanager.digi.com\"" ${D}${sysconfdir}/cccs.conf
fi
}
pkg_postinst_ontarget:${PN}-daemon() {
# If dualboot is enabled, change the CCCSD download path and set on the fly to yes on the first boot
if [ "$(fw_printenv -n dualboot 2>/dev/null)" = "yes" ]; then

View File

@ -19,20 +19,20 @@ USER_BUTTON2 = 43840000.gpio,23
[I2C]
# I2C-3 on MikroBus connector.
# I2C-3 on MikroBus connector J39.
DEFAULT_I2C_BUS = 2
[SPI]
# LPSPI-8 on MikroBus connector J39.
# LPSPI-8 on MikroBus connector J38.
DEFAULT_SPI = 0,0
[PWM]
# PWM0 channel 1 - LVDS backlight.
DEFAULT_PWM = 0,1
# TPM3 channel 3 on MikroBus connector J39.1.
DEFAULT_PWM = 0,3
[ADC]
# ADC channel 0 - Pin J48-1.
# ADC channel 0 - Pin J44.3.
DEFAULT_ADC = 0,0

View File

@ -1,7 +1,7 @@
#!/bin/sh
#===============================================================================
#
# Copyright (C) 2022-2024 by Digi International Inc.
# Copyright (C) 2022-2025 by Digi International Inc.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
@ -25,6 +25,7 @@ UBOOT_BLOCK_REDUNDANT="mmcblk0boot1"
UBOOT_MMC_DEV_MAIN="/dev/${UBOOT_BLOCK_MAIN}"
UBOOT_MMC_DUMP="/tmp/u-boot-dump.hex"
UBOOT_ENCRYPTED_DEK="/tmp/u-boot-encrypted-with-dek.imx"
UBOOT_PARTNAME="U-Boot"
DEK_FILE="/tmp/dek.bin"
DEK_KEY_SIZE="32"
@ -241,42 +242,52 @@ write_artifact_emmc ()
{
local BLOCK_TO_WRITE="$1"
local FILE_TO_WRITE="$2"
local PARTNAME_TO_WRITE="$3"
local FORCE_RO_PATH="/sys/block/${BLOCK_TO_WRITE}/force_ro"
# Enable write access in the partition.
echo 0 > "/sys/block/${BLOCK_TO_WRITE}/force_ro"
if [ -e "${FORCE_RO_PATH}" ]; then
echo 0 > "${FORCE_RO_PATH}"
fi
# Write the file into the eMMC.
dd if="${FILE_TO_WRITE}" of="/dev/${BLOCK_TO_WRITE}" seek="${UBOOT_SEEK_KB}" bs=1K 2>/dev/null
local rc=$?
# Disable write access in partition.
echo 1 > "/sys/block/${BLOCK_TO_WRITE}/force_ro"
if [ -e "${FORCE_RO_PATH}" ]; then
echo 1 > "${FORCE_RO_PATH}"
fi
# Check update operation result.
if [ "${rc}" -ne 0 ]; then
exit_error "## ERROR: failed to write file ${FILE_TO_WRITE} to /dev/${BLOCK_TO_WRITE}" "${rc}"
fi
echo "U-Boot successfully writen to /dev/${BLOCK_TO_WRITE}"
echo "${PARTNAME_TO_WRITE} successfully writen to /dev/${BLOCK_TO_WRITE}"
}
# If U-Boot is encrypted, the DEK key blob needs to be extracted from existing U-Boot
# and appended to the new U-Boot before writing it.
if [ "${UBOOT_ENC}" = "enc" ]; then
# and appended to the new U-Boot before writing it for NXP platforms.
if [ "${UBOOT_ENC}" = "enc" ] && [[ "${PLATFORM}" != ccmp2* ]]; then
append_dek
fi
# Write TFA.
if expr "${PLATFORM}" : "ccmp2.*" >/dev/null; then
# Write TFA artifact into eMMC BOOT1 and BOOT2 partitions.
write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_TFA_FILE}
write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_TFA_FILE} "TF-A"
if [ "${UBOOT_REDUNDANT}" = "redundant" ]; then
write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_TFA_FILE}
write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_TFA_FILE} "TF-A"
fi
# Redefine block devices to write FIP artifact into 'fip-a' and 'fip-b' partitions.
UBOOT_BLOCK_MAIN="mmcblk0p3"
UBOOT_BLOCK_REDUNDANT="mmcblk0p4"
UBOOT_PARTNAME="FIP"
fi
# Write U-Boot
write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_FILE}
write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_FILE} ${UBOOT_PARTNAME}
# Check if redundant U-Boot update is requested.
if [ "${UBOOT_REDUNDANT}" = "redundant" ]; then
write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_FILE}
write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_FILE} ${UBOOT_PARTNAME}
fi
# Clean intermediate artifacts.
clean_artifacts

View File

@ -16,8 +16,6 @@
readonly DEMO_NAME="lvgl-demo"
readonly DEMO_PATH="/usr/bin/${DEMO_NAME}"
readonly DEMO_TITLE="LVGL Demo Application"
readonly DEMO_DISPLAY="##LVGL_DEMO_DISPLAY##"
readonly DEMO_ENV="##LVGL_DEMO_ENV##"
readonly PID_FILE="/run/${DEMO_NAME}.pid"
log() {
@ -54,21 +52,6 @@ check_is_running() {
return 1
}
wait_for_wayland() {
local count=20
local wayland_socket="/run/user/0/${DEMO_DISPLAY}"
while [ ! -S "${wayland_socket}" ]; do
sleep 1
count=$((count-1))
if [ "${count}" = 0 ]; then
return 1
fi
done
sleep 1
return 0
}
stop() {
check_is_running || return
@ -89,15 +72,11 @@ stop() {
start() {
check_is_running && { log warning "start: ${DEMO_NAME} ALREADY running"; exit 0; }
if [ -d "/usr/share/wayland" ]; then
wait_for_wayland
else
# Disable the cursor when displaying at full screen on fbdev
echo "0" > /sys/class/graphics/fbcon/cursor_blink
fi
# Disable the cursor when displaying at full screen on fbdev
echo "0" > /sys/class/graphics/fbcon/cursor_blink
# Launch demo
env ${DEMO_ENV} ${DEMO_PATH} >/dev/null 2>&1 &
env ${DEMO_PATH} >/dev/null 2>&1 &
if [ $? -eq 0 ]; then
echo $! > ${PID_FILE}

View File

@ -99,7 +99,4 @@ do_configure:append() {
\
-e "s|^([[:space:]]*#define LV_USE_LOTTIE[[:space:]]).*|\1${LVGL_CONFIG_USE_LOTTIE}|" \
-i "${S}/lv_conf.h"
sed -i -e 's,##LVGL_CONFIG_DRM_CARD##,${LVGL_CONFIG_DRM_CARD},g' \
-i -e 's,##LVGL_CONFIG_FBDEV_DEVICE##,${LVGL_CONFIG_FBDEV_DEVICE},g' \
-i ${WORKDIR}/lvgl-demo-init
}

View File

@ -28,9 +28,11 @@ SRCREV_FORMAT = "demo_lvgl"
EXTRA_OEMAKE = "DESTDIR=${D}"
LVGL_CONFIG_DRM_CARD ?= "/dev/dri/card0"
LVGL_CONFIG_FBDEV_DEVICE ?= "/dev/fb0"
# Change DRM card used for i.MX8-based platforms
LVGL_CONFIG_DRM_CARD:mx8-generic-bsp = "/dev/dri/card1"
LVGL_CONFIG_FBDEV_DEVICE ?= "/dev/fb0"
# Change framebuffer used for the ccimx6/ccimx6qp (HDMI display)
LVGL_CONFIG_FBDEV_DEVICE:ccimx6 = "/dev/fb3"
LVGL_CONFIG_LV_USE_LOG = "1"
LVGL_CONFIG_LV_LOG_PRINTF = "1"
LVGL_CONFIG_LV_MEM_SIZE = "(256 * 1024U)"
@ -42,9 +44,6 @@ inherit cmake systemd update-rc.d
S = "${WORKDIR}/git"
LVGL_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}"
LVGL_DEMO_ENV:ccimx6ul ?= ""
do_configure:prepend() {
if [ "${LVGL_CONFIG_USE_SDL}" -eq 1 ] ; then
# Add libsdl build dependency, SDL2_image has no cmake file
@ -66,9 +65,9 @@ do_install:append() {
# Install wrapper bootscript to launch LVGL demo on boot
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/lvgl-demo-init ${D}${sysconfdir}/lvgl-demo-init
sed -i -e "s@##LVGL_DEMO_DISPLAY##@${WAYLAND_DISPLAY}@g" \
-e "s@##LVGL_DEMO_ENV##@${LVGL_DEMO_ENV}@g" \
"${D}${sysconfdir}/lvgl-demo-init"
sed -i -e 's,##LVGL_CONFIG_DRM_CARD##,${LVGL_CONFIG_DRM_CARD},g' \
-i -e 's,##LVGL_CONFIG_FBDEV_DEVICE##,${LVGL_CONFIG_FBDEV_DEVICE},g' \
-i ${D}${sysconfdir}/lvgl-demo-init
ln -sf ${sysconfdir}/lvgl-demo-init ${D}${sysconfdir}/init.d/lvgl-demo-init
}