到目前为止,我已经在我的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
这是我需要交叉编译的目标机器。我应该买什么旗帜 在编译时使用?
答案 0 :(得分:4)
您有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
失败,最简单的解决方案就是为您的目标找到合适的工具链。
答案 1 :(得分:2)
apt-cache search arm | grep ^gcc-
给出以下列表,
你应该安装 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创建一个适合您系统的自定义编译器,但这要复杂得多。