Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 4 additions & 10 deletions config/nrfconnect/chip-module/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
if (CONFIG_CHIP)

include(ExternalProject)
include(../../zephyr/ota-image.cmake)
include(../../zephyr/zephyr-util.cmake)
include(generate_factory_data.cmake)

Expand All @@ -42,7 +41,10 @@ if (NOT CHIP_ROOT)
get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../.. REALPATH)
endif()

if (NOT CHIP_APP_ZAP_DIR)
if (CONFIG_CHIP_APP_ZAP_DIR)
string(CONFIGURE "${CONFIG_CHIP_APP_ZAP_DIR}" app_zap_dir)
get_filename_component(CHIP_APP_ZAP_DIR ${app_zap_dir} REALPATH)
elseif (NOT CHIP_APP_ZAP_DIR)
get_filename_component(CHIP_APP_ZAP_DIR ${CHIP_ROOT}/zzz_generated/app-common REALPATH)
endif()

Expand Down Expand Up @@ -280,12 +282,4 @@ if (CONFIG_CHIP_LIB_SHELL)
)
endif()

# ==============================================================================
# Define 'factory_data' target for generating a factory data partition
# ==============================================================================

if(CONFIG_CHIP_FACTORY_DATA_BUILD AND (NOT SYSBUILD OR NOT CONFIG_PARTITION_MANAGER_ENABLED))
nrfconnect_generate_factory_data()
endif()

endif() # CONFIG_CHIP
5 changes: 5 additions & 0 deletions config/nrfconnect/chip-module/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ config CHIP

if CHIP

config CHIP_APP_ZAP_DIR
string "Path to the zap-generated directory"
help
It shall contain all the files generated by the zap-generate command.

config CHIP_NRF_PLATFORM
bool
default y
Expand Down
91 changes: 67 additions & 24 deletions config/nrfconnect/chip-module/generate_factory_data.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,42 @@
# script_path - a path to script that makes a JSON factory data file from given arguments.
# schema_path - a path to JSON schema file which can be used to verify generated factory data JSON file.
# This argument is optional, if you don't want to verify the JSON file put it empty "".

# output_path - a path to output directory, where created hex and JSON files will be stored.
function(nrfconnect_create_factory_data factory_data_target script_path schema_path output_path)

# Transforming kConfigs to sysbuild format
if(SB_CONFIG_PARTITION_MANAGER)
sysbuild_get(CONFIG_CHIP_DEVICE_SERIAL_NUMBER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SERIAL_NUMBER KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_MANUFACTURING_DATE IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_MANUFACTURING_DATE KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_VENDOR_ID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_VENDOR_ID KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_ID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_ID KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_VENDOR_NAME IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_VENDOR_NAME KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_NAME IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_NAME KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_HARDWARE_VERSION IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_HARDWARE_VERSION KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_HARDWARE_VERSION_STRING IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_HARDWARE_VERSION_STRING KCONFIG)
sysbuild_get(CONFIG_CHIP_ROTATING_DEVICE_ID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_ROTATING_DEVICE_ID KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_ROTATING_DEVICE_UID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_ROTATING_DEVICE_UID KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_GENERATE_CD IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_GENERATE_CD KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_USER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_USER KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_IT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_IT KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_SALT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_SALT KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_DISCRIMINATOR IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_DISCRIMINATOR KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_PASSCODE IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_PASSCODE KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_TEST_VERIFIER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_TEST_VERIFIER KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_FINISH IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_FINISH KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_COLOR IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_COLOR KCONFIG)
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_GENERATE_ONBOARDING_CODES IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_GENERATE_ONBOARDING_CODES KCONFIG)
sysbuild_get(CONFIG_CHIP_DEVICE_ENABLE_KEY IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_ENABLE_KEY KCONFIG)
endif()

# set script args for future purpose
set(script_args)
## generate all script arguments
Expand Down Expand Up @@ -89,9 +122,15 @@ if(CONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS)
string(APPEND script_args "--dac_key \"${CHIP_ROOT}/credentials/development/attestation/Matter-Development-DAC-${raw_vid_upper}-${raw_pid_upper}-Key.der\"\n")
string(APPEND script_args "--pai_cert \"${CHIP_ROOT}/credentials/development/attestation/Matter-Development-PAI-${raw_vid_upper}-noPID-Cert.der\"\n")
elseif(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_USER)
string(APPEND script_args "--dac_cert \"${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT}\"\n")
string(APPEND script_args "--dac_key \"${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY}\"\n")
string(APPEND script_args "--pai_cert \"${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT}\"\n")
set(dac_cert "${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT}")
set(dac_key "${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY}")
set(pai_cert "${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT}")
string(CONFIGURE "${dac_cert}" dac_cert)
string(CONFIGURE "${dac_key}" dac_key)
string(CONFIGURE "${pai_cert}" pai_cert)
string(APPEND script_args "--dac_cert \"${dac_cert}\"\n")
string(APPEND script_args "--dac_key \"${dac_key}\"\n")
string(APPEND script_args "--pai_cert \"${pai_cert}\"\n")
elseif(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED)
string(APPEND script_args "--gen_certs\n")
endif()
Expand Down Expand Up @@ -130,19 +169,15 @@ string(APPEND script_args "-o \"${factory_data_output_path}\"\n")
string(APPEND script_args "-s \"${schema_path}\"\n")

# Add optional offset and size arguments to generate .hex file as well as .json.
if(CONFIG_PARTITION_MANAGER_ENABLED)
if(SB_CONFIG_PARTITION_MANAGER OR CONFIG_PARTITION_MANAGER_ENABLED)
string(APPEND script_args "--offset $<TARGET_PROPERTY:partition_manager,PM_FACTORY_DATA_ADDRESS>\n")
string(APPEND script_args "--size $<TARGET_PROPERTY:partition_manager,PM_FACTORY_DATA_OFFSET>\n")
else()
dt_alias(factory_data_alias PROPERTY "factory-data")
dt_node_exists(factory_data_exists PATH "${factory_data_alias}")
if(NOT ${factory_data_exists})
message(FATAL_ERROR "factory-data alias does not exist in DTS")
endif()
dt_reg_addr(factory_data_addr PATH ${factory_data_alias})
dt_reg_size(factory_data_size PATH ${factory_data_alias})
dt_nodelabel(factory_data_partition_path TARGET ${DEFAULT_IMAGE} NODELABEL "factory_data_partition" REQUIRED)
dt_reg_addr(factory_data_addr TARGET ${DEFAULT_IMAGE} PATH ${factory_data_partition_path})
dt_reg_size(factory_data_size TARGET ${DEFAULT_IMAGE} PATH ${factory_data_partition_path})
string(APPEND script_args "--offset ${factory_data_addr}\n")
string(APPEND script_args "--size ${factory_data_size}\n")
string(APPEND script_args "--size ${factory_data_size}\n")
endif()

# execute first script to create a JSON file
Expand Down Expand Up @@ -171,6 +206,10 @@ function(nrfconnect_generate_factory_data)
find_package(Python3 REQUIRED)

# CHIP_ROOT must be provided as a reference set all localization of scripts
if(NOT CHIP_ROOT AND ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR)
set(CHIP_ROOT ${ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR})
endif()

if(NOT CHIP_ROOT)
message(FATAL_ERROR "CHIP_ROOT variable is not set, please add it to CMakeLists.txt file")
endif()
Expand All @@ -179,23 +218,27 @@ endif()
set(FACTORY_DATA_SCRIPT_PATH ${CHIP_ROOT}/scripts/tools/nrfconnect/generate_nrfconnect_chip_factory_data.py)
set(GENERATE_CBOR_SCRIPT_PATH ${CHIP_ROOT}/scripts/tools/nrfconnect/nrfconnect_generate_partition.py)
set(FACTORY_DATA_SCHEMA_PATH ${CHIP_ROOT}/scripts/tools/nrfconnect/nrfconnect_factory_data.schema)
set(OUTPUT_FILE_PATH ${APPLICATION_BINARY_DIR}/zephyr)

if(SB_CONFIG_PARTITION_MANAGER OR CONFIG_PARTITION_MANAGER_ENABLED)
set(OUTPUT_FILE_PATH ${APPLICATION_BINARY_DIR}/zephyr)
else()
# Factory data is now a separate image, so we need to store output files in its build directory
# to be compatible with the whole system.
set(OUTPUT_FILE_PATH ${APPLICATION_BINARY_DIR}/matter_factory_data/zephyr)

import_kconfig("CONFIG" ${CMAKE_BINARY_DIR}/${DEFAULT_IMAGE}/zephyr/.config)
endif()

# create a .hex file with factory data in CBOR format based on the JSON file created previously
nrfconnect_create_factory_data(factory_data
${FACTORY_DATA_SCRIPT_PATH}
${FACTORY_DATA_SCHEMA_PATH}
${FACTORY_DATA_SCRIPT_PATH}
${FACTORY_DATA_SCHEMA_PATH}
${OUTPUT_FILE_PATH})

if(CONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE)
if(CONFIG_PARTITION_MANAGER_ENABLED)
# set custom target for merging factory_data hex file
set_property(GLOBAL PROPERTY factory_data_PM_HEX_FILE ${OUTPUT_FILE_PATH}/factory_data.hex)
set_property(GLOBAL PROPERTY factory_data_PM_TARGET factory_data)
else()
set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE ${OUTPUT_FILE_PATH}/factory_data.hex ${OUTPUT_FILE_PATH}/zephyr.hex)
set_property(TARGET runners_yaml_props_target PROPERTY hex_file ${OUTPUT_FILE_PATH}/merged.hex)
endif()
if(SB_CONFIG_PARTITION_MANAGER AND SB_CONFIG_MATTER_FACTORY_DATA_MERGE_WITH_FIRMWARE)
# set custom target for merging factory_data hex file
set_property(GLOBAL PROPERTY factory_data_PM_HEX_FILE ${OUTPUT_FILE_PATH}/factory_data.hex)
set_property(GLOBAL PROPERTY factory_data_PM_TARGET factory_data)
endif()


Expand Down
Loading
Loading