Initial commit

Initial commit.
This commit is contained in:
kntran1
2026-03-23 14:40:39 -05:00
parent e84b2b4166
commit 4e2a5258a5
872 changed files with 165227 additions and 0 deletions

View File

@@ -0,0 +1,449 @@
/****************************************************************************
* boot/nuttx/include/flash_map_backend/flash_map_backend.h
*
* Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
****************************************************************************/
#ifndef __BOOT_NUTTX_INCLUDE_FLASH_MAP_BACKEND_FLASH_MAP_BACKEND_H
#define __BOOT_NUTTX_INCLUDE_FLASH_MAP_BACKEND_FLASH_MAP_BACKEND_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <inttypes.h>
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************
* Public Types
****************************************************************************/
/* Structure describing a flash area. */
struct flash_area
{
/* MCUboot-API fields */
uint8_t fa_id; /* The slot/scratch ID */
uint8_t fa_device_id; /* The device ID (usually there's only one) */
uint16_t pad16; /* Padding */
uint32_t fa_off; /* The flash offset from the beginning */
uint32_t fa_size; /* The size of this sector */
/* NuttX implementation-specific fields */
const char *fa_mtd_path; /* Path for the MTD partition */
};
/* Structure describing a sector within a flash area. */
struct flash_sector
{
/* Offset of this sector, from the start of its flash area (not device). */
uint32_t fs_off;
/* Size of this sector, in bytes. */
uint32_t fs_size;
};
/****************************************************************************
* Inline Functions
****************************************************************************/
/****************************************************************************
* Name: flash_area_get_id
*
* Description:
* Obtain the ID of a given flash area.
*
* Input Parameters:
* fa - Flash area.
*
* Returned Value:
* The ID of the requested flash area.
*
****************************************************************************/
static inline uint8_t flash_area_get_id(const struct flash_area *fa)
{
return fa->fa_id;
}
/****************************************************************************
* Name: flash_area_get_device_id
*
* Description:
* Obtain the ID of the device in which a given flash area resides on.
*
* Input Parameters:
* fa - Flash area.
*
* Returned Value:
* The device ID of the requested flash area.
*
****************************************************************************/
static inline uint8_t flash_area_get_device_id(const struct flash_area *fa)
{
return fa->fa_device_id;
}
/****************************************************************************
* Name: flash_area_get_sector
*
* Description:
* Retrieve the flash sector a given offset belongs to.
*
* Input Parameters:
* fap - flash area structure
* off - address offset.
* sector - flash sector
*
* Returned Value:
* Returns 0 on success, or an error code on failure.
*
****************************************************************************/
int flash_area_get_sector(const struct flash_area *fap, off_t off,
struct flash_sector *fs);
/****************************************************************************
* Name: flash_area_get_off
*
* Description:
* Obtain the offset, from the beginning of a device, where a given flash
* area starts at.
*
* Input Parameters:
* fa - Flash area.
*
* Returned Value:
* The offset value of the requested flash area.
*
****************************************************************************/
static inline uint32_t flash_area_get_off(const struct flash_area *fa)
{
return fa->fa_off;
}
/****************************************************************************
* Name: flash_area_get_size
*
* Description:
* Obtain the size, from the offset, of a given flash area.
*
* Input Parameters:
* fa - Flash area.
*
* Returned Value:
* The size value of the requested flash area.
*
****************************************************************************/
static inline uint32_t flash_area_get_size(const struct flash_area *fa)
{
return fa->fa_size;
}
/****************************************************************************
* Name: flash_sector_get_off
*
* Description:
* Obtain the offset, from the beginning of its flash area, where a given
* flash sector starts at.
*
* Input Parameters:
* fs - Flash sector.
*
* Returned Value:
* The offset value of the requested flash sector.
*
****************************************************************************/
static inline uint32_t flash_sector_get_off(const struct flash_sector *fs)
{
return fs->fs_off;
}
/****************************************************************************
* Name: flash_sector_get_size
*
* Description:
* Obtain the size, from the offset, of a given flash sector.
*
* Input Parameters:
* fs - Flash sector.
*
* Returned Value:
* The size in bytes of the requested flash sector.
*
****************************************************************************/
static inline uint32_t flash_sector_get_size(const struct flash_sector *fs)
{
return fs->fs_size;
}
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: flash_area_open
*
* Description:
* Retrieve flash area from the flash map for a given partition.
*
* Input Parameters:
* id - ID of the flash partition.
*
* Output Parameters:
* fa - Pointer which will contain the reference to flash_area.
* If ID is unknown, it will be NULL on output.
*
* Returned Value:
* Zero on success, or negative value in case of error.
*
****************************************************************************/
int flash_area_open(uint8_t id, const struct flash_area **fa);
/****************************************************************************
* Name: flash_area_close
*
* Description:
* Close a given flash area.
*
* Input Parameters:
* fa - Flash area to be closed.
*
* Returned Value:
* None.
*
****************************************************************************/
void flash_area_close(const struct flash_area *fa);
/****************************************************************************
* Name: flash_area_read
*
* Description:
* Read data from flash area.
* Area readout boundaries are asserted before read request. API has the
* same limitation regarding read-block alignment and size as the
* underlying flash driver.
*
* Input Parameters:
* fa - Flash area to be read.
* off - Offset relative from beginning of flash area to be read.
* len - Number of bytes to read.
*
* Output Parameters:
* dst - Buffer to store read data.
*
* Returned Value:
* Zero on success, or negative value in case of error.
*
****************************************************************************/
int flash_area_read(const struct flash_area *fa, uint32_t off,
void *dst, uint32_t len);
/****************************************************************************
* Name: flash_area_write
*
* Description:
* Write data to flash area.
* Area write boundaries are asserted before write request. API has the
* same limitation regarding write-block alignment and size as the
* underlying flash driver.
*
* Input Parameters:
* fa - Flash area to be written.
* off - Offset relative from beginning of flash area to be written.
* src - Buffer with data to be written.
* len - Number of bytes to write.
*
* Returned Value:
* Zero on success, or negative value in case of error.
*
****************************************************************************/
int flash_area_write(const struct flash_area *fa, uint32_t off,
const void *src, uint32_t len);
/****************************************************************************
* Name: flash_area_erase
*
* Description:
* Erase a given flash area range.
* Area boundaries are asserted before erase request. API has the same
* limitation regarding erase-block alignment and size as the underlying
* flash driver.
*
* Input Parameters:
* fa - Flash area to be erased.
* off - Offset relative from beginning of flash area to be erased.
* len - Number of bytes to be erase.
*
* Returned Value:
* Zero on success, or negative value in case of error.
*
****************************************************************************/
int flash_area_erase(const struct flash_area *fa, uint32_t off,
uint32_t len);
/****************************************************************************
* Name: flash_area_align
*
* Description:
* Get write block size of the flash area.
* Write block size might be treated as read block size, although most
* drivers support unaligned readout.
*
* Input Parameters:
* fa - Flash area.
*
* Returned Value:
* Alignment restriction for flash writes in the given flash area.
*
****************************************************************************/
uint32_t flash_area_align(const struct flash_area *fa);
/****************************************************************************
* Name: flash_area_erased_val
*
* Description:
* Get the value expected to be read when accessing any erased flash byte.
* This API is compatible with the MCUboot's porting layer.
*
* Input Parameters:
* fa - Flash area.
*
* Returned Value:
* Byte value of erased memory.
*
****************************************************************************/
uint8_t flash_area_erased_val(const struct flash_area *fa);
/****************************************************************************
* Name: flash_area_get_sectors
*
* Description:
* Retrieve info about sectors within the area.
*
* Input Parameters:
* fa_id - ID of the flash area whose info will be retrieved.
* count - On input, represents the capacity of the sectors buffer.
*
* Output Parameters:
* count - On output, it shall contain the number of retrieved sectors.
* sectors - Buffer for sectors data.
*
* Returned Value:
* Zero on success, or negative value in case of error.
*
****************************************************************************/
int flash_area_get_sectors(int fa_id, uint32_t *count,
struct flash_sector *sectors);
/****************************************************************************
* Name: flash_area_id_from_multi_image_slot
*
* Description:
* Return the flash area ID for a given slot and a given image index
* (in case of a multi-image setup).
*
* Input Parameters:
* image_index - Index of the image.
* slot - Image slot, which may be 0 (primary) or 1 (secondary).
*
* Returned Value:
* Flash area ID (0 or 1), or negative value in case the requested slot
* is invalid.
*
****************************************************************************/
int flash_area_id_from_multi_image_slot(int image_index, int slot);
/****************************************************************************
* Name: flash_area_id_from_image_slot
*
* Description:
* Return the flash area ID for a given slot.
*
* Input Parameters:
* slot - Image slot, which may be 0 (primary) or 1 (secondary).
*
* Returned Value:
* Flash area ID (0 or 1), or negative value in case the requested slot
* is invalid.
*
****************************************************************************/
int flash_area_id_from_image_slot(int slot);
/****************************************************************************
* Name: flash_area_id_to_multi_image_slot
*
* Description:
* Convert the specified flash area ID and image index (in case of a
* multi-image setup) to an image slot index.
*
* Input Parameters:
* image_index - Index of the image.
* area_id - Unique identifier that is represented by fa_id in the
* flash_area struct.
* Returned Value:
* Image slot index (0 or 1), or negative value in case ID doesn't
* correspond to an image slot.
*
****************************************************************************/
int flash_area_id_to_multi_image_slot(int image_index, int area_id);
/****************************************************************************
* Name: flash_area_id_from_image_offset
*
* Description:
* Return the flash area ID for a given image offset.
*
* Input Parameters:
* offset - Image offset.
*
* Returned Value:
* Flash area ID (0 or 1), or negative value in case the requested offset
* is invalid.
*
****************************************************************************/
int flash_area_id_from_image_offset(uint32_t offset);
#ifdef __cplusplus
}
#endif
#endif /* __BOOT_NUTTX_INCLUDE_FLASH_MAP_BACKEND_FLASH_MAP_BACKEND_H */

View File

@@ -0,0 +1,212 @@
/****************************************************************************
* boot/nuttx/include/mcuboot_config/mcuboot_config.h
*
* Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
****************************************************************************/
#ifndef __BOOT_NUTTX_INCLUDE_MCUBOOT_CONFIG_MCUBOOT_CONFIG_H
#define __BOOT_NUTTX_INCLUDE_MCUBOOT_CONFIG_MCUBOOT_CONFIG_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#ifdef CONFIG_MCUBOOT_WATCHDOG
# include "watchdog/watchdog.h"
#endif
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Signature types
*
* You must choose exactly one signature type.
*/
/* Uncomment for RSA signature support */
/* #define MCUBOOT_SIGN_RSA */
/* Uncomment for ECDSA signatures using curve P-256. */
/* #define MCUBOOT_SIGN_EC256 */
/* Upgrade mode
*
* The default is to support A/B image swapping with rollback. Other modes
* with simpler code path, which only supports overwriting the existing image
* with the update image or running the newest image directly from its flash
* partition, are also available.
*
* You can enable only one mode at a time from the list below to override
* the default upgrade mode.
*/
/* Use image swap without using scratch area.*/
#ifdef CONFIG_MCUBOOT_SWAP_USING_MOVE
# define MCUBOOT_SWAP_USING_MOVE 1
#endif
/* Enable the overwrite-only code path. */
#ifdef CONFIG_MCUBOOT_OVERWRITE_ONLY
# define MCUBOOT_OVERWRITE_ONLY
#endif
/* Only erase and overwrite those primary slot sectors needed
* to install the new image, rather than the entire image slot.
*/
#ifdef CONFIG_MCUBOOT_OVERWRITE_ONLY_FAST
# define MCUBOOT_OVERWRITE_ONLY_FAST
#endif
/* Enable the direct-xip code path. */
#ifdef CONFIG_MCUBOOT_DIRECT_XIP
# define MCUBOOT_DIRECT_XIP
#endif
/* Enable the revert mechanism in direct-xip mode. */
#ifdef CONFIG_MCUBOOT_DIRECT_XIP_REVERT
# define MCUBOOT_DIRECT_XIP_REVERT
#endif
/* Enable the ram-load code path. */
#ifdef CONFIG_MCUBOOT_RAM_LOAD
# define MCUBOOT_RAM_LOAD
#endif
/* Enable bootstrapping the erased primary slot from the secondary slot */
#ifdef CONFIG_MCUBOOT_BOOTSTRAP
# define MCUBOOT_BOOTSTRAP
#endif
/* Cryptographic settings
*
* You must choose between mbedTLS and Tinycrypt as source of
* cryptographic primitives. Other cryptographic settings are also
* available.
*/
#ifdef CONFIG_MCUBOOT_USE_MBED_TLS
# define MCUBOOT_USE_MBED_TLS
#endif
#ifdef CONFIG_MCUBOOT_USE_TINYCRYPT
# define MCUBOOT_USE_TINYCRYPT
#endif
/* Always check the signature of the image in the primary slot before
* booting, even if no upgrade was performed. This is recommended if the boot
* time penalty is acceptable.
*/
#define MCUBOOT_VALIDATE_PRIMARY_SLOT
/* Flash abstraction */
/* Uncomment if your flash map API supports flash_area_get_sectors().
* See the flash APIs for more details.
*/
#define MCUBOOT_USE_FLASH_AREA_GET_SECTORS
/* Default maximum number of flash sectors per image slot; change
* as desirable.
*/
#define MCUBOOT_MAX_IMG_SECTORS 512
/* Default number of separately updateable images; change in case of
* multiple images.
*/
#define MCUBOOT_IMAGE_NUMBER 1
/* Logging */
/* If logging is enabled the following functions must be defined by the
* platform:
*
* MCUBOOT_LOG_MODULE_REGISTER(domain)
* Register a new log module and add the current C file to it.
*
* MCUBOOT_LOG_MODULE_DECLARE(domain)
* Add the current C file to an existing log module.
*
* MCUBOOT_LOG_ERR(...)
* MCUBOOT_LOG_WRN(...)
* MCUBOOT_LOG_INF(...)
* MCUBOOT_LOG_DBG(...)
*
* The function priority is:
*
* MCUBOOT_LOG_ERR > MCUBOOT_LOG_WRN > MCUBOOT_LOG_INF > MCUBOOT_LOG_DBG
*/
#ifdef CONFIG_MCUBOOT_ENABLE_LOGGING
# define MCUBOOT_HAVE_LOGGING
#endif
/* Assertions */
/* Uncomment if your platform has its own mcuboot_config/mcuboot_assert.h.
* If so, it must provide an ASSERT macro for use by bootutil. Otherwise,
* "assert" is used.
*/
/* #define MCUBOOT_HAVE_ASSERT_H 1 */
/* Watchdog feeding */
/* This macro might be implemented if the OS / HW watchdog is enabled while
* doing a swap upgrade and the time it takes for a swapping is long enough
* to cause an unwanted reset. If implementing this, the OS main.c must also
* enable the watchdog (if required)!
*/
#ifdef CONFIG_MCUBOOT_WATCHDOG
#ifndef CONFIG_MCUBOOT_WATCHDOG_DEVPATH
# define CONFIG_MCUBOOT_WATCHDOG_DEVPATH "/dev/watchdog0"
#endif
#ifndef CONFIG_MCUBOOT_WATCHDOG_TIMEOUT
# define CONFIG_MCUBOOT_WATCHDOG_TIMEOUT 10000 /* Watchdog timeout in ms */
#endif
# define MCUBOOT_WATCHDOG_FEED() do \
{ \
mcuboot_watchdog_feed(); \
} \
while (0)
#else
# define MCUBOOT_WATCHDOG_FEED() do \
{ \
} \
while (0)
#endif
#endif /* __BOOT_NUTTX_INCLUDE_MCUBOOT_CONFIG_MCUBOOT_CONFIG_H */

View File

@@ -0,0 +1,48 @@
/****************************************************************************
* boot/nuttx/include/mcuboot_config/mcuboot_logging.h
*
* Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
****************************************************************************/
#ifndef __BOOT_NUTTX_INCLUDE_MCUBOOT_CONFIG_MCUBOOT_LOGGING_H
#define __BOOT_NUTTX_INCLUDE_MCUBOOT_CONFIG_MCUBOOT_LOGGING_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <syslog.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define MCUBOOT_LOG_MODULE_DECLARE(...)
#define MCUBOOT_LOG_MODULE_REGISTER(...)
#define MCUBOOT_LOG_ERR(format, ...) \
syslog(LOG_ERR, "%s: " format "\n", __FUNCTION__, ##__VA_ARGS__)
#define MCUBOOT_LOG_WRN(format, ...) \
syslog(LOG_WARNING, "%s: " format "\n", __FUNCTION__, ##__VA_ARGS__)
#define MCUBOOT_LOG_INF(format, ...) \
syslog(LOG_INFO, "%s: " format "\n", __FUNCTION__, ##__VA_ARGS__)
#define MCUBOOT_LOG_DBG(format, ...) \
syslog(LOG_DEBUG, "%s: " format "\n", __FUNCTION__, ##__VA_ARGS__)
#endif /* __BOOT_NUTTX_INCLUDE_MCUBOOT_CONFIG_MCUBOOT_LOGGING_H */

View File

@@ -0,0 +1,29 @@
/****************************************************************************
* boot/nuttx/include/os/os_malloc.h
*
* Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
****************************************************************************/
#ifndef __BOOT_NUTTX_INCLUDE_OS_OS_MALLOC_H
#define __BOOT_NUTTX_INCLUDE_OS_OS_MALLOC_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdlib.h>
#endif /* __BOOT_NUTTX_INCLUDE_OS_OS_MALLOC_H */

View File

@@ -0,0 +1,39 @@
/****************************************************************************
* boot/nuttx/include/sysflash/sysflash.h
*
* Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
****************************************************************************/
#ifndef __BOOT_NUTTX_INCLUDE_SYSFLASH_SYSFLASH_H
#define __BOOT_NUTTX_INCLUDE_SYSFLASH_SYSFLASH_H
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define PRIMARY_ID 0
#define SECONDARY_ID 1
#define SCRATCH_ID 2
#define FLASH_AREA_IMAGE_PRIMARY(x) (((x) == 0) ? \
PRIMARY_ID : \
PRIMARY_ID)
#define FLASH_AREA_IMAGE_SECONDARY(x) (((x) == 0) ? \
SECONDARY_ID : \
SECONDARY_ID)
#define FLASH_AREA_IMAGE_SCRATCH SCRATCH_ID
#endif /* __BOOT_NUTTX_INCLUDE_SYSFLASH_SYSFLASH_H */

View File

@@ -0,0 +1,65 @@
/****************************************************************************
* boot/nuttx/include/watchdog/watchdog.h
*
* Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
****************************************************************************/
#ifndef __BOOT_NUTTX_INCLUDE_WATCHDOG_WATCHDOG_H
#define __BOOT_NUTTX_INCLUDE_WATCHDOG_WATCHDOG_H
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: mcuboot_watchdog_feed
*
* Description:
* Reset the watchdog timer to the current timeout value, preventing any
* imminent watchdog timeouts.
*
* Input Parameters:
* None.
*
* Returned Value:
* None.
*
****************************************************************************/
void mcuboot_watchdog_feed(void);
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: mcuboot_watchdog_init
*
* Description:
* Initialize the watchdog timer by setting the trigger timeout and
* starting it.
*
* Input Parameters:
* None.
*
* Returned Value:
* OK on success, ERROR if not.
*
****************************************************************************/
int mcuboot_watchdog_init(void);
#endif /* __BOOT_NUTTX_INCLUDE_WATCHDOG_WATCHDOG_H */