我的ubantu上安装的是4.6.4版本的arm-linux-gcc交叉编译工具。使用韦东山源码的时候,发现编译出的bin文件与源码中bin文件不一样。
我们首先要弄清楚指令集的概念,
JZ2440使用arm9核,该CPU核使用的指令集是armv4;
所谓指令集,指的是汇编指令的版本;比如cortex a7等更先进的CPU核它支持某些新的指令,而ARM9不支持这些指令。
你使用比较新的编译器时,它默认支持的指令集一般就不是armv4了;
如果不进行特别指定,编译出来的BIN文件烧在JZ2440上是无法运行的:因为CPU不认得某些新指令,无法执行某些新指令。
一般来说,新的编译器会兼容老的芯片,但是需要告诉编译器,让它使用老的指令集来编译程序。
所以,你当然可以使用4.4的工具链来编译jz2440程序,需要做的是:指定它,使用armv4指令集。
方法如下:
使用3.4.5工具链时,我们这样编译:arm-linux-gcc -c -o led.o led.c // 默认使用armv4
使用4.4等工具链时,这样编译:arm-linux-gcc -march=armv4 -c -o led.o led.c // 默认不是armv4,需要手工指定
问题2:
相信你已经知道答案了,
首先要确定你的CPU核使用哪些指令集,
是否支持软件浮点,
你想使用glibc还是uclibc,
然后根据这些特性去找对应的编译器。
uclibc是glibc的简化版本,不过现在嵌入式的存储空间足够大了,基本不使用uclibc了
来源:CSDN
作者:yuyuyuyuyuan
链接:https://blog.csdn.net/qq_43138346/article/details/103570916