基于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及相关组件的环境变量,源码文件、目录及路径均已纳入配置。
操作步骤
- 用CMake构建项目
- 将
bootloader.bin、partition-table.bin和application.bin合并为单个16MB闪存大小的.bin文件 - 执行以下命令启动仿真:
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
相关产品推荐
相关产品推荐

