Restructure fwu-app deployment
Change fwu-app deployment to be more consistent to existing
deployments:
- change fwu-app to be a dedicated deployment instead of a
configuration of an SP. Change the name to "fwu-tool".
Change the name of the executable to the same.
- delete posix environment and:
- move posix trace implementation to linux-pc environment
- move deployment specific files to the deployment directory
- move fwu-app common files from components/service/fwu/app to
the new deployment, under src/app
Change-Id: Icf68d39bda34092807f33256f540389cd82d0a46
Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
diff --git a/deployments/fwu-tool/file-block-store.cmake b/deployments/fwu-tool/file-block-store.cmake
new file mode 100644
index 0000000..ea1590b
--- /dev/null
+++ b/deployments/fwu-tool/file-block-store.cmake
@@ -0,0 +1,33 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Lists components that provide an infrastructure layer for the block-storage
+# service provider that uses a ram-backed block store, partitioned by default
+# using the 'ref' configuration. This infrastructure is intended for test
+# purposes.
+#-------------------------------------------------------------------------------
+if (NOT DEFINED TGT)
+ message(FATAL_ERROR "Mandatory parameter TGT is not defined.")
+endif()
+
+#-------------------------------------------------------------------------------
+# Infrastructure components
+#
+#-------------------------------------------------------------------------------
+add_components(TARGET ${TGT}
+ BASE_DIR ${TS_ROOT}
+ COMPONENTS
+ "components/media/disk"
+ "components/media/volume"
+ "components/media/volume/base_io_dev"
+ "components/media/volume/block_volume"
+ "components/media/volume/factory/single_flash"
+ "components/service/block_storage/block_store"
+ "components/service/block_storage/block_store/device"
+ "components/service/block_storage/block_store/device/file"
+ "components/service/block_storage/block_store/partitioned"
+ "components/service/block_storage/factory/file"
+ "components/service/block_storage/config/gpt"
+)
\ No newline at end of file
diff --git a/deployments/fwu-tool/fwu.cmake b/deployments/fwu-tool/fwu.cmake
new file mode 100644
index 0000000..d9cac39
--- /dev/null
+++ b/deployments/fwu-tool/fwu.cmake
@@ -0,0 +1,55 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Common components used for any deployment of the fwu service provider.
+#-------------------------------------------------------------------------------
+
+if (NOT DEFINED TGT)
+ message(FATAL_ERROR "Mandatory parameter TGT is not defined.")
+endif()
+
+#-------------------------------------------------------------------------------
+# Components common to all deployments
+#
+#-------------------------------------------------------------------------------
+add_components(TARGET ${TGT}
+ BASE_DIR ${TS_ROOT}
+ COMPONENTS
+ "components/app/fwu-tool"
+ "components/common/uuid"
+ "components/common/endian"
+ "components/media/disk/gpt_iterator"
+ "components/media/volume/index"
+ "components/service/common/include"
+ "components/service/fwu/agent"
+ "components/service/fwu/config"
+ "components/service/fwu/config/gpt"
+ "components/service/fwu/fw_store/banked"
+ "components/service/fwu/fw_store/banked/metadata_serializer/v1"
+ "components/service/fwu/fw_store/banked/metadata_serializer/v2"
+ "components/service/fwu/installer"
+ "components/service/fwu/installer/raw"
+ "components/service/fwu/installer/copy"
+ "components/service/fwu/installer/factory/default"
+ "components/service/fwu/inspector/direct"
+)
+
+#################################################################
+
+target_include_directories(${TGT} PRIVATE
+ ${TS_ROOT}
+ ${TS_ROOT}/components
+)
+
+#-------------------------------------------------------------------------------
+# Define install content.
+#
+#-------------------------------------------------------------------------------
+if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
+endif()
+install(TARGETS ${TGT}
+ RUNTIME DESTINATION ${TS_ENV}/bin
+ PUBLIC_HEADER DESTINATION ${TS_ENV}/include)
diff --git a/deployments/fwu/config/fwu-app-linux-pc/CMakeLists.txt b/deployments/fwu-tool/linux-pc/CMakeLists.txt
similarity index 78%
rename from deployments/fwu/config/fwu-app-linux-pc/CMakeLists.txt
rename to deployments/fwu-tool/linux-pc/CMakeLists.txt
index 416ee01..e0948c0 100644
--- a/deployments/fwu/config/fwu-app-linux-pc/CMakeLists.txt
+++ b/deployments/fwu-tool/linux-pc/CMakeLists.txt
@@ -5,23 +5,24 @@
#
#-------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
-include(../../../deployment.cmake REQUIRED)
+include(../../deployment.cmake REQUIRED)
#-------------------------------------------------------------------------------
-# The CMakeLists.txt for building the fwu deployment for linux-pc
+# The CMakeLists.txt for building the fwu-tool deployment for linux-pc
#
# This configuration builds the FWU update agent into a command-line app
# that can be used to apply updates to disk image files.
#-------------------------------------------------------------------------------
project(trusted-services LANGUAGES CXX C)
-add_executable(fwu)
-target_include_directories(fwu PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
+add_executable(fwu-tool)
+set(TGT "fwu-tool")
+target_include_directories(fwu-tool PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
#-------------------------------------------------------------------------------
# Configure trace output for command-line app
#
#-------------------------------------------------------------------------------
-set(TRACE_PREFIX "FWU" CACHE STRING "Trace prefix")
+set(TRACE_PREFIX "fwu-tool" CACHE STRING "Trace prefix")
set(TRACE_LEVEL "TRACE_LEVEL_DEBUG" CACHE STRING "Trace level")
#-------------------------------------------------------------------------------
@@ -30,7 +31,7 @@
#-------------------------------------------------------------------------------
# Scale number of partitions for pretty complicated fw images
-target_compile_definitions("fwu" PRIVATE
+target_compile_definitions(${TGT} PRIVATE
PARTITIONED_BLOCK_STORE_MAX_PARTITIONS=24)
#-------------------------------------------------------------------------------
@@ -38,18 +39,21 @@
#
#-------------------------------------------------------------------------------
include(${TS_ROOT}/environments/linux-pc/env.cmake)
+add_components(TARGET ${TGT}
+ BASE_DIR ${TS_ROOT}
+ COMPONENTS "environments/linux-pc"
+)
#-------------------------------------------------------------------------------
# External project source-level dependencies
#
#-------------------------------------------------------------------------------
include(${TS_ROOT}/external/tf_a/tf-a.cmake)
-add_tfa_dependency(TARGET "fwu")
+add_tfa_dependency(TARGET ${TGT})
#-------------------------------------------------------------------------------
# Deployment specific components
#
#-------------------------------------------------------------------------------
-include(../../env/posix/fwu-posix.cmake REQUIRED)
-include(../../fwu.cmake REQUIRED)
-include(../../infra/file-block-store.cmake REQUIRED)
+include(../fwu.cmake REQUIRED)
+include(../file-block-store.cmake REQUIRED)
diff --git a/deployments/fwu/env/posix/cmd_print_image_dir.cpp b/deployments/fwu/env/posix/cmd_print_image_dir.cpp
deleted file mode 100644
index 1e07027..0000000
--- a/deployments/fwu/env/posix/cmd_print_image_dir.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "cmd_print_image_dir.h"
-
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
-#include <vector>
-
-#include "common/uuid/uuid.h"
-#include "print_uuid.h"
-#include "protocols/service/fwu/packed-c/fwu_proto.h"
-
-void cmd_print_image_dir(fwu_app &app)
-{
- std::vector<uint8_t> fetched_object;
- struct uuid_octets object_uuid;
-
- uuid_guid_octets_from_canonical(&object_uuid, FWU_DIRECTORY_CANONICAL_UUID);
-
- int status = app.read_object(object_uuid, fetched_object);
-
- if (status) {
- printf("Error: failed to read image directory\n");
- return;
- }
-
- if (fetched_object.size() < offsetof(ts_fwu_image_directory, img_info_entry)) {
- printf("Error: invalid image directory size\n");
- return;
- }
-
- const struct ts_fwu_image_directory *img_dir =
- (const struct ts_fwu_image_directory *)fetched_object.data();
-
- printf("\nimage_directory (size %zu bytes) :\n", fetched_object.size());
- printf("\tdirectory_version : %d\n", img_dir->directory_version);
- printf("\tnum_images : %d\n", img_dir->num_images);
- printf("\tcorrect_boot : %d\n", img_dir->correct_boot);
-
- for (unsigned int i = 0; i < img_dir->num_images; i++) {
- printf("\timg_info_entry[%u]:\n", i);
- printf("\t\timg_type_uuid : %s\n",
- print_uuid(img_dir->img_info_entry[i].img_type_uuid).c_str());
- printf("\t\tclient_permissions : 0x%x\n",
- img_dir->img_info_entry[i].client_permissions);
- printf("\t\timg_max_size : %d\n", img_dir->img_info_entry[i].img_max_size);
- printf("\t\tlowest_accepted_version : %d\n",
- img_dir->img_info_entry[i].lowest_accepted_version);
- printf("\t\timg_version : %d\n", img_dir->img_info_entry[i].img_version);
- printf("\t\taccepted : %d\n", img_dir->img_info_entry[i].accepted);
- }
-}
diff --git a/deployments/fwu/env/posix/cmd_print_image_dir.h b/deployments/fwu/env/posix/cmd_print_image_dir.h
deleted file mode 100644
index 7ae2e01..0000000
--- a/deployments/fwu/env/posix/cmd_print_image_dir.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef CMD_PRINT_IMAGE_DIR_H
-#define CMD_PRINT_IMAGE_DIR_H
-
-#include "service/fwu/app/fwu_app.h"
-
-void cmd_print_image_dir(fwu_app &app);
-
-#endif /* CMD_PRINT_IMAGE_DIR_H */
diff --git a/deployments/fwu/env/posix/cmd_print_metadata_v1.cpp b/deployments/fwu/env/posix/cmd_print_metadata_v1.cpp
deleted file mode 100644
index 6539e57..0000000
--- a/deployments/fwu/env/posix/cmd_print_metadata_v1.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "cmd_print_metadata_v1.h"
-
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
-#include <vector>
-
-#include "common/uuid/uuid.h"
-#include "print_uuid.h"
-#include "protocols/service/fwu/packed-c/fwu_proto.h"
-#include "protocols/service/fwu/packed-c/metadata_v1.h"
-
-void cmd_print_metadata_v1(fwu_app &app)
-{
- std::vector<uint8_t> fetched_object;
- struct uuid_octets object_uuid;
-
- uuid_guid_octets_from_canonical(&object_uuid, FWU_METADATA_CANONICAL_UUID);
-
- int status = app.read_object(object_uuid, fetched_object);
-
- if (status) {
- printf("Error: failed to read metadata\n");
- return;
- }
-
- if (fetched_object.size() < sizeof(struct fwu_metadata)) {
- printf("Error: invalid metadata size\n");
- return;
- }
-
- const struct fwu_metadata *metadata = (const struct fwu_metadata *)fetched_object.data();
-
- printf("\nfwu_metadata (size %zu bytes) :\n", fetched_object.size());
- printf("\tcrc_32 : 0x%x\n", metadata->crc_32);
- printf("\tversion : %d\n", metadata->version);
- printf("\tactive_index : %d\n", metadata->active_index);
- printf("\tprevious_active_index : %d\n", metadata->previous_active_index);
-
- for (unsigned int i = 0; i < FWU_METADATA_NUM_IMAGE_ENTRIES; i++) {
- printf("\timg_entry[%u]:\n", i);
- printf("\t\timg_type_uuid : %s\n",
- print_uuid(metadata->img_entry[i].img_type_uuid).c_str());
- printf("\t\tlocation_uuid : %s\n",
- print_uuid(metadata->img_entry[i].location_uuid).c_str());
-
- for (unsigned int bank_index = 0; bank_index < FWU_METADATA_NUM_BANKS;
- bank_index++) {
- printf("\t\timg_props[%u]:\n", bank_index);
- printf("\t\t\timg_uuid : %s\n",
- print_uuid(metadata->img_entry[i].img_props[bank_index].img_uuid)
- .c_str());
- printf("\t\t\taccepted : %d\n",
- metadata->img_entry[i].img_props[bank_index].accepted);
- }
- }
-}
diff --git a/deployments/fwu/env/posix/cmd_print_metadata_v1.h b/deployments/fwu/env/posix/cmd_print_metadata_v1.h
deleted file mode 100644
index c31ec68..0000000
--- a/deployments/fwu/env/posix/cmd_print_metadata_v1.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef CMD_PRINT_METADATA_V1_H
-#define CMD_PRINT_METADATA_V1_H
-
-#include "service/fwu/app/fwu_app.h"
-
-void cmd_print_metadata_v1(fwu_app &app);
-
-#endif /* CMD_PRINT_METADATA_V1_H */
diff --git a/deployments/fwu/env/posix/cmd_print_metadata_v2.cpp b/deployments/fwu/env/posix/cmd_print_metadata_v2.cpp
deleted file mode 100644
index 69e09d7..0000000
--- a/deployments/fwu/env/posix/cmd_print_metadata_v2.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "cmd_print_metadata_v2.h"
-
-#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
-#include <vector>
-
-#include "common/uuid/uuid.h"
-#include "print_uuid.h"
-#include "protocols/service/fwu/packed-c/fwu_proto.h"
-#include "protocols/service/fwu/packed-c/metadata_v2.h"
-
-void cmd_print_metadata_v2(fwu_app &app)
-{
- std::vector<uint8_t> fetched_object;
- struct uuid_octets object_uuid;
-
- uuid_guid_octets_from_canonical(&object_uuid, FWU_METADATA_CANONICAL_UUID);
-
- int status = app.read_object(object_uuid, fetched_object);
-
- if (status) {
- printf("Error: failed to read metadata\n");
- return;
- }
-
- if (fetched_object.size() < sizeof(struct fwu_metadata)) {
- printf("Error: invalid metadata size\n");
- return;
- }
-
- /* Print mandatory metadata header */
- const struct fwu_metadata *metadata = (const struct fwu_metadata *)fetched_object.data();
-
- printf("\nfwu_metadata (size %zu bytes) :\n", fetched_object.size());
- printf("\tcrc_32 : 0x%x\n", metadata->crc_32);
- printf("\tversion : %d\n", metadata->version);
- printf("\tmetadata_size : %d\n", metadata->metadata_size);
- printf("\theader_size : %d\n", metadata->header_size);
- printf("\tactive_index : %d\n", metadata->active_index);
- printf("\tprevious_active_index : %d\n", metadata->previous_active_index);
- printf("\tbank_state : 0x%x 0x%x\n", metadata->bank_state[0], metadata->bank_state[1]);
-
- if (metadata->metadata_size <= metadata->header_size)
- return;
-
- size_t fw_store_desc_size = metadata->metadata_size - metadata->header_size;
-
- if (fw_store_desc_size < sizeof(fwu_fw_store_desc)) {
- printf("\tInsufficient space for fw store descriptor\n");
- return;
- }
-
- /* Print optional fw store descriptor */
- struct fwu_fw_store_desc *fw_store_desc =
- (struct fwu_fw_store_desc *)&fetched_object[metadata->header_size];
-
- printf("\tfw_store_desc :\n");
- printf("\t\tnum_banks : %d\n", fw_store_desc->num_banks);
- printf("\t\tnum_images : %d\n", fw_store_desc->num_images);
- printf("\t\timg_entry_size : %d\n", fw_store_desc->img_entry_size);
- printf("\t\tbank_entry_size : %d\n", fw_store_desc->bank_entry_size);
-
- for (unsigned int i = 0; i < fw_store_desc->num_images; i++) {
- struct fwu_image_entry *img_entry = &fw_store_desc->img_entry[i];
-
- printf("\t\timg_entry[%u] :\n", i);
- printf("\t\t\timg_type_uuid : %s\n", print_uuid(img_entry->img_type_uuid).c_str());
- printf("\t\t\tlocation_uuid : %s\n", print_uuid(img_entry->location_uuid).c_str());
-
- for (unsigned int j = 0; j < fw_store_desc->num_banks; j++) {
- struct fwu_img_bank_info *bank_info = &img_entry->img_bank_info[j];
-
- printf("\t\t\timg_bank_info[%u] :\n", j);
- printf("\t\t\t\timg_uuid : %s\n", print_uuid(bank_info->img_uuid).c_str());
- printf("\t\t\t\taccepted : %d\n", bank_info->accepted);
- }
- }
-}
diff --git a/deployments/fwu/env/posix/cmd_print_metadata_v2.h b/deployments/fwu/env/posix/cmd_print_metadata_v2.h
deleted file mode 100644
index 5377212..0000000
--- a/deployments/fwu/env/posix/cmd_print_metadata_v2.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef CMD_PRINT_METADATA_V2_H
-#define CMD_PRINT_METADATA_V2_H
-
-#include "service/fwu/app/fwu_app.h"
-
-void cmd_print_metadata_v2(fwu_app &app);
-
-#endif /* CMD_PRINT_METADATA_V2_H */
diff --git a/deployments/fwu/env/posix/cmd_update_image.cpp b/deployments/fwu/env/posix/cmd_update_image.cpp
deleted file mode 100644
index 06c13a6..0000000
--- a/deployments/fwu/env/posix/cmd_update_image.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "cmd_update_image.h"
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-
-#include "common/uuid/uuid.h"
-
-int cmd_update_image(fwu_app &app, const std::string &img_type_uuid,
- const std::string &img_filename)
-{
- FILE *fp = fopen(img_filename.c_str(), "rb");
-
- if (!fp) {
- printf("Error: failed to open image file: %s\n", img_filename.c_str());
- return -1;
- }
-
- /* Get file size */
- fseek(fp, 0, SEEK_END);
- size_t img_size = ftell(fp);
- rewind(fp);
-
- /* Allocate buffer for image data */
- uint8_t *img_buf = (uint8_t *)malloc(img_size);
-
- if (!img_buf) {
- fclose(fp);
- printf("Error: failed to allocate image buffer\n");
- return -1;
- }
-
- /* Read file contents into buffer */
- if (fread(img_buf, 1, img_size, fp)) {
- fclose(fp);
- free(img_buf);
- printf("Error: failed to read image file\n");
- return -1;
- }
-
- fclose(fp);
-
- /* Apply update */
- struct uuid_octets uuid;
-
- uuid_guid_octets_from_canonical(&uuid, img_type_uuid.c_str());
-
- int status = app.update_image(uuid, img_buf, img_size);
-
- if (status)
- printf("Error: update image failed\n");
-
- free(img_buf);
-
- return status;
-}
diff --git a/deployments/fwu/env/posix/cmd_update_image.h b/deployments/fwu/env/posix/cmd_update_image.h
deleted file mode 100644
index 7091bd2..0000000
--- a/deployments/fwu/env/posix/cmd_update_image.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef CMD_UPDATE_IMAGE_H
-#define CMD_UPDATE_IMAGE_H
-
-#include <string>
-
-#include "service/fwu/app/fwu_app.h"
-
-int cmd_update_image(fwu_app &app, const std::string &img_type_uuid,
- const std::string &img_filename);
-
-#endif /* CMD_UPDATE_IMAGE_H */
diff --git a/deployments/fwu/env/posix/fwu-posix.cmake b/deployments/fwu/env/posix/fwu-posix.cmake
deleted file mode 100644
index 8818fb4..0000000
--- a/deployments/fwu/env/posix/fwu-posix.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-#-------------------------------------------------------------------------------
-# Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-# Includes components needed for deploying the fwu update_agent within a
-# Posix environment as a command-line application. Can be used to apply an
-# update to a disk image file. Uses the same fwu components as a fw deployment
-# of the fwu service.
-#-------------------------------------------------------------------------------
-
-#-------------------------------------------------------------------------------
-# Common components for fwu posix deployments
-#
-#-------------------------------------------------------------------------------
-add_components(TARGET "fwu"
- BASE_DIR ${TS_ROOT}
- COMPONENTS
- "environments/posix"
- "components/common/crc32/native"
- "components/common/trace"
- "components/common/utils"
- "components/service/fwu/app"
-)
-
-target_sources(fwu PRIVATE
- ${CMAKE_CURRENT_LIST_DIR}/fwu_main.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cmd_update_image.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cmd_print_image_dir.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cmd_print_metadata_v1.cpp
- ${CMAKE_CURRENT_LIST_DIR}/cmd_print_metadata_v2.cpp
- ${CMAKE_CURRENT_LIST_DIR}/print_uuid.cpp
-)
\ No newline at end of file
diff --git a/deployments/fwu/env/posix/fwu_main.cpp b/deployments/fwu/env/posix/fwu_main.cpp
deleted file mode 100644
index 88bac76..0000000
--- a/deployments/fwu/env/posix/fwu_main.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <sstream>
-#include <string>
-#include <sys/stat.h>
-
-#include "cmd_print_image_dir.h"
-#include "cmd_print_metadata_v1.h"
-#include "cmd_print_metadata_v2.h"
-#include "cmd_update_image.h"
-#include "common/uuid/uuid.h"
-#include "service/fwu/app/fwu_app.h"
-
-static bool option_selected(const char *option_switch, int argc, char *argv[]);
-
-static std::string parse_string_option(const char *option_switch, int argc, char *argv[],
- const char *default_val);
-
-static int parse_numeric_option(const char *option_switch, int argc, char *argv[], int default_val);
-
-static bool file_exists(const std::string &filename);
-
-static void print_usage(void);
-static void print_help(void);
-
-int main(int argc, char *argv[])
-{
- fwu_app app;
- std::string disk_img_filename;
- std::string update_img_filename;
- std::string img_type_uuid;
-
- /* Check for help */
- if (option_selected("-h", argc, argv) || option_selected("-help", argc, argv) ||
- option_selected("--help", argc, argv)) {
- print_help();
- return 0;
- }
-
- /* Handle mandatory disk image filename. Must be first argument */
- if (argc > 1)
- disk_img_filename = std::string(argv[1]);
- else {
- printf("Error: missing disk-filename argument\n");
- print_usage();
- return -1;
- }
-
- /* Check if disk image file exists */
- if (!file_exists(disk_img_filename)) {
- printf("Error: %s does not exist\n", disk_img_filename.c_str());
- return -1;
- }
-
- /* Create fwu configuration based on the input disk image */
- int status = app.configure(disk_img_filename.c_str());
-
- if (status) {
- printf("Error: failed to configure with status: %d\n", status);
- return -1;
- }
-
- /* Attempt to derive boot info from metadata. Assume bootloader booted from the
- * active index. This can be overridden via command-line parameter.
- */
- unsigned int boot_index;
- unsigned int metadata_version;
-
- status = app.get_boot_info(boot_index, metadata_version);
-
- if (status) {
- printf("No recognised metadata, assume default boot index and version\n");
-
- boot_index = 0;
- metadata_version = 2;
- }
-
- /* Allow for command-line overrides */
- boot_index = parse_numeric_option("-boot-index", argc, argv, boot_index);
- metadata_version = parse_numeric_option("-meta-ver", argc, argv, metadata_version);
-
- /* Options for printing fwu info */
- bool is_print_img_dir = option_selected("-dir", argc, argv);
- bool is_print_metadata = option_selected("-meta", argc, argv);
-
- /* Parse input image related parameters*/
- update_img_filename = parse_string_option("-img", argc, argv, "");
- img_type_uuid = parse_string_option("-img-type", argc, argv, "");
-
- /* Check if image file exists (if one was specified) */
- if (!update_img_filename.empty() && !file_exists(update_img_filename)) {
- printf("Error: %s does not exist\n", update_img_filename.c_str());
- return -1;
- }
-
- /* Check if img type canonical uuid is well formed */
- if (!img_type_uuid.empty() && !uuid_is_valid(img_type_uuid.c_str())) {
- printf("Error: image type uuid invalid\n");
- return -1;
- }
-
- /* Initialise the update_agent. Missing or corrupt metadata will get repaired
- */
- status = app.init_update_agent(boot_index, metadata_version);
-
- if (!status) {
- printf("Update agent started: boot index: %u metadata ver: %u\n", boot_index,
- metadata_version);
-
- if (is_print_img_dir)
- cmd_print_image_dir(app);
-
- if (is_print_metadata) {
- if (metadata_version == 1)
- cmd_print_metadata_v1(app);
- else if (metadata_version == 2)
- cmd_print_metadata_v2(app);
- else
- printf("Unsupported metadata version\n");
- }
-
- if (!update_img_filename.empty() && !img_type_uuid.empty()) {
- status = cmd_update_image(app, img_type_uuid, update_img_filename);
-
- } else if (!update_img_filename.empty() || !img_type_uuid.empty()) {
- printf("Error: both image filename and uuid arguments are needed\n");
- return -1;
- }
- }
-
- if (!status)
- printf("OK\n");
- else
- printf("Error status: %d\n", status);
-
- return status;
-}
-
-static bool option_selected(const char *option_switch, int argc, char *argv[])
-{
- bool is_selected = false;
-
- for (int i = 1; (i < argc) && !is_selected; ++i) {
- is_selected = (strcmp(argv[i], option_switch) == 0);
- }
-
- return is_selected;
-}
-
-static std::string parse_string_option(const char *option_switch, int argc, char *argv[],
- const char *default_val)
-{
- std::string option = std::string(default_val);
-
- for (int i = 1; i + 1 < argc; ++i) {
- if (strcmp(argv[i], option_switch) == 0) {
- option = std::string(argv[i + 1]);
- break;
- }
- }
-
- return option;
-}
-
-static int parse_numeric_option(const char *option_switch, int argc, char *argv[], int default_val)
-{
- int option = default_val;
-
- for (int i = 1; i + 1 < argc; ++i) {
- if (strcmp(argv[i], option_switch) == 0) {
- std::istringstream iss(argv[i + 1]);
- int val;
-
- iss >> val;
-
- if (!iss.fail())
- option = val;
-
- break;
- }
- }
-
- return option;
-}
-
-static bool file_exists(const std::string &filename)
-{
- struct stat stat_buf;
-
- return stat(filename.c_str(), &stat_buf) == 0;
-}
-
-static void print_usage(void)
-{
- printf("Usage: fwu disk-filename [-dir -meta] [-boot-index number -meta-ver number] "
- "[-img filename -img-type uuid]\n");
-}
-
-static void print_help(void)
-{
- print_usage();
-
- printf("\n");
- printf("\tdisk-filename\tDisk image file to update\n");
- printf("\t-dir\t\tPrint image directory\n");
- printf("\t-meta\t\tPrint FWU metadata\n");
- printf("\t-boot-index\tOverride default boot index [0..n]\n");
- printf("\t-meta-ver\tSpecify FWU metadata to use\n");
- printf("\t-img\t\tFile containing image update\n");
- printf("\t-img-type\tCanonical UUID of image to update\n");
-}
diff --git a/deployments/fwu/env/posix/print_uuid.cpp b/deployments/fwu/env/posix/print_uuid.cpp
deleted file mode 100644
index a65bac1..0000000
--- a/deployments/fwu/env/posix/print_uuid.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include "print_uuid.h"
-
-#include "common/uuid/uuid.h"
-
-std::string print_uuid(const uint8_t *uuid_octets)
-{
- struct uuid_canonical canonical_uuid;
-
- uuid_canonical_from_guid_octets(&canonical_uuid, (const struct uuid_octets *)uuid_octets);
-
- return std::string(canonical_uuid.characters);
-}
diff --git a/deployments/fwu/env/posix/print_uuid.h b/deployments/fwu/env/posix/print_uuid.h
deleted file mode 100644
index 2e94c85..0000000
--- a/deployments/fwu/env/posix/print_uuid.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (c) 2023, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#ifndef PRINT_UUID_H
-#define PRINT_UUID_H
-
-#include <cstdint>
-#include <string>
-
-std::string print_uuid(const uint8_t *uuid_octets);
-
-#endif /* PRINT_UUID_H */