lc1120 codec driver

本文详细介绍了LC1120音频编码器在Linux内核中的驱动程序初始化过程,包括I2C总线驱动、平台设备注册、Soc端音频操作、PCM注册、控制面板添加等关键步骤。此外,还阐述了LC1120功能模块的实现,如探针、移除、注册和初始化函数,以及与CPU和平台设备的连接。通过本教程,读者可以深入了解LC1120音频编码器在Linux环境下的驱动开发。

一. 在/sound/soc/codec/lc1120.c中的初始化代码:

1.init/exit lc1120_i2c_driver:

static const struct i2c_device_id lc1120_i2c_id[] = {
        { "lc1120", 0 },
        { }
    };
    MODULE_DEVICE_TABLE(i2c, lc1120_i2c_id);
    /* machine i2c codec control layer */
    static struct i2c_driver lc1120_i2c_driver = {
        .driver = {
            .name = "lc1120",
            .owner = THIS_MODULE,
        },
        .probe    = lc1120_i2c_probe,   //lc1120_i2c_driver 添加完毕,就会自动运行probe.
        .remove = lc1120_i2c_remove,
        .id_table = lc1120_i2c_id,
    };
    static int __init lc1120_i2c_init(void)
    {
        int ret;
    D_ENTER;
        ret = i2c_add_driver(&lc1120_i2c_driver);   //向I2C总线,添加一个i2c_driver,lc1120_i2c_driver,就是一个i2c_driver.
        if (ret)
        {
            printk(KERN_ERR "%s: error when regsiter i2c, %d\n",
             __func__, ret);
        }
        return ret;
    }
    static void __exit lc1120_i2c_exit(void)
    {
    D_ENTER;
        i2c_del_driver(&lc1120_i2c_driver);
    }
    module_init(lc1120_i2c_init);
    module_exit(lc1120_i2c_exit);
2.lc1120_i2c_probe and lc1120_i2c_remove:
/* codec private data */
    struct lc1120_priv
    {
        struct snd_soc_codec codec;   //只包含了一个codec 和一个原子变量
        atomic_t count;
    };

    /*
     * If the i2c layer weren't so broken, we could pass this kind of data
     * around
     */
    static int lc1120_i2c_probe(struct i2c_client *client,
                 const struct i2c_device_id *id)
    {
        struct snd_soc_codec *codec;
        struct lc1120_priv *lc1120;     //lc1120_priv 是一个自定义的表示lc1120设备的结构体。
    D_ENTER;
        if (device_create_file(&client->dev, &dev_attr_reg))       //在sys中建立reg和val文件,用来与用户控件交互。
            printk(KERN_ERR "%s create sysfs reg failed\n", __func__);
        if (device_create_file(&client->dev, &dev_attr_val))
            printk(KERN_ERR "%s create sysfs val failed\n", __func__);
        lc1120 = kzalloc(sizeof(struct lc1120_priv), GFP_KERNEL);   //给lc1120_priv 申请内存.
        if (lc1120 == NULL) {
            dev_err(&client->dev, "failed to create private data\n");
            return -ENOMEM;
        }
        atomic_set(&lc1120->count, 0);    //初始化原子变量为0。
        codec = &lc1120->codec;          
        codec->dev = &client->dev;     //client设备 指向 codec 设备。
        snd_soc_codec_set_drvdata(codec, lc1120); //把lc1120 指向 codec->drvdata.
        codec->control_data = client;  //client 指向 codec->control_data
        i2c_set_clientdata(client, lc1120);   //把lc1120 指向 client->dev->device_private->driver_data
        return lc1120_register(codec);   //注册codec。
    }
    static int lc1120_i2c_remove(struct i2c_client *client)
    {
        struct lc1120_priv *lc1120 = i2c_get_clientdata(client);
    D_ENTER;
        lc1120_unregister(lc1120);   注销codec
        kfree(lc1120);
        return 0;
    }
3. lc1120_register(codec) /lc1120_unregister(codec)
static DEVICE_ATTR(reg, S_IRUGO | S_IWUGO, sys_reg_show, sys_reg_store);
    static DEVICE_ATTR(val, S_IRUGO | S_IWUGO, sys_val_show, sys_val_store);  //在sysfs中建立reg和val变量。
    static int lc1120_register(struct snd_soc_codec *codec)
    {
        int ret;
    D_ENTER;
        lc1120_codec = codec;
        codec->name = "lc1120";
        codec->owner = THIS_MODULE;
        codec->read = lc1120_read;
        codec->write = lc1120_write;
    /* TODO:
        codec->set_bias_level = lc1120_set_bias_level;
    */
        codec->dai = &lc1120_dai;   //dai 就是soc与codec通信的链接。
        codec->num_dai = 1;
        ret = snd_soc_register_codec(codec);  //标准注册codec函数。
        if (ret) {
            dev_err(codec->dev, "Failed to register codec\n");
            return ret;
        }
        ret = snd_soc_register_dai(&lc1120_dai);  //标准注册dai函数。
        if (ret) {
            dev_err(codec->dev, "Failed to register dai\n");
            snd_soc_unregister_codec(codec);
            return ret;
        }
    printk(KERN_ERR "yzt %s exited\n", __func__);
        return 0;
    }
    static int lc1120_unregister(struct lc1120_priv *lc1120)
    {
    D_ENTER;
    //    lc1120_set_bias_level(&lc1120->codec, SND_SOC_BIAS_OFF);
        snd_soc_unregister_dai(&lc1120_dai);      //先注销dai
        snd_soc_unregister_codec(&lc1120->codec);  //在注销codec
        lc1120_codec = NULL;
        return 0;
    }
二.在sound/soc/comip/snd_soc_comip_lc1120.c中的初始化代码:

1.comip_lc1120_init()/comip_lc1120_exit()

static struct clk *codec_mclk;
    static struct platform_device *snd_soc_comip_lc1120_device;  //两个全局变量,下面会用到。

    static int __init comip_lc1120_init(void)
    {
        int ret;
    D_ENTER;
        codec_mclk = snd_soc_codec_set_mclk();   //在soc中配置寄存器,使之输出13M I2S main_clk
        snd_soc_comip_lc1120_device = platform_device_alloc("soc-audio", -1);  //申请platform device 空间。
        if (!snd_soc_comip_lc1120_device) {
            printk(KERN_ERR "Platform device allocation failed\n");
            return -ENOMEM;
        }
        //把snd_soc_device 指向 platform -> dev
        //snd_soc_comip_lc1120_devdata 是snd_soc_device,snd_soc_comip_lc1120_device 是platform
        platform_set_drvdata(snd_soc_comip_lc1120_device, &snd_soc_comip_lc1120_devdata);
        snd_soc_comip_lc1120_devdata.dev = &snd_soc_comip_lc1120_device->dev;
        ret = platform_device_add(snd_soc_comip_lc1120_device);  添加一个platform设备。
        if (ret) {
            printk(KERN_ERR "Soc Audio: Unable to add lc1120\n");
            platform_device_put(snd_soc_comip_lc1120_device);
        }
        return ret;
    }
    module_init(comip_lc1120_init);
    static void __exit comip_lc1120_exit(void)
    {
    D_ENTER;
        if (codec_mclk)
            clk_put(codec_mclk);
        codec_mclk = NULL;   //时钟清零
        platform_device_unregister(snd_soc_comip_lc1120_device);
    }
    module_exit(comip_lc1120_exit);
2. 几个结构体之间的关系:

a.一个platform_device 包含一个device 和一个resource。resource很有用。

struct platform_device {
        const char    * name;
        int        id;
        struct device    dev;
        u32        num_resources;
        struct resource    * resource;
        const struct platform_device_id    *id_entry;
        /* arch specific additions */
        struct pdev_archdata    archdata;
    };
b.一个snd_soc_device 包括一个snd_soc_card 和一个 snd_soc_codec_device.
/* SoC Device - the audio subsystem */
    struct snd_soc_device {
        struct device *dev;
        struct snd_soc_card *card;
        struct snd_soc_codec_device *codec_dev;
        void *codec_data;
    };
具体如下:
/* Audio subsystem */
    static struct snd_soc_device snd_soc_comip_lc1120_devdata =  //snd_soc_device包含了两项
    {
        .card = &snd_soc_comip_lc1120_card_data,   //snd_soc_card.
        .codec_dev = &soc_codec_dev_lc1120,        //snd_soc_codec_device.
    };
c.一snd_soc_card 包含一个snd_soc_platform 和一个snd_soc_dai_link :
/* Audio machine driver */
    static struct snd_soc_card snd_soc_comip_lc1120_card_data =
    {
        .name = "comip_lc1120",
        .platform = &comip_soc_platform,         //snd_soc_platform,是指Soc端的音频操作
        .dai_link = snd_soc_comip_lc1120_dai_link,  //snd_soc_dai_link,Soc和codec 两个dai的 链接
        .num_links = ARRAY_SIZE(snd_soc_comip_lc1120_dai_link),
    };
d. 一个snd_soc_platform 表示Soc端的pcm码流操作,包含:
struct snd_soc_platform comip_soc_platform = {
        .name        = "comip-audio",
        .pcm_ops     = &comip_pcm_ops,
        .pcm_new    = comip_pcm_new,
        .pcm_free    = comip_pcm_free_dma_buffers,
    };
    EXPORT_SYMBOL_GPL(comip_soc_platform);
e. 一个snd_soc_dai_link 包含两个snd_soc_dai,一个cpu_dai和一个codec_dai;还有一个snd_soc_ops
static struct snd_soc_dai_link snd_soc_comip_lc1120_dai_link[] =
    {
        {
            .name = "comip_i2s_lc1120",
            .stream_name = "comip_i2s_lc1120",
            .cpu_dai = &comip_i2s_dai,
            .codec_dai = &lc1120_dai,
            .ops = &snd_soc_comip_lc1120_ops,
        },
    };
f:snd_soc_ops snd_soc_comip_lc1120_ops,包含如下;音频播放的时候,会调用trigger,startup,hw_param等等。
/* Digital audio interface glue - connects codec <--> CPU */
    static struct snd_soc_ops snd_soc_comip_lc1120_ops =
    {
        .startup = comip_lc1120_startup,  
        .shutdown = comip_lc1120_shutdown,
        .hw_params = comip_lc1120_i2s_hw_params,
        .hw_free = comip_lc1120_hw_free,
        .prepare = comip_lc1120_prepare,
        .trigger = comip_lc1120_trigger,
    };
g. comip_lc1120_i2s_hw_params内容如下,其他基本都是直接return 0;
static int comip_lc1120_i2s_hw_params(struct snd_pcm_substream *substream,
                    struct snd_pcm_hw_params *params)
{
    struct snd_soc_pcm_runtime *rtd = substream->private_data;
    struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
    struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
    int ret = 0;
//    unsigned long rate = params_rate(params);



    D_ENTER;
        ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
                            SND_SOC_DAIFMT_CBM_CFM);
        if (ret < 0)
            return ret;
        ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
                            SND_SOC_DAIFMT_CBM_CFM);
        if (ret < 0)
            return ret;
        return ret;
    }
h. struct snd_soc_codec_device soc_codec_dev_lc1120定义如下:soc_codec_dev_lc1120

struct snd_soc_codec_device soc_codec_dev_lc1120 = {
        .probe = lc1120_probe, //在注册了soc_codec_dev_lc1120之后,就自动运行lc1120_probe
        .remove = lc1120_remove,
        .suspend = lc1120_suspend,
        .resume = lc1120_resume,
    };
    EXPORT_SYMBOL_GPL(soc_codec_dev_lc1120);

三. lc1120 功能部分,注册完了之后,就具备了一系列功能。

1. lc1120_probe():

static struct snd_soc_codec *lc1120_codec;    //定义了一个全局变量

    static int lc1120_probe(struct platform_device *pdev)
    {
        struct snd_soc_device *socdev = platform_get_drvdata(pdev);
        struct snd_soc_codec *codec;
        int ret = 0;
    D_ENTER;
        codec = lc1120_codec;
        if (!codec) {
            dev_err(&pdev->dev, "Codec not registered\n");
            return -ENODEV;
        }
        if (lc1120_write_regs(codec, lc1120_init_data,   //初始化一系列寄存器
                ARRAY_SIZE(lc1120_init_data)))
        {
            printk(KERN_ERR "%s: initialize lc1120 failed\n", __func__);
            return -ENODEV;
        }
        socdev->card->codec = codec;
        /* register pcms */
        mutex_init(&codec->mutex);
        ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);   //create new sound card and pcms。
        if (ret < 0) {
            printk(KERN_ERR "%s: snd_soc_new_pcms failed for %d\n",
                __func__, ret);
            goto pcm_err;
        }
        ret = snd_soc_add_controls(codec, lc1120_snd_controls,  //add an array of controls to a codec.
                 ARRAY_SIZE(lc1120_snd_controls));
        if (ret < 0)
        {
            printk(KERN_ERR "%s: snd_soc_add controls failed for %d\n",
                __func__, ret);
            goto pcm_err;
        }
        INIT_LIST_HEAD(&codec->dapm_widgets);
        INIT_LIST_HEAD(&codec->dapm_paths);
        ret = snd_soc_dapm_new_controls(codec, lc1120_dapm_widgets,  //create new dapm controls
                    ARRAY_SIZE(lc1120_dapm_widgets));
        if (ret < 0)
        {
            printk(KERN_ERR "%s: snd_soc_dapm_new_controls failed for %d\n",
                __func__, ret);
            goto pcm_err;
        }
        ret = snd_soc_dapm_add_routes(codec, lc1120_route,     //Add routes between DAPM widgets
                    ARRAY_SIZE(lc1120_route));
        if (ret < 0)
        {
            printk(KERN_ERR "%s: snd_soc_dapm_add_routes failed for %d\n",
                __func__, ret);
            goto pcm_err;
        }
        ret = snd_soc_dapm_new_widgets(codec);       //add new dapm widgets
        if (ret < 0)
        {
            printk(KERN_ERR "%s: snd_soc_dapm_new_widgets failed for %d\n",
                __func__, ret);
            goto pcm_err;
        }
    printk(KERN_ERR "yzt: %s exited\n", __func__);
    pcm_err:
        return ret;
    }


* 正在执行任务: 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值