5

我正在查看使用 arm-linux-xxx 构建内核的 uClinux 系统,但使用 arm-elf-xxx 构建用户应用程序。

如果这些应用程序旨在在 linux 上运行,那么使用 arm-linux-xxx 构建所有内容不是更好吗?

在整个 uClinux 构建配置中在哪里设置该选项?

4

6 回答 6

2

编译器的名称并不一定意味着什么。根据谁构建了编译器(并命名它们),你会得到不同的结果。可以说,特定配置有一个正确的名称,但一些随机编译的 gcc 可能不正确。

对于 CodeSourcery 编译器(可能是最正确的名称),请参阅他们的平台页面以了解其命名的含义。

于 2010-01-08T16:49:40.403 回答
2

您可以运行arm-linux-gcc -varm-elf-gcc -v查看这两个 gcc 版本之间的一些差异(例如目标体系结构/语言)。

于 2012-03-29T09:01:10.293 回答
0

我似乎记得在某个时候,中间的那一点无关紧要。正如已经提到的 elf 是标准文件格式,无论如何你都想使用它,并且无论如何都会得到它独立于二进制名称。可能(或不)更重要的是调用约定,我不知道在调用共享库函数时是否必须使调用约定匹配,或者是否在其他地方为您处理。

于 2009-04-29T14:37:07.137 回答
0

ELF 是linux的二进制格式,许多其他人使用:

ELF 格式在许多类 Unix 操作系统(如 Linux、Solaris、IRIX、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、Syllable 和 HP-UX 除外)中取代了旧的可执行格式,如 a.out 和 COFF(32-位 PA-RISC 程序继续使用 SOM)。ELF 也被一些非 Unix 操作系统采用,例如 OpenVMS 的 Itanium 版本,以及基于 x86 的计算机的 BeOS Revision 4 及更高版本(它取代了 Portable Executable 格式;PowerPC 版本保留了 Preferred Executable Format)。PlayStation Portable、PlayStation 2、PlayStation 3、Wii 和 GP2X 游戏机也使用 ELF。AmigaOS 4 和 MorphOS 也在 PowerPC 机器上运行,使用 ELF。在 Amiga 平台上,ELF 可执行文件取代了以前在配备 PPC 处理器扩展卡的 Amigas 上使用的 EHF(扩展块格式)。Symbian OS v9 使用基于 ELF 文件格式的 E32Image[3] 格式。

大多数索尼爱立信(例如,W800i、W610、K790 等),一些西门子(SGOLD 和 SGOLD2 平台:从西门子 C65 到 S75 和明基西门子 E71/EL71)和摩托罗拉(例如,E398、SLVR L7 、v360、v3i 和所有手机 LTE2 都应用了补丁)手机可以通过使用将汇编代码添加到主固件(在地下改装文化中称为 ELFPack)的补丁来运行 ELF 文件。

于 2008-12-23T21:28:46.630 回答
0

不同之处在于 arm-elf-xxx 工具链的链接输出是一个 linux 可加载二进制文件,而 arm-linux-xxx 输出一个内核对象 (ko),它是一个具有自己链接格式的 blob(用于模块),或者主内核本身,不需要打包格式。即,对于用户空间,您希望最终的动态链接对象是 ELF 可执行文件、库或共享对象。对于内核空间,您希望最终对象(内核或模块)采用 linux-arm-kernel 链接格式。

您会注意到两个目标的中间对象(.o 文件)可能都是 ELF,因为这是工具链所期望的。

于 2010-12-03T05:10:49.570 回答
0

在我们的例子中,我们使用 sparc-elf-gcc 构建 linux,我们使用 sparc-..-linux-gcc 构建busybox(在 linux 上运行的应用程序)。我认为这是正确的,而不是相反。

于 2014-08-19T04:35:15.367 回答