psi*_*lia 8 c embedded gcc arm bootloader
我有一个嵌入式硬件系统,其中包含一个基于ARMboot的引导加载程序(与Uboot和PPCboot非常相似).
此引导加载程序通常用于从闪存加载uClinux映像.但是,现在我正在尝试使用此引导加载程序来运行独立的helloworld应用程序,它不需要任何链接库.实际上,它只包含while(1){}
main函数中的代码.
我的问题是我无法找出我应该使用哪些GCC设置来构建一个独立的格式正确的二进制文件.
我使用以下构建命令:
cr16-elf-gcc -o helloworld helloworld.c -nostdlib
Run Code Online (Sandbox Code Playgroud)
产生警告信息:
警告:找不到条目符号_start; 默认为00000004
此后,在引导加载程序中,我上传生成的应用程序并在某个地址启动它:
tftpboot 0xa00000 helloworld
go 0xa00004
Run Code Online (Sandbox Code Playgroud)
但它不起作用:(系统重新启动.
通常它应该挂起(因为while(1)
).
小智 5
我不知道那个加载器,但我认为你应该使用像这样的objcopy将你的可执行数据转储到原始的二进制文件.不要跳到ELF标题,人们:)
objcopy -O binary ./a.out o.bin
Run Code Online (Sandbox Code Playgroud)
还尝试编译与位置无关的代码并阅读ld和gcc手册.