交叉编译链版本导致bin文件不同的原因

倖福魔咒の 提交于 2019-12-17 00:08:41
   我的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了
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!