-
Notifications
You must be signed in to change notification settings - Fork 64
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
QEMU hangs for ESP32-S2 application #28
Comments
Hi @smuehlst, this repository only contains patches to emulate the ESP32 chip. Unfortunately there is no ESP32-S2 support here. This was also requested in #9 but we never got to implementing it. |
@igrr Thanks for clarifying this, I will try my luck with an ESP32 build. |
@igrr I rebuilt the application for the ESP32 target, and the behavior is the same. QEMU hangs after printing the message "Adding SPI flash device". Do you have any hints for analyzing this problem? |
It's odd that it doesn't at least print the ROM code sign-on message — that shouldn't depend on the application being loaded. I have noticed you aren't passing |
If that doesn't make any difference, can you try the following:
|
@igrr Thanks for the hints. Indeed adding the option
Obviously something is still wrong with the partition table of the image, but the problem with the hang is solved. Where could the problem with the partion table come from? I built the image file according to the Wiki instructions here: https://github.com/espressif/qemu/wiki#build-test-app
These are the contents of the
|
Do I understand it right that the same build works okay for you on the real ESP32 hardware, but somehow the result in QEMU is different? If you don't have esp32 hardware and you haven't checked that the build works there, it could be that the application you built is indeed too large for the available partition size. In that case you can define a custom partition table with larger factory partition. |
It's not the same build, as my real hardware is the TinyS2 ESP32-S2 board: https://unexpectedmaker.com/tinys2 Therefore I created a separate build with the
I have defined a custom partition table in a CSV file which looks like this:
I see now that the |
I now understand my mistake which was that I thought I could just rebuild the application after the
Anyway, thanks a lot, @igrr, your comments helped me a lot to get started with this topic! |
@smuehlst No problem, it's an easy mistake to make! I recommend putting all the configuration changes into an Regarding the assertion, it's a weird one, I haven't seen it before. If you manage to reproduce it on real hardware, please report it in the esp-idf issue tracker. Otherwise it could be something specific to the emulator. |
@igrr Thanks for pointing out the
After thinking about this problem for a few minutes I remembered that I had seen something similar on the real ESP32-S2 board before, and then the fix was easy. One of the settings that I had forgotten when redoing the menuconfig for the ESP32 QEMU build was to adjust the main task stack size. After bumping that value upwards to the same value as in the ESP32-S2 build the error went away. |
Include the qtest reproducer provided by Alexander Bulekov in https://gitlab.com/qemu-project/qemu/-/issues/542. Without the previous commit, we get: $ make check-qtest-i386 ... Running test tests/qtest/intel-hda-test AddressSanitizer:DEADLYSIGNAL ================================================================= ==1580408==ERROR: AddressSanitizer: stack-overflow on address 0x7ffc3d566fe0 #0 0x63d297cf in address_space_translate_internal softmmu/physmem.c:356 #1 0x63d27260 in flatview_do_translate softmmu/physmem.c:499:15 #2 0x63d27af5 in flatview_translate softmmu/physmem.c:565:15 #3 0x63d4ce84 in flatview_write softmmu/physmem.c:2850:10 #4 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18 #5 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16 #6 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12 #7 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12 #8 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12 #9 0x62ae5ec0 in stl_le_dma include/sysemu/dma.h:275:1 #10 0x62ae5ba2 in stl_le_pci_dma include/hw/pci/pci.h:871:1 #11 0x62ad59a6 in intel_hda_response hw/audio/intel-hda.c:372:12 #12 0x62ad2afb in hda_codec_response hw/audio/intel-hda.c:107:5 #13 0x62aec4e1 in hda_audio_command hw/audio/hda-codec.c:655:5 #14 0x62ae05d9 in intel_hda_send_command hw/audio/intel-hda.c:307:5 #15 0x62adff54 in intel_hda_corb_run hw/audio/intel-hda.c:342:9 #16 0x62adc13b in intel_hda_set_corb_wp hw/audio/intel-hda.c:548:5 #17 0x62ae5942 in intel_hda_reg_write hw/audio/intel-hda.c:977:9 #18 0x62ada10a in intel_hda_mmio_write hw/audio/intel-hda.c:1054:5 #19 0x63d8f383 in memory_region_write_accessor softmmu/memory.c:492:5 #20 0x63d8ecc1 in access_with_adjusted_size softmmu/memory.c:554:18 #21 0x63d8d5d6 in memory_region_dispatch_write softmmu/memory.c:1504:16 #22 0x63d5e85e in flatview_write_continue softmmu/physmem.c:2812:23 #23 0x63d4d05b in flatview_write softmmu/physmem.c:2854:12 #24 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18 #25 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16 #26 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12 #27 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12 #28 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12 #29 0x62ae5ec0 in stl_le_dma include/sysemu/dma.h:275:1 #30 0x62ae5ba2 in stl_le_pci_dma include/hw/pci/pci.h:871:1 #31 0x62ad59a6 in intel_hda_response hw/audio/intel-hda.c:372:12 #32 0x62ad2afb in hda_codec_response hw/audio/intel-hda.c:107:5 #33 0x62aec4e1 in hda_audio_command hw/audio/hda-codec.c:655:5 #34 0x62ae05d9 in intel_hda_send_command hw/audio/intel-hda.c:307:5 #35 0x62adff54 in intel_hda_corb_run hw/audio/intel-hda.c:342:9 #36 0x62adc13b in intel_hda_set_corb_wp hw/audio/intel-hda.c:548:5 #37 0x62ae5942 in intel_hda_reg_write hw/audio/intel-hda.c:977:9 #38 0x62ada10a in intel_hda_mmio_write hw/audio/intel-hda.c:1054:5 #39 0x63d8f383 in memory_region_write_accessor softmmu/memory.c:492:5 #40 0x63d8ecc1 in access_with_adjusted_size softmmu/memory.c:554:18 #41 0x63d8d5d6 in memory_region_dispatch_write softmmu/memory.c:1504:16 #42 0x63d5e85e in flatview_write_continue softmmu/physmem.c:2812:23 #43 0x63d4d05b in flatview_write softmmu/physmem.c:2854:12 #44 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18 #45 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16 #46 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12 qemu#47 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12 #48 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12 ... SUMMARY: AddressSanitizer: stack-overflow softmmu/physmem.c:356 in address_space_translate_internal ==1580408==ABORTING Broken pipe Aborted (core dumped) Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Thomas Huth <thuth@redhat.com> Message-Id: <20211218160912.1591633-4-philmd@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
I built the Espressif QEMU from the most recent commit commit according to the instructions in the Wiki:
https://github.com/espressif/qemu/wiki#configure
After that I built a
flash_image.bin
file for an ESP32-S2 app according to the corresponding instructions from this page, and tried to start QEMU with it under Windows 10 WSL2 Debian Linux:After that nothing happens anymore, QEMU apparently hangs.
Should QEMU work for an ESP32-S2 application? Or do I have to rebuild the application specifically for ESP32?
The text was updated successfully, but these errors were encountered: