Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

suit: Changes in build system for extracting images to caches #17058

Merged
merged 2 commits into from
Sep 5, 2024
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
32 changes: 32 additions & 0 deletions cmake/sysbuild/suit.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,38 @@ function(suit_create_package)
)
endforeach()

# First parse which images should be extracted to which cache partition
set(DFU_CACHE_PARTITIONS_USED "")
foreach(image ${IMAGES})
sysbuild_get(EXTRACT_TO_CACHE IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE KCONFIG)
if(EXTRACT_TO_CACHE)
sysbuild_get(CACHE_PARTITION_NUM IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_PARTITION KCONFIG)
list(APPEND DFU_CACHE_PARTITIONS_USED ${CACHE_PARTITION_NUM})
list(APPEND SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM} ${image})
endif()
endforeach()
list(REMOVE_DUPLICATES DFU_CACHE_PARTITIONS_USED)

# Then create the cache partitions
foreach(CACHE_PARTITION_NUM ${DFU_CACHE_PARTITIONS_USED})
set(CACHE_CREATE_ARGS "")
foreach(image ${SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM}})
sysbuild_get(BINARY_DIR IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE)
sysbuild_get(BINARY_FILE IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG)
sysbuild_get(IMAGE_CACHE_URI IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI KCONFIG)
list(APPEND CACHE_CREATE_ARGS
"--input" "\"${IMAGE_CACHE_URI},${BINARY_DIR}/zephyr/${BINARY_FILE}.bin\""
)
endforeach()
list(APPEND CACHE_CREATE_ARGS "--output-file" "${SUIT_ROOT_DIRECTORY}dfu_cache_partition_${CACHE_PARTITION_NUM}.bin")

if(SUIT_DFU_CACHE_PARTITION_${CACHE_PARTITION_NUM}_EB_SIZE)
list(APPEND CACHE_CREATE_ARGS "--eb-size" "${SUIT_DFU_CACHE_PARTITION_${CACHE_PARTITION_NUM}_EB_SIZE}")
endif()

suit_create_cache_partition("${CACHE_CREATE_ARGS}")
endforeach()

suit_get_manifest(${SB_CONFIG_SUIT_ENVELOPE_ROOT_TEMPLATE_FILENAME} INPUT_ROOT_ENVELOPE_JINJA_FILE)
message(STATUS "Found root manifest template: ${INPUT_ROOT_ENVELOPE_JINJA_FILE}")

Expand Down
10 changes: 10 additions & 0 deletions cmake/sysbuild/suit_utilities.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,13 @@ function(suit_create_envelope input_file output_file create_signature)
suit_sign_envelope(${output_file} ${output_file})
endif()
endfunction()

function(suit_create_cache_partition args)
set_property(
GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS
COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT}
cache_create
${args}
BYPRODUCTS ${output_file}
)
endfunction()
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,11 @@ SUIT_Envelope_Tagged:
suit-install:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ application['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
Expand Down Expand Up @@ -125,7 +129,11 @@ SUIT_Envelope_Tagged:
suit-candidate-verification:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ application['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
Expand Down Expand Up @@ -158,5 +166,7 @@ SUIT_Envelope_Tagged:
suit-text-model-info: The nRF54H20 application core
suit-text-component-description: Sample application core FW
suit-text-component-version: v1.0.0
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
suit-integrated-payloads:
'#{{ application['name'] }}': {{ application['binary'] }}
{%- endif %}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,11 @@ SUIT_Envelope_Tagged:
suit-install:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ radio['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
Expand Down Expand Up @@ -130,7 +134,11 @@ SUIT_Envelope_Tagged:
suit-candidate-verification:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ radio['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
Expand Down Expand Up @@ -163,5 +171,8 @@ SUIT_Envelope_Tagged:
suit-text-model-info: The nRF54H20 radio core
suit-text-component-description: Sample radio core FW
suit-text-component-version: v1.0.0

{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in radio['config'] or radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
suit-integrated-payloads:
'#{{ radio['name'] }}': {{ radio['binary'] }}
{%- endif %}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,11 @@ SUIT_Envelope_Tagged:
{%- endif %}
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ application['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
Expand Down Expand Up @@ -154,7 +158,9 @@ SUIT_Envelope_Tagged:
suit-text-component-description: Sample application core FW
suit-text-component-version: v1.0.0
suit-integrated-payloads:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
'#{{ application['name'] }}': {{ application['binary'] }}
{%- endif %}
{%- if flash_companion is defined %}
'#{{ flash_companion['name'] }}': {{ flash_companion['binary'] }}
{%- endif %}
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ SUIT_Envelope_Tagged:
suit-install:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ radio['name'] }}'
{%- endif %}
- suit-directive-fetch:
- suit-send-record-failure
- suit-condition-image-match:
Expand Down Expand Up @@ -112,5 +116,7 @@ SUIT_Envelope_Tagged:
suit-text-model-info: The nRF54H20 radio core
suit-text-component-description: Sample radio core FW
suit-text-component-version: v1.0.0
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in radio['config'] or radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
suit-integrated-payloads:
'#{{ radio['name'] }}': {{ radio['binary'] }}
{%- endif %}
19 changes: 19 additions & 0 deletions samples/suit/smp_transfer/sample.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,22 @@ tests:
- OVERLAY_CONFIG="sysbuild/smp_transfer_bt.conf"
- SB_OVERLAY_CONFIG="sysbuild_bt.conf"
tags: suit bluetooth ci_samples_suit

sample.suit.smp_transfer.full.extflash.extracted_cache:
extra_args:
- FILE_SUFFIX=extflash
- SUIT_DFU_CACHE_PARTITION_1_EB_SIZE=4096
extra_configs:
- CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE=y
tags: suit ci_samples_suit

sample.suit.smp_transfer.full.extflash.bt.extracted_cache:
extra_args:
- FILE_SUFFIX=extflash
- OVERLAY_CONFIG="sysbuild/smp_transfer_bt.conf"
- SB_OVERLAY_CONFIG="sysbuild_bt.conf"
- SUIT_DFU_CACHE_PARTITION_1_EB_SIZE=4096
- hci_ipc_CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE=y
extra_configs:
- CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE=y
tags: suit bluetooth ci_samples_suit
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,14 @@ SUIT_Envelope_Tagged:
suit-current-version: {{ DEFAULT_VERSION }}
{%- endif %}

{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
suit-payload-fetch:
- suit-directive-set-component-index: 2
- suit-directive-override-parameters:
suit-parameter-uri: 'file://{{ application['filename'] }}'
- suit-directive-fetch:
- suit-send-record-failure
{%- endif %}
suit-install:
{%- if flash_companion is defined %}
- suit-directive-set-component-index: 1
Expand Down Expand Up @@ -123,7 +125,11 @@ SUIT_Envelope_Tagged:
{%- endif %}
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: 'file://{{ application['filename'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,22 @@ SUIT_Envelope_Tagged:
suit-current-version: {{ DEFAULT_VERSION }}
{%- endif %}

{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in radio['config'] or radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
suit-payload-fetch:
- suit-directive-set-component-index: 2
- suit-directive-override-parameters:
suit-parameter-uri: 'file://{{ radio['filename'] }}'
- suit-directive-fetch:
- suit-send-record-failure
{%- endif %}
suit-install:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: 'file://{{ radio['filename'] }}'
{%- endif %}
- suit-directive-fetch:
- suit-send-record-failure
- suit-condition-image-match:
Expand Down
2 changes: 1 addition & 1 deletion west.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ manifest:
upstream-sha: c6eaeda5a1c1c5dbb24dce7e027340cb8893a77b
compare-by-default: false
- name: suit-generator
revision: 97ef5bdd41716aa7fa21a0f0c149a66d1f91ab8d
revision: 4372d27e940798cb596d18d90affa9d62d9d2564
path: modules/lib/suit-generator
- name: suit-processor
revision: ee58d543994256d545c692e14badf3efa9830237
Expand Down
Loading