gpt4 book ai didi

gcc - 为什么需要链接脚本和启动代码?

转载 作者:行者123 更新时间:2023-12-02 08:16:39 25 4
gpt4 key购买 nike

我读过 this tutorial

我可以按照指南运行代码。但我有疑问。

1)为什么我们需要加载地址和运行时地址。据我了解,这是因为我们也将 .data 放在了闪存中;那么为什么我们不在那里运行应用程序,而是需要启动代码将其复制到 RAM 中呢?

http://www.bravegnu.org/gnu-eprog/c-startup.html

2) 为什么我们在这里需要链接描述文件和启动代码。我可以不只是按照下面的方式构建 C 源代码并使用 qemu 运行它吗?

arm-none-eabi-gcc -nostdlib -o sum_array.elf sum_array.c

非常感谢

最佳答案

1) Why do we need both load-address and run-time address.



虽然在大多数情况下可以从内存映射 ROM 运行代码,但通常代码从 RAM 中执行得更快。在某些情况下,也可能有更大的 RAM,ROM 和应用程序代码可以压缩在 ROM 中,因此可执行代码不能简单地从 ROM 复制也解压缩 - 允许比可用 ROM 大得多的应用程序。

在代码存储在非内存映射大容量存储介质(如 NAND 闪存)上的情况下,它在任何情况下都不能直接执行,必须通过某种引导加载程序加载到 RAM 中。

2) Why we need linker script and start-up code here. Can I not just build C source as below and run it with qemu?



链接描述文件定义了目标和应用程序的内存布局。由于本教程是针对裸机编程的,因此没有操作系统可以为您处理。类似地,启动代码至少需要设置一个初始堆栈指针,初始化静态数据,并跳转到 main。在嵌入式系统上,还需要初始化各种硬件,例如 PLL、内存 Controller 等。

关于gcc - 为什么需要链接脚本和启动代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com