Embedded arm linux gcc与arm elf gcc

Embedded arm linux gcc与arm elf gcc,embedded,arm,gnu-toolchain,uclinux,Embedded,Arm,Gnu Toolchain,Uclinux,我正在看一个uClinux系统,它使用armlinux xxx构建内核,但使用armelf xxx构建用户应用程序 如果应用程序打算在linux上运行,那么使用arm linux xxx构建所有应用程序不是更好吗 在整个uClinux构建配置中,在哪里设置该选项?ELF是二进制格式使用: ELF格式已取代旧格式 可执行格式,如a.out和 COFF在许多类Unix操作系统中的应用 Linux、Solaris、IRIX等系统, FreeBSD、NetBSD、OpenBSD、蜻蜓 BSD、音节和HP

我正在看一个uClinux系统,它使用armlinux xxx构建内核,但使用armelf xxx构建用户应用程序

如果应用程序打算在linux上运行,那么使用arm linux xxx构建所有应用程序不是更好吗

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

ELF是二进制格式使用:

ELF格式已取代旧格式 可执行格式,如a.out和 COFF在许多类Unix操作系统中的应用 Linux、Solaris、IRIX等系统, FreeBSD、NetBSD、OpenBSD、蜻蜓 BSD、音节和HP-UX(除 继续运行的32位PA-RISC程序 使用SOM)。小精灵也看到了一些 非Unix操作系统的采用 系统,例如安腾版本 OpenVMS、BeOS第4版和 稍后适用于基于x86的计算机(其中 它取代了可移植的可执行文件 格式;PowerPC版本保持不变 使用首选的可执行文件格式)。这个 便携式PlayStation、PlayStation 2、, PlayStation 3、Wii和GP2X控制台 也可以使用ELF。AmigaOS 4和MorphOS 同样在PowerPC机器上运行,请使用 精灵。在阿米加平台上,精灵 可执行文件已替换以前的 EHF(扩展的Hunk格式)是 用于配备PPC的Amigas 处理器扩展卡。塞班人 OS v9使用E32Image[3]格式,即 基于ELF文件格式

大多数索尼爱立信(例如 W800i、W610、K790等),部分西门子 (SGOLD和SGOLD2平台:从 西门子C65至S75和明基西门子 E71/EL71)和摩托罗拉(例如, E398、SLVR L7、v360、v3i和所有 已应用修补程序的手机LTE2) 手机可以通过网络运行ELF文件 使用添加程序集代码的修补程序 到主固件(称为 ELFPack,在地下改装 文化)


我似乎在某种程度上记得中间的那一点并不重要。如前所述,elf是标准文件格式,您无论如何都要使用它,并且无论如何都会得到独立于二进制名称的文件格式。更重要的是调用约定,我不知道在调用共享库函数时是否必须使调用约定匹配,或者是否在其他地方为您处理。

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


对于CodeSourcery编译器(可能是最正确的名称),请参阅它们的命名含义。

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


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

您可以运行
arm linux gcc-v
arm ELF gcc-v
,查看这两个版本的gcc(例如目标体系结构/语言)之间的一些差异在本例中,我们使用sparc elf gcc构建linux,并使用sparc-..linux gcc构建busybox(在linux上运行的应用程序)。我认为这是正确的,而不是相反。

arm linux-*和arm elf-*是指向其他应用程序的符号链接吗?例如,在我的系统上,ARMLinuxGCC指向arm未知的LinuxUClibceabiGCC。这是非常错误的。内核和用户空间构建的工具链没有区别(或者不需要有)。