C 添加自定义机器时QEMU中的分段故障(堆芯转储)

C 添加自定义机器时QEMU中的分段故障(堆芯转储),c,embedded,stm32,qemu,C,Embedded,Stm32,Qemu,我正在尝试在QEMU中为STM32机器构建一个自定义机器,我已经编写了一个简单的代码,将该机器添加到QEMU-machine help列表中。我还编写了一个代码,可以在其中添加所有外围设备(常规文件/主文件) 但是当我运行代码时,我得到分段错误(内核转储)错误。当我对某个部分进行评论时,我可以精确指出错误的来源: static Property stm32f407_soc_properties[] = { DEFINE_PROP_STRING("cpu-type", struct stm

我正在尝试在QEMU中为STM32机器构建一个自定义机器,我已经编写了一个简单的代码,将该机器添加到QEMU
-machine help
列表中。我还编写了一个代码,可以在其中添加所有外围设备(常规文件/主文件)

但是当我运行代码时,我得到
分段错误(内核转储)
错误。当我对某个部分进行评论时,我可以精确指出错误的来源:

static Property stm32f407_soc_properties[] = {
    DEFINE_PROP_STRING("cpu-type", struct stm32f407_soc,cpu_type),
    DEFINE_PROP_END_OF_LIST(),

};
获取
CPU类型时,我遇到了错误。此外,当我通过GDB进行调试时,它提供了一些我不了解的信息,如下所示:

(gdb) run -machine stm32f407ve_scu -kernel test.elf
Starting program: /usr/local/bin/qemu-system-arm -machine stm32f407ve_scu -kernel test.elf
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe7e4f700 (LWP 3487)]
[New Thread 0x7fffe764e700 (LWP 3490)]
[New Thread 0x7fffe69dc700 (LWP 3500)]
[New Thread 0x7fffe61db700 (LWP 3501)]

Thread 1 "qemu-system-arm" received signal SIGSEGV, Segmentation fault.
0x00005555557ea571 in cpu_get_address_space (cpu=0x0, asidx=1) at /home/sups/Documents/stm32/qemu/exec.c:930
930     return cpu->cpu_ases[asidx].as;
(gdb) where
#0  0x00005555557ea571 in cpu_get_address_space (cpu=0x0, asidx=1) at /home/sups/Documents/stm32/qemu/exec.c:930
#1  0x00005555559700c6 in armv7m_load_kernel (cpu=0x0, kernel_filename=0x5555568afa00 "test.elf", mem_size=2097152)
    at /home/sups/Documents/stm32/qemu/hw/arm/armv7m.c:297
#2  0x0000555555999e3e in stm32f407ve_scu_init (machine=0x555556783f00) at /home/sups/Documents/stm32/qemu/hw/arm/stm32f407ve_scu.c:57
#3  0x0000555555ae9ed9 in machine_run_board_init (machine=0x555556783f00) at hw/core/machine.c:830
#4  0x0000555555a40372 in main (argc=5, argv=0x7fffffffde98, envp=0x7fffffffdec8) at vl.c:4516
我打开了上面错误中提到的所有文件,并检查了错误所在的行以及所有这些行对应的机器调用。但我不知道我应该改变什么

有人能帮我吗?
谢谢。

我会认为这是一个QEMU错误。尝试其他版本?奇怪的是,它适用于以前添加的另一台自定义机器。我还需要安装并检查其他版本吗?stm32f407ve_scu_init()中的新代码正在将空指针作为第一个参数传递给armv7m_load_kernel(),这是代码中的一个错误,最终导致该函数中的代码因分段错误而崩溃。你需要找出你做错了什么,这意味着你没有一个指向CPU的有效指针;我按照语法的要求发送参数。请你也解释一下你是如何得出这个结论的,以便下次我自己能理解?感谢您可以在回溯中看到armv7m_load_kernel()的参数,以及cpu=0x0。这是调用代码中的一个bug。如果你使用“ARMGCPU(FixSTyCPU)”作为参数,问题是你不需要创建任何CPU就调用ARMV7MyLoad KNEL(),我会认为它是QEMU错误。尝试其他版本?奇怪的是,它适用于以前添加的另一台自定义机器。我还需要安装并检查其他版本吗?stm32f407ve_scu_init()中的新代码正在将空指针作为第一个参数传递给armv7m_load_kernel(),这是代码中的一个错误,最终导致该函数中的代码因分段错误而崩溃。你需要找出你做错了什么,这意味着你没有一个指向CPU的有效指针;我按照语法的要求发送参数。请你也解释一下你是如何得出这个结论的,以便下次我自己能理解?感谢您可以在回溯中看到armv7m_load_kernel()的参数,以及cpu=0x0。这是调用代码中的一个bug。如果您使用“ARM_CPU(first_CPU)”作为参数,那么问题是您在没有实际创建任何CPU的情况下调用armv7m_load_kernel()。