You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ESP32的自定义板QEMU虚拟化配置CAN-FD控制器卡顿求助

ESP32自定义板QEMU仿真时CAN-FD配置阶段陷入循环

项目背景

我正在开发基于ESP32的自定义板虚拟化项目,目标是无需实体硬件即可完成固件烧录与测试。该自定义板通过SPI连接外部设备(包括ADC、CAN-FD控制器等),项目包含所有设备驱动及依赖,固件烧录到实体板后运行完全正常。

当前环境

  • VS Code + devcontainer,使用ESP-IDF v4.4.3
  • QEMU版本:esp-develop-8.0.0-20230522(源码编译)
  • 使用QEMU组件:qemu-system-xtensa

已正确配置QEMU、ESP-IDF及相关组件的环境变量,源码文件、目录及路径均已纳入配置。

操作步骤

  1. 用CMake构建项目
  2. 将bootloader.bin、partition-table.bin和application.bin合并为单个16MB闪存大小的.bin文件
  3. 执行以下命令启动仿真:
qemu-system-xtensa -nographic -machine esp32 -drive file=merged.bin,if=mtd,format=raw

问题现象

QEMU初始启动正常,但在配置CAN-FD控制器时陷入循环。通过xtensa-esp32-elf-gdb附加到QEMU(添加-s -S参数并设置断点)调试发现,设备配置阶段卡住,对象管理器无法创建对应对象。

QEMU仿真输出日志如下:

Adding SPI flash device
ets Jul 29 2019 12:21:46

rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:6660
load:0x40078000,len:14936
load:0x40080400,len:3792
entry 0x40080694
I (691) boot: ESP-IDF v4.4.3 2nd stage bootloader
I (693) boot: compile time 12:09:42
I (700) boot: chip revision: 0
I (701) boot.esp32: SPI Speed      : 40MHz
I (701) boot.esp32: SPI Mode       : DIO
I (701) boot.esp32: SPI Flash Size : 16MB
I (707) boot: Enabling RNG early entropy source...
I (713) boot: Partition Table:
I (713) boot: ## Label            Usage          Type ST Offset   Length
I (714) boot:  0 otadata          OTA data         01 00 0000d000 00002000
I (714) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (715) boot:  2 factory          factory app      00 00 00010000 00300000
I (715) boot:  3 ota_0            OTA app          00 10 00310000 00300000
I (715) boot:  4 ota_1            OTA app          00 11 00610000 00300000
I (716) boot:  5 nvs              WiFi data        01 02 00910000 000f0000
I (716) boot:  6 qfs_0            Unknown data     01 99 00a00000 00300000
I (716) boot:  7 qfs_1            Unknown data     01 99 00d00000 00300000
I (720) boot: End of partition table
I (727) boot: Defaulting to factory image
I (732) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=32b94h (207764) map
I (770) esp_image: segment 1: paddr=00042bbc vaddr=3ffb0000 size=03720h ( 14112) load
I (783) esp_image: segment 2: paddr=000462e4 vaddr=40080000 size=09d34h ( 40244) load
I (801) esp_image: segment 3: paddr=00050020 vaddr=400d0020 size=c2718h (796440) map
I (882) esp_image: segment 4: paddr=00112740 vaddr=40089d34 size=0b02ch ( 45100) load
I (900) esp_image: segment 5: paddr=0011d774 vaddr=50000000 size=00010h (    16) load
I (916) boot: Loaded app from partition at offset 0x10000
I (916) boot: Disabling RNG early entropy source...
I (924) cpu_start: Pro cpu up.
I (925) cpu_start: Starting app cpu, entry point is 0x400815b8
I (591) cpu_start: App cpu up.
I (2153) cpu_start: Pro cpu start user code
I (2154) cpu_start: cpu freq: 240000000
I (2154) cpu_start: Application information:
I (2154) cpu_start: Compile time:     Jun 12 2023 12:09:42
I (2155) cpu_start: ELF file SHA256:  4df53292b1fdfecb...
I (2155) cpu_start: ESP-IDF:          v4.4.3
I (2157) heap_init: Initializing. RAM available for dynamic allocation:
I (2158) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (2159) heap_init: At 3FFB8870 len 00027790 (157 KiB): DRAM
I (2159) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (2159) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (2160) heap_init: At 40094D60 len 0000B2A0 (44 KiB): IRAM
I (2193) spi_flash: detected chip: issi
I (2204) spi_flash: flash io: dio
I (2235) cpu_start: Starting scheduler on PRO CPU.
I (4) cpu_start: Starting scheduler on APP CPU.
I (2250) spiram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (15284) sy_app_main: Starting vv62f5-dirty on ESP32 Rev 0, Package 0
I (15288) sy_app_main: Git branch: master
I (15300) sy_app_main: Free memory before creating objects: 203432
I (15308) os_nvs: Opening NVS app_main
I (15416) os_nvs: Opening NVS system

E (15418) sy_obj_mgr: Failed getting size of system/configuration from NVS!
E (15420) sy_obj_mgr: Bad hardware configuration name: , using: defaultconfig-one_stack // (this is normal because we do not have an existing configuration, so we load the default one)

I (15424) gpio: GPIO[5]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (15432) gpio: GPIO[34]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (15438) os_spi: Enabled SPI device at CS 4
I (15438) os_spi: Enabled SPI device at CS 17
I (15438) os_spi: Enabled SPI device at CS 2
I (15442) ---: configure CANfdComponent (index: 1) // (this is a log message that I printed where everything stops)

目前QEMU无报错直接进入循环,没有任何额外错误或警告信息,恳请各位提供解决思路。

内容的提问来源于stack exchange,提问作者obaidch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:09:54