ESP32 开发 交叉编译工具的问题解决

    技术2026-01-12  8

    功能丰富的 Wi-Fi & 蓝牙 MCU适用于多样的物联网应用

    esp32/sources/esp-idf$ python -m pip install --user -r requirements.txt

    $ make menuconfig

    $ xtensa-esp32-elf-gcc -v Using built-in specs. COLLECT_GCC=xtensa-esp32-elf-gcc COLLECT_LTO_WRAPPER=...... Target: xtensa-esp32-elf ...... Thread model: posixgcc version 5.2.0 (crosstool-NG crosstool-ng-......)

    问题:

    esp32/sources/esp-idf/components/soc/include/hal/i2s_types.h:70:31: error: expected ',' or '}' before '__attribute__'      I2S_COMM_FORMAT_I2S       __attribute__((deprecated)) = 0x01, /*!< I2S comm                                ^esp32/sources/esp-idf/components/soc/src/hal/i2s_hal.c: In function 'i2s_hal_format_config': esp32/sources/esp-idf/components/soc/src/hal/i2s_hal.c:120:9: error: case value '3' not in enumerated type 'i2s_comm_format_t {aka const enum <anonymous>}' [-Werror=switch]          case I2S_COMM_FORMAT_STAND_MSB:          ^ esp32/sources/esp-idf/components/soc/src/hal/i2s_hal.c:128:9: error: case value '4' not in enumerated type 'i2s_comm_format_t {aka const enum <anonymous>}' [-Werror=switch]          case I2S_COMM_FORMAT_STAND_PCM_SHORT:          ^ esp32/sources/esp-idf/components/soc/src/hal/i2s_hal.c:136:9: error: case value '12' not in enumerated type 'i2s_comm_format_t {aka const enum <anonymous>}' [-Werror=switch]          case I2S_COMM_FORMAT_STAND_PCM_LONG:          ^ esp32/sources/esp-idf/components/soc/src/hal/i2s_hal.c: At top level: cc1: warning: unrecognized command line option '-Wno-frame-address' cc1: some warnings being treated as errors esp32/sources/esp-idf/make/component_wrapper.mk:291: recipe for target 'src/hal/i2s_hal.o' failed make[2]: *** [src/hal/i2s_hal.o] Error 1 esp32/sources/esp-idf/make/project.mk:635: recipe for target 'component-soc-build' failed make[1]: *** [component-soc-build] Error 2

    解决:

    换成虚拟机测试:

    CC build/esp_eth/src/esp_eth.o In file included from /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:15:0: /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h: In function 'atomic_flag_test_and_set_explicit': /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:271:31: error: request for member '__val' in something not a structure or union __atomic_exchange_n(&(object)->__val, desired, order) ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:387:10: note: in expansion of macro 'atomic_exchange_explicit' return (atomic_exchange_explicit(&__object->__flag, 1, __order)); ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:387:2: error: incompatible type for argument 1 of '__atomic_exchange_n' return (atomic_exchange_explicit(&__object->__flag, 1, __order)); ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h: In function 'atomic_flag_clear_explicit': /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:285:28: error: request for member '__val' in something not a structure or union __atomic_store_n(&(object)->__val, desired, order) ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:394:2: note: in expansion of macro 'atomic_store_explicit' atomic_store_explicit(&__object->__flag, 0, __order); ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:394:2: error: incompatible type for argument 1 of '__atomic_store_n' /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c: In function 'esp_eth_driver_install': /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:91:47: error: request for member '__val' in something not a structure or union #define atomic_init(obj, value) ((void)((obj)->__val = (value))) ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:175:5: note: in expansion of macro 'atomic_init' atomic_init(&eth_driver->ref_count, 1); ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c: In function 'esp_eth_driver_uninstall': /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:283:27: error: request for member '__val' in something not a structure or union __atomic_load_n(&(object)->__val, order) ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:27:15: note: in definition of macro 'ETH_CHECK' if (!(a)) \ ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:365:2: note: in expansion of macro 'atomic_load_explicit' atomic_load_explicit(object, memory_order_seq_cst) ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:216:15: note: in expansion of macro 'atomic_load' ETH_CHECK(atomic_load(&eth_driver->ref_count) == 1, ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:216:5: error: incompatible type for argument 1 of '__atomic_load_n' ETH_CHECK(atomic_load(&eth_driver->ref_count) == 1, ^ In file included from /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:15:0: /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c: In function 'esp_eth_increase_reference': /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:273:30: error: request for member '__val' in something not a structure or union __atomic_fetch_add(&(object)->__val, operand, order) ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:355:2: note: in expansion of macro 'atomic_fetch_add_explicit' atomic_fetch_add_explicit(object, operand, memory_order_seq_cst) ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:346:5: note: in expansion of macro 'atomic_fetch_add' atomic_fetch_add(&eth_driver->ref_count, 1); ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:346:5: error: incompatible type for argument 1 of '__atomic_fetch_add' In file included from /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:15:0: /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c: In function 'esp_eth_decrease_reference': /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:279:30: error: request for member '__val' in something not a structure or union __atomic_fetch_sub(&(object)->__val, operand, order) ^ /home/user/esp32/sources/esp-idf/components/newlib/include/stdatomic.h:361:2: note: in expansion of macro 'atomic_fetch_sub_explicit' atomic_fetch_sub_explicit(object, operand, memory_order_seq_cst) ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:357:5: note: in expansion of macro 'atomic_fetch_sub' atomic_fetch_sub(&eth_driver->ref_count, 1); ^ /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c:357:5: error: incompatible type for argument 1 of '__atomic_fetch_sub' /home/user/esp32/sources/esp-idf/components/esp_eth/src/esp_eth.c: At top level: cc1: warning: unrecognized command line option '-Wno-frame-address' /home/user/esp32/sources/esp-idf/make/component_wrapper.mk:291: recipe for target 'src/esp_eth.o' failed make[1]: *** [src/esp_eth.o] Error 1 /home/user/esp32/sources/esp-idf/make/project.mk:590: recipe for target 'component-esp_eth-build' failed make: *** [component-esp_eth-build] Error 2 user@ubuntu:~/esp32/demos/ESP32_CAMERA_QR-master$

    https://gcc.gnu.org/这种方法不可以

    解决方法:wget https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp32-2019r1-linux-amd64.tar.gz

    官网:

    https://www.espressif.com/zh-hans/products/socs/esp32/resources

    https://dl.espressif.com/dl/esp-idf/releases/esp-idf-v4.0.1.zip

    echo $IDF_PATH /.../esp32/sources/esp-idf

    Processed: 0.013, SQL: 9