ESP-IDF搭建项目的目录结构

ESP-IDF 中组织项目,下面我将详细介绍 ESP-IDF 项目的目录结构,并指导您如何设计项目,以便整合之前提供的代码。


目录

  1. ESP-IDF 项目目录结构概述
  2. 创建 ESP-IDF 项目
  3. 项目目录结构详解
  4. 配置文件详解
  5. 设计您的项目目录结构
  6. 完整项目示例
  7. 编译、烧录与调试
  8. 总结

1. ESP-IDF 项目目录结构概述

ESP-IDF 使用基于 CMake 的构建系统,项目的目录结构通常包括以下部分:

  • 根目录:包含项目的总体配置文件,如 CMakeLists.txtsdkconfig 等。
  • main 目录:包含主要的应用程序代码和相关配置。
  • components 目录(可选):用于存放自定义组件,以模块化方式组织代码。

2. 创建 ESP-IDF 项目

您可以使用 ESP-IDF 提供的模板项目来创建新的项目。以下是创建项目的步骤:

  1. 复制模板项目

    cp -r $IDF_PATH/examples/get-started/hello_world ~/esp/my_project
    cd ~/esp/my_project
    
  2. 或使用 ESP-IDF 提供的命令创建新项目

    idf.py create-project my_project
    cd my_project
    

3. 项目目录结构详解

一个典型的 ESP-IDF 项目目录结构如下:

my_project/
├── CMakeLists.txt
├── sdkconfig
├── main/
│   ├── CMakeLists.txt
│   └── main.c
└── components/  (可选)

3.1 根目录

  • CMakeLists.txt:项目的顶级 CMake 配置文件。
  • sdkconfigmenuconfig 配置生成的项目配置文件。

3.2 main 目录

  • main.c:主应用程序代码。
  • CMakeLists.txt:main 目录的 CMake 配置文件。

3.3 components 目录(可选)

  • 用于存放自定义组件,以模块化方式组织代码。

4. 配置文件详解

4.1 CMakeLists.txt 文件

根目录的 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(my_project)

main 目录的 CMakeLists.txt

idf_component_register(SRCS "main.c"
                    INCLUDE_DIRS "."
                    REQUIRES esp_wifi esp_event nvs_flash driver websockets mbedtls)
  • SRCS:指定源文件列表。
  • INCLUDE_DIRS:指定头文件目录。
  • REQUIRES:指定项目依赖的组件。

4.2 Kconfig 文件

  • 如果您的项目需要自定义配置,可以在 main 目录下添加 Kconfig.projbuild 文件。

5. 设计您的项目目录结构

基于以上信息,您可以按照以下方式设计您的项目:

my_project/
├── CMakeLists.txt
├── sdkconfig
├── main/
│   ├── CMakeLists.txt
│   ├── main.c
│   ├── wifi.c
│   ├── wifi.h
│   ├── websocket_client.c
│   ├── websocket_client.h
│   ├── i2s_audio.c
│   ├── i2s_audio.h
│   └── Kconfig.projbuild  (如果需要)
└── components/  (可选)

5.1 组织代码文件

  • main.c:应用程序的入口点,包含 app_main() 函数。
  • wifi.c / wifi.h:Wi-Fi 连接相关的代码。
  • websocket_client.c / websocket_client.h:WebSocket 客户端的实现。
  • i2s_audio.c / i2s_audio.h:I2S 音频采集和播放的实现。

通过将代码分解到不同的源文件中,便于维护和阅读。

5.2 修改 CMakeLists.txt

main 目录下的 CMakeLists.txt 中,指定所有源文件和依赖:

idf_component_register(SRCS "main.c" "wifi.c" "websocket_client.c" "i2s_audio.c"
                    INCLUDE_DIRS "."
                    REQUIRES esp_wifi esp_event nvs_flash driver websockets mbedtls)
  • SRCS:列出所有的源文件。
  • INCLUDE_DIRS:指定头文件目录,这里使用当前目录 .
  • REQUIRES:添加所需的组件依赖,如 Wi-Fi、事件循环、NVS 闪存、驱动程序、WebSockets、mbedTLS 等。

6. 完整项目示例

下面,我将提供一个完整的项目结构和主要代码文件的内容示例。

6.1 根目录的 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(my_project)

6.2 main 目录的 CMakeLists.txt

idf_component_register(SRCS "main.c" "wifi.c" "websocket_client.c" "i2s_audio.c"
                    INCLUDE_DIRS "."
                    REQUIRES esp_wifi esp_event nvs_flash driver websockets mbedtls)

6.3 main.c

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "wifi.h"
#include "websocket_client.h"
#include "i2s_audio.h"

void app_main(void)
{
    // 初始化 NVS
    nvs_flash_init();
    // 初始化 Wi-Fi
    wifi_init_sta();
    // 初始化 I2S
    i2s_init();

    // 创建 WebSocket 客户端任务
    xTaskCreate(websocket_client_task, "websocket_client_task", 8192, NULL, 5, NULL);
}

6.4 wifi.c

#include "wifi.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"

static const char *TAG = "WIFI";

void wifi_init_sta(void)
{
    // 与之前的代码相同,省略重复部分
}

6.5 wifi.h

#ifndef WIFI_H
#define WIFI_H

void wifi_init_sta(void);

#endif // WIFI_H

6.6 websocket_client.c

#include "websocket_client.h"
#include "esp_log.h"
#include "libwebsockets.h"

static const char *TAG = "WEBSOCKET";

void websocket_client_task(void *pvParameters)
{
    // 与之前的代码相同,省略重复部分
}

6.7 websocket_client.h

#ifndef WEBSOCKET_CLIENT_H
#define WEBSOCKET_CLIENT_H

void websocket_client_task(void *pvParameters);

#endif // WEBSOCKET_CLIENT_H

6.8 i2s_audio.c

#include "i2s_audio.h"
#include "driver/i2s.h"
#include "esp_log.h"

static const char *TAG = "I2S_AUDIO";

void i2s_init(void)
{
    // 与之前的代码相同,省略重复部分
}

void audio_send_task(void *pvParameters)
{
    // 与之前的代码相同,省略重复部分
}

6.9 i2s_audio.h

#ifndef I2S_AUDIO_H
#define I2S_AUDIO_H

void i2s_init(void);
void audio_send_task(void *pvParameters);

#endif // I2S_AUDIO_H

7. 编译、烧录与调试

7.1 编译项目

在项目根目录下,执行以下命令编译项目:

idf.py build

7.2 烧录固件

将 ESP32 S3 开发板连接到电脑,执行以下命令烧录固件:

idf.py -p /dev/ttyUSB0 flash

请将 /dev/ttyUSB0 替换为实际的串口设备。

7.3 监视串口输出

可以使用以下命令监视串口输出,方便调试:

idf.py monitor

7.4 清理项目

如果需要清理项目的编译输出,可以执行:

idf.py fullclean

8. 总结

通过将代码组织到不同的源文件和头文件中,并正确配置 CMakeLists.txt,您可以更好地管理 ESP-IDF 项目。

关键点:

  • 项目结构清晰:将不同功能的代码分离,放入相应的源文件和头文件中。
  • 正确的 CMake 配置:在 CMakeLists.txt 中列出所有的源文件,并添加必要的组件依赖。
  • 模块化设计:使用组件(components)或模块,方便代码的复用和维护。

建议:

  • 熟悉 CMake 和 ESP-IDF 构建系统:这将有助于您更好地配置项目。
  • 使用版本控制:使用 Git 等版本控制工具,管理项目代码的变更。
  • 查阅官方文档:ESP-IDF 的官方文档提供了丰富的示例和指导。

如果您还有其他问题,或者需要进一步的帮助,请随时告诉我!

* 正在执行任务: ninja [1/6] Performing build step for 'bootloader' [1/1] cd /home/coco/esp/xiaozhi/xiaozhi-esp32/build/bootloader/esp-idf/esptool_py && /home/coco/.espressif/python_env/idf5.4_py3.8_env/bin/python /home/coco/esp/esp-idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 /home/coco/esp/xiaozhi/xiaozhi-esp32/build/bootloader/bootloader.bin Bootloader binary size 0x4030 bytes. 0x3fd0 bytes (50%) free. [2/4] Linking CXX executable xiaozhi.elf FAILED: xiaozhi.elf : && /home/coco/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-g++ -mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -Wl,--cref -Wl,--defsym=IDF_TARGET_ESP32S3=0 -Wl,--Map=/home/coco/esp/xiaozhi/xiaozhi-esp32/build/xiaozhi.map -Wl,--no-warn-rwx-segments -Wl,--orphan-handling=warn -fno-rtti -fno-lto -Wl,--gc-sections -Wl,--warn-common -T esp32s3.peripherals.ld -T esp32s3.rom.ld -T esp32s3.rom.api.ld -T esp32s3.rom.bt_funcs.ld -T esp32s3.rom.libgcc.ld -T esp32s3.rom.wdt.ld -T esp32s3.rom.version.ld -T esp32s3.rom.ble_master.ld -T esp32s3.rom.ble_50.ld -T esp32s3.rom.ble_smp.ld -T esp32s3.rom.ble_dtm.ld -T esp32s3.rom.ble_test.ld -T esp32s3.rom.ble_scan.ld -T esp32s3.rom.newlib.ld -T memory.ld -T sections.ld CMakeFiles/xiaozhi.elf.dir/project_elf_src_esp32s3.c.obj -o xiaozhi.elf -L/home/coco/esp/esp-idf/components/soc/esp32s3/ld -L/home/coco/esp/esp-idf/components/esp_rom/esp32s3/ld -L/home/coco/esp/xiaozhi/xiaozhi-esp32/build/esp-idf/esp_system/ld -L/home/coco/esp/esp-idf/components/esp_phy/lib/esp32s3 -L/home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3 esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/app_trace/libapp_trace.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/unity/libunity.a esp-idf/cmock/libcmock.a esp-idf/console/libconsole.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_driver_cam/libesp_driver_cam.a esp-idf/esp_psram/libesp_psram.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_hid/libesp_hid.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_https_server/libesp_https_server.a esp-idf/esp_lcd/libesp_lcd.a esp-idf/protobuf-c/libprotobuf-c.a esp-idf/protocomm/libprotocomm.a esp-idf/esp_local_ctrl/libesp_local_ctrl.a esp-idf/espcoredump/libespcoredump.a esp-idf/wear_levelling/libwear_levelling.a esp-idf/fatfs/libfatfs.a esp-idf/json/libjson.a esp-idf/mqtt/libmqtt.a esp-idf/nvs_sec_provider/libnvs_sec_provider.a esp-idf/perfmon/libperfmon.a esp-idf/rt/librt.a esp-idf/spiffs/libspiffs.a esp-idf/touch_element/libtouch_element.a esp-idf/usb/libusb.a esp-idf/wifi_provisioning/libwifi_provisioning.a esp-idf/78__esp-ml307/lib78__esp-ml307.a esp-idf/78__esp-opus/lib78__esp-opus.a esp-idf/78__esp-opus-encoder/lib78__esp-opus-encoder.a esp-idf/78__esp-wifi-connect/lib78__esp-wifi-connect.a esp-idf/78__esp_lcd_nv3023/lib78__esp_lcd_nv3023.a esp-idf/lvgl__lvgl/liblvgl__lvgl.a esp-idf/78__xiaozhi-fonts/lib78__xiaozhi-fonts.a esp-idf/espressif__adc_battery_estimation/libespressif__adc_battery_estimation.a esp-idf/espressif__esp_codec_dev/libespressif__esp_codec_dev.a esp-idf/espressif__adc_mic/libespressif__adc_mic.a esp-idf/espressif__button/libespressif__button.a esp-idf/espressif__dl_fft/libespressif__dl_fft.a esp-idf/espressif__esp-dsp/libespressif__esp-dsp.a esp-idf/espressif__esp-sr/libespressif__esp-sr.a esp-idf/espressif__esp_jpeg/libespressif__esp_jpeg.a esp-idf/espressif__esp32-camera/libespressif__esp32-camera.a esp-idf/espressif__esp_io_expander/libespressif__esp_io_expander.a esp-idf/espressif__esp_io_expander_tca9554/libespressif__esp_io_expander_tca9554.a esp-idf/espressif__esp_io_expander_tca95xx_16bit/libespressif__esp_io_expander_tca95xx_16bit.a esp-idf/espressif__esp_lcd_touch/libespressif__esp_lcd_touch.a esp-idf/espressif__esp_lcd_axs15231b/libespressif__esp_lcd_axs15231b.a esp-idf/espressif__esp_lcd_gc9a01/libespressif__esp_lcd_gc9a01.a esp-idf/espressif__esp_lcd_ili9341/libespressif__esp_lcd_ili9341.a esp-idf/espressif__esp_lcd_panel_io_additions/libespressif__esp_lcd_panel_io_additions.a esp-idf/espressif__esp_lcd_spd2010/libespressif__esp_lcd_spd2010.a esp-idf/espressif__esp_lcd_st77916/libespressif__esp_lcd_st77916.a esp-idf/espressif__esp_lcd_st7796/libespressif__esp_lcd_st7796.a esp-idf/espressif__esp_lcd_touch_cst816s/libespressif__esp_lcd_touch_cst816s.a esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a esp-idf/espressif__esp_lcd_touch_gt911/libespressif__esp_lcd_touch_gt911.a esp-idf/espressif__esp_mmap_assets/libespressif__esp_mmap_assets.a esp-idf/espressif__knob/libespressif__knob.a esp-idf/espressif__led_strip/libespressif__led_strip.a esp-idf/espressif2022__esp_emote_gfx/libespressif2022__esp_emote_gfx.a esp-idf/espressif2022__image_player/libespressif2022__image_player.a esp-idf/tny-robotics__sh1106-esp-idf/libtny-robotics__sh1106-esp-idf.a esp-idf/txp666__otto-emoji-gif-component/libtxp666__otto-emoji-gif-component.a esp-idf/waveshare__esp_lcd_sh8601/libwaveshare__esp_lcd_sh8601.a esp-idf/waveshare__esp_lcd_touch_cst9217/libwaveshare__esp_lcd_touch_cst9217.a esp-idf/wvirgil123__sscma_client/libwvirgil123__sscma_client.a -Wl,--whole-archive esp-idf/main/libmain.a -Wl,--no-whole-archive esp-idf/app_trace/libapp_trace.a esp-idf/app_trace/libapp_trace.a esp-idf/cmock/libcmock.a esp-idf/unity/libunity.a esp-idf/esp_driver_cam/libesp_driver_cam.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_hid/libesp_hid.a esp-idf/esp_local_ctrl/libesp_local_ctrl.a esp-idf/esp_https_server/libesp_https_server.a esp-idf/espcoredump/libespcoredump.a -u esp_system_include_coredump_init esp-idf/fatfs/libfatfs.a esp-idf/wear_levelling/libwear_levelling.a esp-idf/nvs_sec_provider/libnvs_sec_provider.a -u nvs_sec_provider_include_impl esp-idf/perfmon/libperfmon.a esp-idf/rt/librt.a esp-idf/touch_element/libtouch_element.a esp-idf/usb/libusb.a esp-idf/wifi_provisioning/libwifi_provisioning.a esp-idf/protocomm/libprotocomm.a esp-idf/console/libconsole.a esp-idf/protobuf-c/libprotobuf-c.a esp-idf/78__esp-ml307/lib78__esp-ml307.a esp-idf/mqtt/libmqtt.a esp-idf/78__esp-opus-encoder/lib78__esp-opus-encoder.a esp-idf/78__esp-opus/lib78__esp-opus.a esp-idf/78__esp-wifi-connect/lib78__esp-wifi-connect.a esp-idf/78__esp_lcd_nv3023/lib78__esp_lcd_nv3023.a esp-idf/78__xiaozhi-fonts/lib78__xiaozhi-fonts.a esp-idf/espressif__adc_battery_estimation/libespressif__adc_battery_estimation.a esp-idf/espressif__adc_mic/libespressif__adc_mic.a esp-idf/espressif__esp_codec_dev/libespressif__esp_codec_dev.a esp-idf/espressif__esp-sr/libespressif__esp-sr.a ../managed_components/espressif__esp-sr/lib/esp32s3/libdl_lib.a ../managed_components/espressif__esp-sr/lib/esp32s3/libc_speech_features.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_front_end.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_processor.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libesp_tts_chinese.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libvoice_set_xiaole.a ../managed_components/espressif__esp-sr/lib/esp32s3/libfst.a ../managed_components/espressif__esp-sr/lib/esp32s3/libflite_g2p.a ../managed_components/espressif__esp-sr/lib/esp32s3/libhufzip.a ../managed_components/espressif__esp-sr/lib/esp32s3/libmultinet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libnsnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libvadnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libwakenet.a esp-idf/espressif__esp-sr/libespressif__esp-sr.a ../managed_components/espressif__esp-sr/lib/esp32s3/libdl_lib.a ../managed_components/espressif__esp-sr/lib/esp32s3/libc_speech_features.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_front_end.a ../managed_components/espressif__esp-sr/lib/esp32s3/libesp_audio_processor.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libesp_tts_chinese.a ../managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3/libvoice_set_xiaole.a ../managed_components/espressif__esp-sr/lib/esp32s3/libfst.a ../managed_components/espressif__esp-sr/lib/esp32s3/libflite_g2p.a ../managed_components/espressif__esp-sr/lib/esp32s3/libhufzip.a ../managed_components/espressif__esp-sr/lib/esp32s3/libmultinet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libnsnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libvadnet.a ../managed_components/espressif__esp-sr/lib/esp32s3/libwakenet.a esp-idf/spiffs/libspiffs.a esp-idf/espressif__dl_fft/libespressif__dl_fft.a esp-idf/espressif__esp-dsp/libespressif__esp-dsp.a -L /home/coco/esp/xiaozhi/xiaozhi-esp32/managed_components/espressif__esp-sr/lib/esp32s3 -L /home/coco/esp/xiaozhi/xiaozhi-esp32/managed_components/espressif__esp-sr/esp-tts/esp_tts_chinese/esp32s3 esp-idf/espressif__esp-dsp/libespressif__esp-dsp.a esp-idf/espressif__dl_fft/libespressif__dl_fft.a esp-idf/espressif__esp32-camera/libespressif__esp32-camera.a esp-idf/espressif__esp_jpeg/libespressif__esp_jpeg.a esp-idf/espressif__esp_io_expander_tca9554/libespressif__esp_io_expander_tca9554.a esp-idf/espressif__esp_io_expander_tca95xx_16bit/libespressif__esp_io_expander_tca95xx_16bit.a esp-idf/espressif__esp_lcd_axs15231b/libespressif__esp_lcd_axs15231b.a esp-idf/espressif__esp_lcd_gc9a01/libespressif__esp_lcd_gc9a01.a esp-idf/espressif__esp_lcd_ili9341/libespressif__esp_lcd_ili9341.a esp-idf/espressif__esp_lcd_panel_io_additions/libespressif__esp_lcd_panel_io_additions.a esp-idf/espressif__esp_lcd_spd2010/libespressif__esp_lcd_spd2010.a esp-idf/espressif__esp_lcd_st77916/libespressif__esp_lcd_st77916.a esp-idf/espressif__esp_lcd_st7796/libespressif__esp_lcd_st7796.a esp-idf/espressif__esp_lcd_touch_cst816s/libespressif__esp_lcd_touch_cst816s.a esp-idf/espressif__esp_lcd_touch_ft5x06/libespressif__esp_lcd_touch_ft5x06.a esp-idf/espressif__esp_lcd_touch_gt911/libespressif__esp_lcd_touch_gt911.a esp-idf/espressif__esp_lvgl_port/liblvgl_port_lib.a esp-idf/espressif__button/libespressif__button.a esp-idf/espressif__esp_mmap_assets/libespressif__esp_mmap_assets.a esp-idf/espressif__knob/libespressif__knob.a esp-idf/espressif__led_strip/libespressif__led_strip.a esp-idf/espressif2022__esp_emote_gfx/libespressif2022__esp_emote_gfx.a -Wl,--start-group -Wl,--end-group ../managed_components/espressif__esp_new_jpeg/lib/esp32s3/libesp_new_jpeg.a esp-idf/espressif__freetype/output/libfreetype.a esp-idf/espressif2022__image_player/libespressif2022__image_player.a esp-idf/tny-robotics__sh1106-esp-idf/libtny-robotics__sh1106-esp-idf.a esp-idf/txp666__otto-emoji-gif-component/libtxp666__otto-emoji-gif-component.a esp-idf/lvgl__lvgl/liblvgl__lvgl.a esp-idf/waveshare__esp_lcd_sh8601/libwaveshare__esp_lcd_sh8601.a esp-idf/waveshare__esp_lcd_touch_cst9217/libwaveshare__esp_lcd_touch_cst9217.a esp-idf/espressif__esp_lcd_touch/libespressif__esp_lcd_touch.a esp-idf/esp_lcd/libesp_lcd.a esp-idf/wvirgil123__sscma_client/libwvirgil123__sscma_client.a esp-idf/json/libjson.a esp-idf/espressif__esp_io_expander/libespressif__esp_io_expander.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_security/libesp_security.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_mcpwm/libesp_driver_mcpwm.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdmmc/libesp_driver_sdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/esp_driver_usb_serial_jtag/libesp_driver_usb_serial_jtag.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_psram/libesp_psram.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libcore.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libespnow.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libmesh.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libpp.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libsmartconfig.a /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libwapi.a /home/coco/esp/esp-idf/components/xtensa/esp32s3/libxt_hal.a -Wl,--wrap=mbedtls_ssl_write_client_hello -Wl,--wrap=mbedtls_ssl_handshake_client_step -Wl,--wrap=mbedtls_ssl_handshake_server_step -Wl,--wrap=mbedtls_ssl_read -Wl,--wrap=mbedtls_ssl_write -Wl,--wrap=mbedtls_ssl_session_reset -Wl,--wrap=mbedtls_ssl_free -Wl,--wrap=mbedtls_ssl_setup -Wl,--wrap=mbedtls_ssl_send_alert_message -Wl,--wrap=mbedtls_ssl_close_notify -u esp_app_desc -u esp_efuse_startup_include_func -u ld_include_highint_hdl -u start_app -u start_app_other_cores -u __ubsan_include -u esp_system_include_startup_funcs -Wl,--wrap=longjmp -u __assert_func -u esp_security_init_include_impl -u esp_sleep_gpio_include -Wl,--undefined=FreeRTOS_openocd_params -u app_main -lc -lm -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -u newlib_include_getentropy_impl -u newlib_include_init_funcs --specs=nano.specs -u pthread_include_pthread_impl -u pthread_include_pthread_cond_var_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u pthread_include_pthread_semaphore_impl -u __cxa_guard_dummy -u __cxx_init_dummy -lstdc++ esp-idf/pthread/libpthread.a esp-idf/newlib/libnewlib.a -lgcc esp-idf/cxx/libcxx.a -u esp_timer_init_include_func -u uart_vfs_include_dev_init -u usb_serial_jtag_vfs_include_dev_init -u usb_serial_jtag_connection_monitor_include -u include_esp_phy_override -lphy -lbtbb esp-idf/esp_phy/libesp_phy.a -lphy -lbtbb esp-idf/esp_phy/libesp_phy.a -lphy -lbtbb -u esp_vfs_include_console_register -u vfs_include_syscalls_impl -u esp_vfs_include_nullfs_register && : /home/coco/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a(ieee80211_regdomain.o):(.text.ieee80211_get_regdomain+0x0): undefined reference to `regdomain_table' /home/coco/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: /home/coco/esp/esp-idf/components/esp_wifi/lib/esp32s3/libnet80211.a(ieee80211_regdomain.o):(.text.ieee80211_get_regdomain+0x4): undefined reference to `regulatory_data' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. * 终端进程“ninja”已终止,退出代码: 1。 idf编译小智ai出现错误(源码,没有修改过)
最新发布
09-22
<think> 首先,用户的问题是关于解决IDF编译小智AI源码时出现的链接错误。错误信息是链接器找不到'regdomain_table'和'regulatory_data'的引用,导致undefined reference错误。 关键错误信息:undefined reference to 'regdomain_table' and 'regulatory_data' 用户提到这是在小智AI源码未修改的情况下出现的,所以问题可能出在环境配置或依赖项上。 我现在需要参考用户提供的引用内容,因为这些引用中包含了类似问题的解决思路。 回顾用户提供的引用: - **引用[1]**:讨论ESP32-C3开发环境问题,涉及blufi错误,以及未定义引用错误(如`r_lld_ext_adv_dynamic_aux_pti_process`和`rom_temp_to_power`)。这提到idf-v4.3 vs idf-v4.4的差异。 - **引用[2]**:解决编译失败,提示undefined reference to `dedic_gpio_bundle_write`。分析包括.h文件参与编译但函数未找到,可能与CMakeLists配置相关,特别是宏定义如`CONFIG_SOC_DEDICATED_GPIO_SUPPORTED`。 - **引用[3]**:关于Linux下esp32兼容arduino编译环境搭建问题,提示undefined reference。 - **引用[4]**:使用components里的API函数报错undefined reference to `esp_ble_gap_config_adv_data`。 这些引用展示了常见的undefined reference错误的解决方法,通常涉及: 1. 头文件包含问题:确保相关头文件被正确包含。 2. 源文件未编译:检查CMakeLists.txt是否包含所有必要的源文件。 3. 宏定义缺失:某些功能可能需要特定的宏定义启用。 4. 链接库缺失:确保相关库被链接到项目中。 5. 依赖项配置错误:环境或SDK版本问题。 针对用户的错误:undefined reference to 'regdomain_table' and 'regulatory_data' 这些符号似乎是变量或函数名,可能与WiFi或蓝牙配置相关,因为在ESP32开发中,'regdomain'通常指regulatory domain(监管域),用于无线通信。 可能的场景: - 'regdomain_table' 和 'regulatory_data' 可能是定义在某个源文件或库文件中的变量。 - 错误发生在链接阶段,意味着编译器找到了声明(可能在头文件中),但链接器找不到定义。 我需要构建一个结构清晰的回答,帮助用户逐步解决问题。回答应使用中文。 回答结构建议: 1. **理解问题**:解释错误原因。 2. **诊断步骤**:引导用户检查关键点。 3. **解决方案**:提供可能的修复方法。 4. **生成相关问题**:按照指令,末尾添加相关问题。 系统级指令: - 所有行内数学表达式用$...$。 - 独立公式用$$...$$(但这里可能不需要)。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用段落末尾添加引用标识,如[^1]。 用户的问题是具体的,所以回答应聚焦于此。 基于引用和常见问题,解决方案可能包括: - **检查源文件包含**:确保定义了这些符号的文件被编译。 - **检查CMakeLists.txt**:确认组件配置正确。 - **宏定义**:可能需要启用某个相关的宏。 - **SDK版本**:检查是否使用了正确的IDF版本。 - **库依赖**:确保所有依赖库被链接。 从小智AI源码的上下文,可能涉及ESP32的WiFi组件。 初步思路: 1. **确认环境**:确保IDF环境正确设置,版本兼容。 2. **检查组件**:'regdomain_table' 和 'regulatory_data' 可能属于某个组件。检查这些组件是否被包含在项目中。 3. **查看CMakeLists.txt**:确保相关源文件被添加到编译列表中。 4. **宏启用**:类似引用[2],可能需要设置某个宏,如`CONFIG_ESP_PHY_ENABLED`或类似。 在ESP-IDF中,监管域相关功能可能需要特定配置。 生成相关问题: - 根据指令,末尾添加相关问题,如如何配置IDF环境、如何调试链接错误等。 最终回答框架: - 引言:简述问题和目标。 - 步骤式解决方案:列出检查点。 - 结论:总结。 - 相关问题。 </think> ### 解决方案:解决IDF编译小智AI源码时undefined reference to 'regdomain_table'和'regulatory_data'错误 在编译ESP-IDF项目(如小智AI源码)时,遇到链接错误`undefined reference to 'regdomain_table'`和`'regulatory_data'`,这通常表示链接器在链接阶段无法找到这些符号的定义。这些符号(变量或函数)通常与ESP32的WiFi或蓝牙组件有关,可能源于监管域(regulatory domain)配置问题(例如,无线信号频率和功率设置)。错误常见原因包括:源文件未正确编译、库依赖缺失、或宏定义未启用[^2][^4]。以下我将一步步引导您诊断和解决此问题。解决过程基于ESP-IDF开发环境(建议使用VS Code),并参考了小智AI源码的常见结构。 #### 步骤1: 确认开发环境设置 首先,确保您的ESP-IDF环境配置正确,避免版本冲突或路径问题。 - **检查IDF版本兼容性**:小智AI源码可能依赖于特定IDF版本(如v4.4)。运行以下命令验证版本: ```bash git -C $IDF_PATH rev-parse --short HEAD # 查看当前IDF commit ID git submodule update --init --recursive # 确保所有子模块更新 ``` 如果您的IDF版本过新或过旧(如从v4.3升级到v4.4),可能导致符号变更。参考[引用1],尝试切换到源码推荐的IDF版本(通常源码README会指定)。 - **清理并重建项目**:IDF编译缓存可能导致错误。运行: ```bash idf.py fullclean # 完全清理构建目录 idf.py build # 重新构建 ``` 如果错误依旧,继续下一步。 #### 步骤2: 检查组件依赖和CMake配置 `'regdomain_table'`和`'regulatory_data'`符号通常定义在ESP-IDF的`phy`或`esp_wifi`组件中。确保这些组件被正确包含在项目中。 - **确认组件包含**:在您的项目目录下,检查`main/CMakeLists.txt`文件。小智AI源码可能需要显式添加`esp_phy`或`esp_wifi`组件。示例添加方式: ```cmake # 在 main/CMakeLists.txt 中添加 idf_component_register(SRCS "main.c" INCLUDE_DIRS "." REQUIRES esp_phy esp_wifi) # 确保 REQUIRES 包含必要组件 ``` 如果组件缺失,链接器无法找到符号定义[^2]。 - **检查符号定义位置**:搜索ESP-IDF源代码,确认`regdomain_table`和`regulatory_data`的来源。通常它们在`components/esp_phy`目录下: ```bash grep -rn "regdomain_table" $IDF_PATH/components/esp_phy # 搜索定义 ``` 如果找到(通常在`phy_chip_v7.c`或类似文件中),但编译时未生成对象文件,表示CMake未包含该源文件。 #### 步骤3: 启用必要的宏定义 某些符号仅在特定配置宏启用时才编译。`regdomain_table`和`regulatory_data`可能依赖于监管域相关宏。 - **检查sdkconfig配置**:运行menuconfig检查宏设置: ```bash idf.py menuconfig # 进入配置界面 ``` 导航到: ``` Component config -> PHY -> [ ] Store PHY calibration data in NVS Component config -> Wi-Fi -> [*] WiFi support ``` 确保启用: - `CONFIG_ESP_PHY_ENABLE_STORAGE_REGULATORY_DOMAIN`(如果存在,用于监管域数据存储)。 - `CONFIG_ESP_WIFI_ENABLED`(WiFi支持)。 如果这些菜单选项缺失,您可能需要手动添加宏到`sdkconfig`文件。 - **手动添加宏**: 1. 打开项目目录下的`sdkconfig`文件(或`sdkconfig.defaults`)。 2. 添加以下行启用相关宏: ```makefile CONFIG_ESP_PHY_ENABLE_STORAGE_REGULATORY_DOMAIN=y CONFIG_ESP_WIFI_ENABLED=y ``` 保存后运行`idf.py build`。引用[2]提到,宏定义缺失会导致源文件不编译,从而链接失败。 #### 步骤4: 验证库链接和源文件参与编译 如果以上无效,问题可能源于源文件未编译或库未链接。 - **检查构建输出**:查看编译日志(终端输出或`build/CMakeCache.txt`),确认`phy_chip_v7.c`(或类似文件)是否被编译: ```bash cat build/CMakeFiles/project.elf.dir/link.txt | grep phy_chip # 查看链接命令是否包含phy库 ``` 如果未找到,表示CMake未正确处理组件依赖。 - **添加显式链接**:在`main/CMakeLists.txt`中,强制链接`libphy.a`库: ```cmake target_link_libraries(${COMPONENT_LIB} INTERFACE "-lphy") # 显式链接phy库 ``` 这确保链接器搜索必要的库文件。 #### 步骤5: 处理版本特定问题 如果您使用IDF v4.4(如引用[1]所述),可能存在已知bug。尝试: - **更新IDF或源码**:确保使用最新ESP-IDF(`git pull`)和源码版本。 - **回退到稳定版本**:如果问题在v4.4中出现,回退到v4.3(但需确认小智AI源码兼容性): ```bash git -C $IDF_PATH checkout release/v4.3 idf.py fullclean idf.py build ``` #### 总结 通过以上步骤,大多数类似错误可以解决: 1. 环境验证(清理和版本检查)。 2. 组件依赖配置(CMakeLists修改)。 3. 宏定义启用(menuconfig或sdkconfig编辑)。 4. 链接库确认。 如果错误依旧,请提供更多上下文(如完整错误日志或源码结构),以便进一步诊断。此问题通常由组件缺失或配置不当引起[^1][^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值