2008-12-23 29 views
5

Estoy buscando en el sistema uClinux que construye el kernel con arm-linux-xxx, pero crea las aplicaciones de usuario con arm-elf-xxx.arm-linux-gcc vs arm-elf-gcc

Si las aplicaciones están destinadas a ejecutarse en Linux, ¿no sería mejor construir todo con arm-linux-xxx?

¿Dónde se establece esa opción en la configuración de compilación uClinux general?

+0

¿Están arm-linux- * y arm-elf- * enlaces simbólicos a otras aplicaciones? Por ejemplo, en mi sistema, arm-linux-gcc apunta a arm-unknown-linux-uclibceabi-gcc. – ctuffli

Respuesta

0

ELF es el formato binario linux and many others uso:

El formato ELF ha reemplazado más edad formatos ejecutables como COFF a.out y en muchos sistemas Unix operativo como Linux, Solaris, IRIX , FreeBSD, NetBSD, OpenBSD, DragonFly BSD, sílaba y HP-UX (excepto para programas PA-RISC de 32 bits que continúan para usar SOM). ELF también ha visto algunos aprobación en no operativo Unix sistemas, como la versión de Itanium de OpenVMS, y BeOS Revisión 4 y tarde para equipos basados ​​en x86 (donde que sustituyen el formato ejecutable portable ; la versión PowerPC quedó con formato ejecutable preferido). Las consolas PlayStation Portable, PlayStation 2, PlayStation 3, Wii y GP2X también usan ELF. AmigaOS 4 y MorphOS que también se ejecutan en máquinas PowerPC, usan ELF. En la plataforma Amiga, el ejecutable ELF ha reemplazado al anterior EHF (Formato extendido de Hunk) que era utilizado en Amigas equipado con tarjetas de expansión de procesador PPC . El sistema operativo Symbian OS v9 usa el formato E32Image [3] que es según el formato de archivo ELF.

más Sony Ericsson (por ejemplo, el W800i, W610, K790, etc.), algunos de Siemens (SGOLD y SGOLD2 plataformas: desde Siemens C65 a S75 y BenQ-Siemens E71/EL71) y Motorola (por ejemplo, el E398, L7, V360, V3i y todos LTE2 teléfono que tiene aplicar el parche) móviles pueden ejecutar archivos ELF mediante el uso de un parche que añade código ensamblador al firmware principal (Conocido como el ELFPack, en el modding subterráneo cultura).

0

Parece que recuerdo en algún momento que ese bit en el medio no importaba. Como el elf ya mencionado es el formato de archivo estándar, desea usarlo de todos modos y lo obtendrá de todos modos independientemente del nombre binario. Lo que puede ser (o no) más importante es la convención de llamadas, no sé si al llamar a una función de biblioteca compartida tiene que hacer que su convención de llamadas coincida o si se maneja para usted en otro lugar.

2

Los nombres de los compiladores no significan necesariamente nada. Dependiendo de quién creó los compiladores (y los denominó), obtendrá diferentes resultados. Podría decirse que hay un nombre correcto para una configuración en particular, pero algunos gcc compilados aleatoriamente pueden no ser correctos.

Para los compiladores de CodeSourcery (probablemente los nombres más correctos), consulte their platforms page para conocer su significado.

0

La diferencia es que la salida vinculada de la cadena de herramientas arm-elf-xxx es un binario cargable de linux, mientras que arm-linux-xxx genera un objeto kernel (ko), que es un blob con su propio formato de vinculación (para módulos), o el kernel principal en sí, que no necesita un formato de empaquetado. Es decir, para el espacio de usuario desea que el objeto final dinámicamente vinculado sea un ejecutable ELF, una biblioteca u objeto compartido. Para el espacio del kernel, desea que el objeto final (kernel o módulo) esté en el formato de vinculación linux-arm-kernel.

Notarás que los objetos intermedios (archivos .o) de ambos objetivos son probablemente todos ELF, ya que eso es lo que espera la cadena de herramientas.

+0

Eso está muy mal. No hay diferencia en toolchain (o no * need * to one) para kernel y construcciones de espacio de usuario. –

2

Puede ejecutar arm-linux-gcc -v y arm-elf-gcc -v para ver algunas diferencias entre estas dos versiones de gcc (como las arquitecturas/idiomas de destino).

0

En nuestro caso construimos Linux usando sparc-elf-gcc y construimos busybox (aplicación ejecutándose en linux) usando sparc -... linux-gcc. y creo que esto es correcto, no al revés.

Cuestiones relacionadas