6

到目前为止,我已经在我的 ubuntu 系统上安装了所有交叉编译包,但是遇到了问题,需要一些帮助。

Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 184.72
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5
Cache type      : write-back
Cache clean     : cp15 c7 ops
Cache lockdown  : format C
Cache format    : Harvard
I size          : 32768
I assoc         : 4
I line length   : 32
I sets          : 256
D size          : 32768
D assoc         : 4
D line length   : 32
D sets          : 256

Hardware        : MT7108
Revision        : 0000
Serial          : 0000000000000000

这是我需要交叉编译的目标机器。编译时应该使用哪些标志?

4

2 回答 2

5

你有一个ARMv5没有浮点处理器。-march=armv5-mfloat-abi=soft标志应该已经足够了。

但是,如果这些标志对您不起作用,我建议编写最小的 c 应用程序来测试工具链。

/* no includes */
int main(void) {   
    return 42;
}

并用最完整/严格的标志编译它

$arm-linux-gnueabi-gcc -Wall --static -O2 -marm -march=armv5 simple.c -o simple

在此之后,推simple送到目标,运行它然后发出一个echo $?来验证你是否会得到42. 如果可行,请尝试查看是否可以开始printf工作。如果那个也有效,那么您几乎已经为所有事情做好了准备。如果printf失败,最简单的解决方案是为您的目标找到正确的工具链。

于 2013-06-27T07:52:42.600 回答
3

apt-cache search arm | grep ^gcc-给出以下列表,

  1. gcc-4.7-aarch64-linux-gnu - GNU C 编译器
  2. gcc-4.7-arm-linux-gnueabi - GNU C 编译器
  3. gcc-4.7-arm-linux-gnueabi-base - GCC,GNU 编译器集合(基本包)
  4. gcc-4.7-arm-linux-gnueabihf - GNU C 编译器
  5. gcc-4.7-arm-linux-gnueabihf-base - GCC,GNU 编译器集合(基本包)
  6. gcc-4.7-multilib-arm-linux-gnueabi - GNU C 编译器(多库文件)
  7. gcc-4.7-multilib-arm-linux-gnueabihf - GNU C 编译器(multilib 文件)
  8. gcc-aarch64-linux-gnu - 用于 arm64 架构的 GNU C 编译器
  9. gcc-arm-linux-gnueabi - 用于 armel 架构的 GNU C 编译器
  10. gcc-arm-linux-gnueabihf - 用于 armhf 架构的 GNU C 编译器

您应该安装gcc-arm-linux-gnueabi,它是gcc-4.7-arm-linux-gnueabi 的别名gcc-4.7-multilib-arm-linux-gnueabi也是可以的,但是比较复杂。使用标志,-march=armv5te -mtune=arm926ej-s -msoft-float -mfloat-abi=soft。您可以通过指定--param NAME=VALUE选项来进行更多调整,将gcc参数调整到您的系统内存子系统时序。

您可能无法使用这些gcc版本,因为您的Linux可能使用OABI编译和/或与构建编译器的版本相比非常古老。在某些情况下,libc将调用可能不存在的较新的Linux API 。如果编译器/libc 未配置为向后兼容,则它可能不适用于您的系统。您可以使用crosstool-ng来创建适合您系统的自定义编译器,但这要复杂得多。

于 2013-06-27T14:33:14.967 回答