使用arm-linux-gcc编译的一些疑惑?
最近学arm-linux-gcc编译,对其了解不是很多,求高手指点以下几点疑惑。
1、我们在windows下使用编辑器编译可执行文件.bin时候,在编辑器中需要设置芯片的型号,起始地址那些信息,而在用arm-linux-gcc时这些信息为什么不用设置?
2、arm-linux-gcc中 用makefile将多个.c .h .S文件链接成.bin文件时 链接有没有先后顺序,如果有顺序该怎么排?
3、arm-linux-gcc的makefile都有指定程序起始地址 比如Ttext 0x00000000,这个地址是不是程序烧到CPU后CPU从这个地址开始运行?
[解决办法]
使用arm-linux-gcc的时候不是不用设置,而是编译器采用了默认设置。
链接使用的是arm-linux-ld, 通常会为它指定一个链接脚本,链接脚本中可以控制链接顺序。你可以找个u-boot的源码包,然后找.lds文件,打开来看看,一般代码段第一个都会是start.o。至于其他的文件,应该是跟执行arm-linux-ld时给的文件名顺序决定的。
Ttext 是arm-linux-ld的选项,用于指定重定位基地址。通常要将程序烧到Ttext指定的地址才能执行,因为.c代码中有很多常量,如果在别的地方运行,极有可能不能正常加载这些常量。