c - GCC、ARMboot - 创建没有任何库和任何操作系统的独立应用程序

标签 c gcc embedded arm bootloader

我有一个嵌入式硬件系统,其中包含一个基于 ARMboot 的引导加载程序(这与 Uboot 和 PPCboot 非常相似)。

此引导加载程序通常用于从闪存加载 uClinux 镜像。但是,现在我正尝试使用这个引导加载程序来运行一个独立的 helloworld 应用程序,它不需要任何链接库。实际上,它只包含 main 函数中的 while(1){} 代码。

我的问题是我无法找出应该使用哪些 GCC 设置来构建独立的格式正确的二进制文件。

我确实使用以下构建命令:

cr16-elf-gcc -o helloworld helloworld.c -nostdlib

产生警告信息:
警告:找不到入口符号_start;默认为 00000004

之后,在引导加载程序中,我上传了一个生成的应用程序并在某个地址启动它:

tftpboot 0xa00000 helloworld
go 0xa00004

但它不起作用:( 系统重新启动。

通常它应该挂起(因为 while(1))。

最佳答案

我不知道那个加载器,但我认为你应该像这样使用 objcopy 将你的可执行数据转储到原始二进制文件。不要跳到 ELF 标题,人们 :)

objcopy -O binary ./a.out o.bin

同时尝试编译与位置无关的代码并阅读 ld 和 gcc 手册。

关于c - GCC、ARMboot - 创建没有任何库和任何操作系统的独立应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027561/

相关文章:

c - 绑定(bind)到两个本地 IP 失败

c - 最简单程序反汇编说明(x86)

c - 动态数组代码不断崩溃

c - gcc:如何只跟踪特定的函数调用

linux - LinkIT 7688 上的毫秒分辨率计时器

c - 我该如何解决这个错误? (未定义对 'display_menu' 的引用)

c++ - 带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值

c++ - gcc 找不到模板专门化

linker - 如何使用 Cortex M0+ 上的链接描述文件复制中断向量表?

c - 函数和宏之间的区别