为什么GNU Arm嵌入式工具链';s示例(gcc arm none eabi/samples/src/qemu)无法工作?

为什么GNU Arm嵌入式工具链';s示例(gcc arm none eabi/samples/src/qemu)无法工作?,qemu,cortex-m3,newlib,Qemu,Cortex M3,Newlib,英语不是我的母语,很抱歉 最近,我想知道关于C库初始化的细节。开发/调试环境如下所示: 硬件:QEMU模拟器 软件:GNU Arm嵌入式工具链示例 IO:半托管 CrossToolchian:GNU Arm嵌入式工具链(gcc-Arm-none-eabi-7-2017-q4-majo) 我了解半托管、交叉工具链和QEMU的原理和用法。我已经为Cortex-M3编写了启动源代码,没有初始化newlib,因此我了解cpu启动步骤和链接脚本的关键点。此外,我还编写了在QEMU中运行的半托管源代码。我发

英语不是我的母语,很抱歉

最近,我想知道关于C库初始化的细节。开发/调试环境如下所示:

硬件:QEMU模拟器

软件:GNU Arm嵌入式工具链示例

IO:半托管

CrossToolchian:GNU Arm嵌入式工具链(gcc-Arm-none-eabi-7-2017-q4-majo)

我了解半托管、交叉工具链和QEMU的原理和用法。我已经为Cortex-M3编写了启动源代码,没有初始化newlib,因此我了解cpu启动步骤和链接脚本的关键点。此外,我还编写了在QEMU中运行的半托管源代码。我发现了一个关于开发Coortex-M系列程序的项目。我可以通过这个项目实现我的目标。但我想知道newlib启动的细节。所以,我计划从头开始写程序。我从GNU Arm嵌入式工具链自述中获得了一些有用的信息。当使用半宿主在QEMU上运行时,它为Cortex-M3提供了新库。我想我应该使用qemu的样本。以下是设计师对示例的描述:

**qemu-演示如何构建运行在qemu上的Cortex-M裸机程序。 本案例构建了一个可以在qemu for ARM上运行的简单应用程序。它使用 qemu支持的文件IO的半托管

我编译了这个例子并在qemu上运行,它可以打印任何东西。我不知道为什么。有人能帮我吗

汇编:

make CORTEX_M=3
运行:

当看到编译的细节时,我发现程序没有链接startup_ARMCM3.S

汇编详细资料:

arm-none-eabi-gcc hello.c -mthumb -mcpu=cortex-m0  -Os -flto -ffunction-sections -fdata-sections -g -v  --verbose --specs=nano.specs --specs=rdimon.specs -L../../ldscripts -T libs.ld -T mem.ld  -T sections.ld   -Wl,-Map=hello.map -g  -o hello-CM0.axf

向qemu命令行添加\u asm标志中的
-d以查看执行了哪些来宾指令。您的程序试图打印到的目标接收器是什么?是车载UART控制器吗?也许您使用了无效的控制器地址,对其他板有效?将调试打印函数添加到qemu源代码中的板实现所使用的UART设备,如果您试图通过它们打印,请重新编译qemu。我在qemu中使用半宿主而不是UART控制器打印消息。
arm-none-eabi-gcc hello.c -mthumb -mcpu=cortex-m0  -Os -flto -ffunction-sections -fdata-sections -g -v  --verbose --specs=nano.specs --specs=rdimon.specs -L../../ldscripts -T libs.ld -T mem.ld  -T sections.ld   -Wl,-Map=hello.map -g  -o hello-CM0.axf