Skip to content
  1. Jan 29, 2025
    • Ahmed Ismail's avatar
      Add ML Model component OTA update on keyword-detection application (#106) · 09fb523e
      Ahmed Ismail authored
      
      
      * sign-tfm-image: Refactor the CMake Module
      
      The `SignTfmImage.cmake` module is refactored to
      to accept an input binary name and an input signing
      layout file.
      
      These modifications are going to be used to sign the
      non_secure and the ML Model images separately which
      is essential to add the ML Model component OTA update
      feature.
      
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * fvp-options: Remove `--fast` option
      
      `--fast` FVP NPU option is removed as it's not
      completely supported by all platforms.
      
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * cs-300: Extract the ML model to a separate binary
      
      Eventually, we want the MCUBoot (and the rest of TF-M) to handle the ML
      model in the same way as other components. To achieve that, the ML model
      component will be kept in flash during boot, for the MCUBoot to validate
      the image, and perform the swap operation if needed.
      
      Since the Ethos NPU doesn't have access to flash, the model will be
      copied back to DDR at runtime. This is why the model is still kept in
      the DDR memory region in the linker script.
      
      Patches for the trusted_firmware-m component:
      - Add support for the third image for cs-300 platform.
      - Configure the signing layout for the ML model, and reuse the NS key.
      - Add a modified flash map for the cs-300, for the MCUBoot to handle the
      third image. This is based on the default flash layout used before.
      
      Signed-off-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * cs-310: Extract the ML model to a separate binary
      
      Eventually, we want the MCUBoot (and the rest of TF-M) to handle the ML
      model in the same way as other components. To achieve that, the ML model
      component will be kept in flash during boot, for the MCUBoot to validate
      the image, and perform the swap operation if needed.
      
      Since the Ethos NPU doesn't have access to flash, the model will be
      copied back to DDR at runtime. This is why the model is still kept in
      the DDR memory region in the linker script.
      
      Patches for the trusted_firmware-m component:
      - Add support for the third image for cs-310 platform.
      - Configure the signing layout for the ML model, and reuse the NS key.
      - Add a modified flash map for the cs-310, for the MCUBoot to handle the
      third image. This is based on the default flash layout used before.
      
      Signed-off-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      Signed-off-by: default avatardefault avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * mps4: Extract the ML model to a separate binary
      
      Eventually, we want the MCUBoot (and the rest of TF-M) to handle the ML
      model in the same way as other components. To achieve that, the ML model
      component will be kept in flash during boot, for the MCUBoot to validate
      the image, and perform the swap operation if needed.
      
      Since the Ethos NPU doesn't have access to flash, the model will be
      copied back to DDR at runtime. This is why the model is still kept in
      the DDR memory region in the linker script.
      
      Patches for the trusted_firmware-m component:
      - Add support for the third image for mps4 platforms.
      - Configure the signing layout for the ML model, and reuse the NS key.
      - Add a modified flash map for the mps4 platforms, for the MCUBoot to
      handle the third image. This is based on the default flash layout
      used before.
      
      These changes applies to both:
      * Corstone-315 Platform.
      * Corstone-320 Platform.
      
      Signed-off-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * keyword: Extract the ML model as a TF-M component
      
      keyword-detection example:
      - Configure the MCUBoot to work with 3 components instead of 2.
      - Configure the MCUBoot to use a non-default flash map.
      - Set the ML model image version.
      - Sign the ML model image using the same key as the NS image.
      - Generate an update signature for the ML model image.
      - At the ML task init, add a new step, where the ML model is copied from
      flash to DDR.
      - Update the merge images CMake function in TF-M integration
      layer to handle the third component (the ML model image).
      - Update the extract_sections_from_axf CMake function.
      
      Patches for the freertos_ota_pal_psa component:
      - Add the ML model file path.
      - Stop using a global variable to store the NS image version.
      - Fix the GetImageVersionPSA to return the version to an output param
      for any given component (rather than update the global var).
      
      Patches for the ml_embedded_evaluation_kit component:
      - Override EthosU55 NPU default IRQ handler to avoid modifying the
      vector table in run-time which alter the non-secure image result in
      MCUBoot validation failure.
      
      Additions for the OTA Orchestrator:
      - Stop using a global variable to store the NS image version.
      - Replace all the uses of the appFirmwareVersion global var with the
      appropriate call to the new image version getter.
      
      Signed-off-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * ml-update-demo: Update from a faulty model to a working one
      
      Add a modified tflite file that produces no inference results
      at runtime. This file can be used to build an application that
      is fully functional, but the ML inference is unsuccessful in
      detecting any keyword. Applying an OTA ML model update in this
      state is very visible since the updated model does work as
      expected (detects keywords from audio samples).
      
      Signed-off-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * freertos-integration-tests: Remove OTA update dependencies
      
      Since we don't run OTA tests as part of the intgeration tests
      anymore, we don't need to sign the update binary and there
      is no need to upload the update binary to AWS.
      
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      * ci: Add keyword-detection ML Model update nightly test
      
      Add a new nightly test to verify the ML model OTA update,
      this is done for Keyword-Detection application compiled with
      GNU toolchain only as this is the currently supported combination.
      This nightly test runs on all the Corstone platforms.
      
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      
      ---------
      
      Signed-off-by: default avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      Signed-off-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      Signed-off-by: default avatardefault avatarAhmed Ismail <Ahmed.Ismail@arm.com>
      Co-authored-by: Filip Jagodzinski's avatarFilip Jagodzinski <filip.jagodzinski@arm.com>
      09fb523e
  2. Jan 28, 2025
  3. Jan 13, 2025
  4. Jan 06, 2025
  5. Dec 21, 2024
  6. Dec 05, 2024
    • Chuyue Luo's avatar
      New modular OTA structure (#101) · 0048e5f3
      Chuyue Luo authored
      
      
      * components: Remove ota_for_aws_iot_embedded_sdk
      
      Remove the ota_for_aws_iot_embedded_sdk component, as we will be
      replacing it with the new modular OTA.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * applications: Add C Runtime Helpers
      
      Add a crt-helpers/ directory within applicatons/helpers. Within this
      directory, add a custom implementation of `strnlen` (based on TF-M's
      `tfm_strnlen` implementation). This is required because the Arm Compiler
      for Embedded (v6.21) does not support `strnlen`.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * components: Add Jobs-for-AWS-IoT-embedded-sdk component
      
      Add the Jobs-for-AWS-IoT-embedded-sdk repository as a submodule. This
      library is used to interact with AWS IoT Jobs (remote operations that
      are sent to and executed on devices connected to AWS IoT). It is one of
      the two libraries that must be integrated to allow the new modular OTA
      to be used - second library (aws-iot-core-mqtt-file-streams-embedded-c)
      is integrated in a later commit.
      
      In addition, the required integration CMake files to build the component
      are added.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * components: Add patches for Jobs-for-AWS-IoT-embedded-sdk library
      
      Two patches are added for the Jobs-for-AWS-IoT-embedded-sdk library:
      - The Jobs library assumes the OTA job is signed using ECDSA. However,
      we currently use RSA. Therefore, add a patch to change the check for an
      ECDSA signature to a check for an RSA signature.
      - The Jobs library contains calls to the `strnlen` function. However,
      this function is not supported by the Arm Compiler for Embedded (v6.21).
      Therefore, add a patch which replaces these calls with calls to our
      custom implementation `app_strnlen`.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * components: Add aws-iot-core-mqtt-file-streams-embedded-c component
      
      Add the aws-iot-core-mqtt-file-streams-embedded-c repository as a
      submodule. This library allows files from a stream (an abstraction for
      a list of files) to be transferred to an IoT device. It is the second of
      the two libraries that must be integrated to allow the new modular OTA
      to be used.
      
      In addition, the required integration CMake files to build the component
      are added.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * components: Add patch for MQTT File Streams library
      
      The aws-iot-core-mqtt-file-streams-embedded-c library uses the `strnlen`
      function, which is not supported by the Arm Compiler for Embedded
      (v6.21). Therefore, add a patch which replaces the call to `strnlen`
      with a call to our custom implementation `app_strnlen`.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * applications: Add MQTT File Downloader config for keyword detection
      
      THe MQTT File Streams library allows a MQTTFileDownloader_config.h file
      to be provided, which defines custom values for build configuration
      macros. This commit adds a MQTTFileDownloader_config.h file for the
      keyword detection example. This file defines the block size that should
      be used when downloading the firmware image.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * components: Add patch for FreeRTOS OTA PAL PSA
      
      Add a patch for FreeRTOS OTA PAL PSA to allow it to work with the new
      modular OTA structure. This patch does the following:
      - Update header includes to remove headers from the old
      ota-for-aws-iot-embedded-sdk library, replace these with headers from
      the new Jobs-for-AWS-IoT-embedded-sdk library
      - Remove usage of data structures from ota-for-aws-iot-embedded-sdk
      library, replace these with data structures from
      Jobs-for-AWS-IoT-embedded-sdk library.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * ota: Add OTA orchestrator
      
      Add an OTA orchestrator as a helper within the applications/ directory.
      The OTA orchestrator uses functionality from the Jobs and MQTT File
      Streaming libraries to enable OTA updates.
      
      In addition, update the keyword detection CMakeLists.txt to allow this
      example to use the new modular OTA.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * applications: New modular OTA for speech recognition example
      
      Update speech recognition CMakeLists.txt and add
      MQTTFileDownloader_config.h file to allow this example to use the new
      modular OTA.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * applications: New modular OTA for object detection example
      
      Update object detection CMakeLists.txt and add
      MQTTFileDownloader_config.h file to allow this example to use the new
      modular OTA.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      * applications: New modular OTA for FreeRTOS IoT Libraries Tests
      
      Update FreeRTOS IoT Libraries Tests CMakeLists.txt and add
      MQTTFileDownloader_config.h file to allow the tests to use the new
      modular OTA.
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      
      ---------
      
      Signed-off-by: default avatarChuyue Luo <Chuyue.Luo@arm.com>
      0048e5f3
  7. Nov 25, 2024
  8. Nov 04, 2024
  9. Oct 23, 2024
  10. Oct 22, 2024
  11. Oct 10, 2024
  12. Oct 09, 2024
  13. Sep 27, 2024
Loading