I'm developing a custom bootloader with OTA switching, rollback, firmware validation, and a few other features.
Machine: Win11
System: ESP-IDF v5.3.1
I want to use the `esp_partition.h` library, but when I include it, I get an error saying that `esp_system.h` is missing.
So I added `esp_system.h` manually to my includes – but the error persists. I'm not sure why this is happening, and I've been stuck with this issue for a few days now.
project structure:
project_root\bootloader_components\main\*all .c files incl. CMakeLists*
project_root\bootloader_components\main\include\*all .h files*
project_root\main\dummy_app.c
project_root\main\CMakeLists
project_root\CMakeLists
project_root\partition_table\partitions.csv
Relevant CMakeLists.txt (inside bootloader_components/main)
Code: Select all
idf_component_register(
SRCS
"bootloader_main.c"
"gpio_boot.c"
"uart_boot.c"
"rtc_boot.c"
"validation_boot.c"
"nvs_boot.c"
INCLUDE_DIRS
"include"
REQUIRES
bootloader_support
esp_partition
log
esp_system
)
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u call_start_cpu0")
set(BOOT_LD "${IDF_PATH}/components/bootloader/subproject/main/ld/${IDF_TARGET}/bootloader.ld")
set(BOOT_ROM_LD "${IDF_PATH}/components/bootloader/subproject/main/ld/${IDF_TARGET}/bootloader.rom.ld")
target_link_options(${COMPONENT_LIB} INTERFACE
"-T${BOOT_LD}"
"-T${BOOT_ROM_LD}")
Code: Select all
#include "validation_boot.h"
#include "esp_log.h"
#include "esp_partition.h"
#include "esp_image_format.h"
esp_partition_read()
esp_partition_find_first()
esp_image_verify()
Code: Select all
[7/9] Performing build step for 'bootloader'
FAILED: bootloader-prefix/src/bootloader-stamp/bootloader-build bootloader/bootloader.elf bootloader/bootloader.bin bootloader/bootloader.map C:/Users/WiFi_Chip_Bootloader/build/bootloader-prefix/src/bootloader-stamp/bootloader-build C:/Users/WiFi_Chip_Bootloader/build/bootloader/bootloader.elf C:/Users/WiFi_Chip_Bootloader/build/bootloader/bootloader.bin C:/Users/WiFi_Chip_Bootloader/build/bootloader/bootloader.map
cmd.exe /C "cd /D C:\Users\WiFi_Chip_Bootloader\build\bootloader && C:\Users\.espressif\tools\cmake\3.24.0\bin\cmake.exe --build ."
[93/121] Building C object esp-idf/app_update/CMakeFiles/__idf_app_update.dir/esp_ota_ops.c.obj
FAILED: esp-idf/app_update/CMakeFiles/__idf_app_update.dir/esp_ota_ops.c.obj
C:\Users\.espressif\tools\riscv32-esp-elf\esp-13.2.0_20240530\riscv32-esp-elf\bin\riscv32-esp-elf-gcc.exe -DBOOTLOADER_BUILD=1 -DESP_PLATFORM -DIDF_VER=\"v5.3.1-dirty\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -IC:/Users/WiFi_Chip_Bootloader/build/bootloader/config -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/app_update/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/log/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_rom/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_rom/include/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_rom/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_common/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/include/soc -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/include/soc/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/dma/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/ldo/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/port/esp32c6/. -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/port/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/port/esp32c6/private_include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/newlib/platform_include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/riscv/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/soc/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/soc/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/soc/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader_support/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader_support/bootloader_flash/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader_support/private_include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_app_format/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_bootloader_format/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_partition/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/efuse/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/efuse/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/spi_flash/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/hal/platform_port/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/hal/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/hal/include -march=rv32imac_zicsr_zifencei -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -nostartfiles -Os -freorder-blocks -fmacro-prefix-map=C:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader/subproject=. -fmacro-prefix-map=C:/Espressif/frameworks/esp-idf-v5.3.1=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -fno-stack-protector -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/app_update/CMakeFiles/__idf_app_update.dir/esp_ota_ops.c.obj -MF esp-idf\app_update\CMakeFiles\__idf_app_update.dir\esp_ota_ops.c.obj.d -o esp-idf/app_update/CMakeFiles/__idf_app_update.dir/esp_ota_ops.c.obj -c C:/Espressif/frameworks/esp-idf-v5.3.1/components/app_update/esp_ota_ops.c
C:/Espressif/frameworks/esp-idf-v5.3.1/components/app_update/esp_ota_ops.c:29:10: fatal error: esp_system.h: No such file or directory
29 | #include "esp_system.h"
| ^~~~~~~~~~~~~~
compilation terminated.
[96/121] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/validation_boot.c.obj
FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/validation_boot.c.obj
C:\Users\.espressif\tools\riscv32-esp-elf\esp-13.2.0_20240530\riscv32-esp-elf\bin\riscv32-esp-elf-gcc.exe -DBOOTLOADER_BUILD=1 -DESP_PLATFORM -DIDF_VER=\"v5.3.1-dirty\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -IC:/Users/WiFi_Chip_Bootloader/build/bootloader/config -IC:/Users/WiFi_Chip_Bootloader/bootloader_components/main/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/log/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_rom/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_rom/include/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_rom/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_common/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/include/soc -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/include/soc/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/dma/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/ldo/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/port/esp32c6/. -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/port/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_hw_support/port/esp32c6/private_include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/newlib/platform_include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/riscv/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/soc/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/soc/esp32c6 -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/soc/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader_support/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader_support/bootloader_flash/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader_support/private_include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/esp_partition/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/spi_flash/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/hal/platform_port/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/hal/esp32c6/include -IC:/Espressif/frameworks/esp-idf-v5.3.1/components/hal/include -march=rv32imac_zicsr_zifencei -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -nostartfiles -Os -freorder-blocks -fmacro-prefix-map=C:/Espressif/frameworks/esp-idf-v5.3.1/components/bootloader/subproject=. -fmacro-prefix-map=C:/Espressif/frameworks/esp-idf-v5.3.1=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -fno-stack-protector -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/main/CMakeFiles/__idf_main.dir/validation_boot.c.obj -MF esp-idf\main\CMakeFiles\__idf_main.dir\validation_boot.c.obj.d -o esp-idf/main/CMakeFiles/__idf_main.dir/validation_boot.c.obj -c C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c: In function 'bootloader_validate_image':
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c:72:9: error: implicit declaration of function strcpy' [-Werror=implicit-function-declaration]
72 | strcpy(label, "factory");
| ^~~~~~
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c:4:1: note: include '<string.h>' or provide a declaration of 'strcpy'
3 | #include "esp_partition.h"
+++ |+#include <string.h>
4 | #include "esp_image_format.h"
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c:72:9: warning: incompatible implicit declaration of built-in function 'strcpy' [-Wbuiltin-declaration-mismatch]
72 | strcpy(label, "factory");
| ^~~~~~
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c:72:9: note: include '<string.h>' or provide a declaration of 'strcpy'
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c:77:9: warning: incompatible implicit declaration of built-in function 'strcpy' [-Wbuiltin-declaration-mismatch]
77 | strcpy(label, "test");
| ^~~~~~
C:/Users/WiFi_Chip_Bootloader/bootloader_components/main/validation_boot.c:77:9: note: include '<string.h>' or provide a declaration of 'strcpy'
cc1.exe: some warnings being treated as errors
[102/121] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/uart_boot.c.obj
ninja: build stopped: subcommand failed.
ninja: build stopped: subcommand failed.
Compilation failed because esp_ota_ops.c (in "app_update" component) includes esp_system.h, provided by esp_system component(s).
However, esp_system component(s) is not in the requirements list of "app_update".
To fix this, add esp_system to PRIV_REQUIRES list of idf_component_register call in C:\Espressif\frameworks\esp-idf-v5.3.1\components\app_update\CMakeLists.txt.
ninja failed with exit code 1, output of the command is in the C:\Users\WiFi_Chip_Bootloader\build\log\idf_py_stderr_output_27824 and C:\Users\WiFi_Chip_Bootloader\build\log\idf_py_stdout_output_27824
Thank you!
Hendrik
