Skip to content

Commit 07fea6b

Browse files
ahasztagnordicjm
authored andcommitted
suit: Changes in build system for extracting images to caches
This commit introduces several changes which allow to severe firmware images from SUIT envelopes and extract them to raw cache files, which can then be flashed separately to the device. Signed-off-by: Artur Hadasz <[email protected]>
1 parent aa3f289 commit 07fea6b

File tree

7 files changed

+76
-1
lines changed

7 files changed

+76
-1
lines changed

cmake/sysbuild/suit.cmake

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,38 @@ function(suit_create_package)
261261
)
262262
endforeach()
263263

264+
# First parse which images should be extracted to which cache partition
265+
set(DFU_CACHE_PARTITIONS_USED "")
266+
foreach(image ${IMAGES})
267+
sysbuild_get(EXTRACT_TO_CACHE IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE KCONFIG)
268+
if(EXTRACT_TO_CACHE)
269+
sysbuild_get(CACHE_PARTITION_NUM IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_PARTITION KCONFIG)
270+
list(APPEND DFU_CACHE_PARTITIONS_USED ${CACHE_PARTITION_NUM})
271+
list(APPEND SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM} ${image})
272+
endif()
273+
endforeach()
274+
list(REMOVE_DUPLICATES DFU_CACHE_PARTITIONS_USED)
275+
276+
# Then create the cache partitions
277+
foreach(CACHE_PARTITION_NUM ${DFU_CACHE_PARTITIONS_USED})
278+
set(CACHE_CREATE_ARGS "")
279+
foreach(image ${SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM}})
280+
sysbuild_get(BINARY_DIR IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE)
281+
sysbuild_get(BINARY_FILE IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG)
282+
sysbuild_get(IMAGE_CACHE_URI IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI KCONFIG)
283+
list(APPEND CACHE_CREATE_ARGS
284+
"--input" "\"${IMAGE_CACHE_URI},${BINARY_DIR}/zephyr/${BINARY_FILE}.bin\""
285+
)
286+
endforeach()
287+
list(APPEND CACHE_CREATE_ARGS "--output-file" "${SUIT_ROOT_DIRECTORY}dfu_cache_partition_${CACHE_PARTITION_NUM}.bin")
288+
289+
if(SUIT_DFU_CACHE_PARTITION_${CACHE_PARTITION_NUM}_EB_SIZE)
290+
list(APPEND CACHE_CREATE_ARGS "--eb-size" "${SUIT_DFU_CACHE_PARTITION_${CACHE_PARTITION_NUM}_EB_SIZE}")
291+
endif()
292+
293+
suit_create_cache_partition("${CACHE_CREATE_ARGS}")
294+
endforeach()
295+
264296
suit_get_manifest(${SB_CONFIG_SUIT_ENVELOPE_ROOT_TEMPLATE_FILENAME} INPUT_ROOT_ENVELOPE_JINJA_FILE)
265297
message(STATUS "Found root manifest template: ${INPUT_ROOT_ENVELOPE_JINJA_FILE}")
266298

cmake/sysbuild/suit_utilities.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,13 @@ function(suit_create_envelope input_file output_file create_signature)
8787
suit_sign_envelope(${output_file} ${output_file})
8888
endif()
8989
endfunction()
90+
91+
function(suit_create_cache_partition args)
92+
set_property(
93+
GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS
94+
COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT}
95+
cache_create
96+
${args}
97+
BYPRODUCTS ${output_file}
98+
)
99+
endfunction()

config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ SUIT_Envelope_Tagged:
7777
suit-install:
7878
- suit-directive-set-component-index: 1
7979
- suit-directive-override-parameters:
80+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
81+
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
82+
{%- else %}
8083
suit-parameter-uri: '#{{ application['name'] }}'
84+
{%- endif %}
8185
suit-parameter-image-digest:
8286
suit-digest-algorithm-id: cose-alg-sha-256
8387
suit-digest-bytes:
@@ -125,7 +129,11 @@ SUIT_Envelope_Tagged:
125129
suit-candidate-verification:
126130
- suit-directive-set-component-index: 1
127131
- suit-directive-override-parameters:
132+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
133+
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
134+
{%- else %}
128135
suit-parameter-uri: '#{{ application['name'] }}'
136+
{%- endif %}
129137
suit-parameter-image-digest:
130138
suit-digest-algorithm-id: cose-alg-sha-256
131139
suit-digest-bytes:
@@ -158,5 +166,7 @@ SUIT_Envelope_Tagged:
158166
suit-text-model-info: The nRF54H20 application core
159167
suit-text-component-description: Sample application core FW
160168
suit-text-component-version: v1.0.0
169+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
161170
suit-integrated-payloads:
162171
'#{{ application['name'] }}': {{ application['binary'] }}
172+
{%- endif %}

config/suit/templates/nrf54h20/default/v1/rad_envelope.yaml.jinja2

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,11 @@ SUIT_Envelope_Tagged:
8282
suit-install:
8383
- suit-directive-set-component-index: 1
8484
- suit-directive-override-parameters:
85+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
86+
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
87+
{%- else %}
8588
suit-parameter-uri: '#{{ radio['name'] }}'
89+
{%- endif %}
8690
suit-parameter-image-digest:
8791
suit-digest-algorithm-id: cose-alg-sha-256
8892
suit-digest-bytes:
@@ -130,7 +134,11 @@ SUIT_Envelope_Tagged:
130134
suit-candidate-verification:
131135
- suit-directive-set-component-index: 1
132136
- suit-directive-override-parameters:
137+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
138+
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
139+
{%- else %}
133140
suit-parameter-uri: '#{{ radio['name'] }}'
141+
{%- endif %}
134142
suit-parameter-image-digest:
135143
suit-digest-algorithm-id: cose-alg-sha-256
136144
suit-digest-bytes:
@@ -163,5 +171,8 @@ SUIT_Envelope_Tagged:
163171
suit-text-model-info: The nRF54H20 radio core
164172
suit-text-component-description: Sample radio core FW
165173
suit-text-component-version: v1.0.0
174+
175+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in radio['config'] or radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
166176
suit-integrated-payloads:
167177
'#{{ radio['name'] }}': {{ radio['binary'] }}
178+
{%- endif %}

config/suit/templates/nrf54h20/matter/v1/app_envelope.yaml.jinja2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ SUIT_Envelope_Tagged:
115115
{%- endif %}
116116
- suit-directive-set-component-index: 1
117117
- suit-directive-override-parameters:
118+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
119+
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
120+
{%- else %}
118121
suit-parameter-uri: '#{{ application['name'] }}'
122+
{%- endif %}
119123
suit-parameter-image-digest:
120124
suit-digest-algorithm-id: cose-alg-sha-256
121125
suit-digest-bytes:
@@ -154,7 +158,9 @@ SUIT_Envelope_Tagged:
154158
suit-text-component-description: Sample application core FW
155159
suit-text-component-version: v1.0.0
156160
suit-integrated-payloads:
161+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
157162
'#{{ application['name'] }}': {{ application['binary'] }}
163+
{%- endif %}
158164
{%- if flash_companion is defined %}
159165
'#{{ flash_companion['name'] }}': {{ flash_companion['binary'] }}
160166
{%- endif %}

config/suit/templates/nrf54h20/matter/v1/rad_envelope.yaml.jinja2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ SUIT_Envelope_Tagged:
7878
suit-install:
7979
- suit-directive-set-component-index: 1
8080
- suit-directive-override-parameters:
81+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
82+
suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
83+
{%- else %}
8184
suit-parameter-uri: '#{{ radio['name'] }}'
85+
{%- endif %}
8286
- suit-directive-fetch:
8387
- suit-send-record-failure
8488
- suit-condition-image-match:
@@ -112,5 +116,7 @@ SUIT_Envelope_Tagged:
112116
suit-text-model-info: The nRF54H20 radio core
113117
suit-text-component-description: Sample radio core FW
114118
suit-text-component-version: v1.0.0
119+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in radio['config'] or radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
115120
suit-integrated-payloads:
116121
'#{{ radio['name'] }}': {{ radio['binary'] }}
122+
{%- endif %}

west.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ manifest:
254254
upstream-sha: c6eaeda5a1c1c5dbb24dce7e027340cb8893a77b
255255
compare-by-default: false
256256
- name: suit-generator
257-
revision: 97ef5bdd41716aa7fa21a0f0c149a66d1f91ab8d
257+
revision: 4372d27e940798cb596d18d90affa9d62d9d2564
258258
path: modules/lib/suit-generator
259259
- name: suit-processor
260260
revision: ee58d543994256d545c692e14badf3efa9830237

0 commit comments

Comments
 (0)