我有一个嵌入式硬件系统,其中包含一个基于 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/