¿Qué ISA utiliza Cortex-M/R/A?
¿Cuál es la diferencia entre arm-none-eabi y arm-elf-gcc ? ¿Hay otros compiladores para dispositivos ARM que valga la pena mencionar?
Para cada otro procesador que posee (incluso si no sabe que lo tiene), probablemente tenga al menos una cosa basada en ARM, si no más de una. No puedes escapar de ellos, están en todas partes. Del mismo modo, hay varias cadenas de herramientas, pero GNU funciona bien y es fácil de conseguir. Puede construir uno propio fácilmente desde cero u obtener uno preconstruido, puedo agregar algunos enlaces más adelante en los comentarios.
Los predecesores del nombre de la corteza se usaban ARMV4T (ARM7TMDI) hasta ese punto, todas las instrucciones ARM compatibles y las instrucciones de pulgar. La familia cortex-m es una máquina solo para pulgar, no ejecuta instrucciones ARM. Ha habido algunas extensiones de pulgar-2, una pequeña cantidad en armv6m (cortex-m0 y m0+) y más de 100 en armv7m (cortex-m3 -m4 -m7), además de que la corteza-a de tamaño completo también admite una cantidad de thumb2 extensiones, antes eran solo instrucciones de pulgar indefinidas (16 bits) que se convirtieron en instrucciones de longitud variable (dos instrucciones de ancho) para abrir el puente entre las limitaciones del pulgar y las funciones de brazo de tamaño completo. la compatibilidad con el pulgar se agregó en gcc 3.xx y se ha mantenido desde entonces, las versiones 5.xx y 6.xx actuales conocen los diversos conjuntos de instrucciones de brazo, incluidos el pulgar y el brazo. Por lo tanto, no está limitado al usar la cadena de herramientas gnu que puede desarrollar para las familias cortex-a, cortex-r y cortex-m. Tenga en cuenta que la corteza-r es un brazo de tamaño completo, aunque creo que es más antiguo, pero dos núcleos unidos al mismo tiempo o de tal manera que si uno toma un camino diferente al otro, se produce una alarma de algún tipo. Son para cosas de seguridad/salud. Puedo comprar algunos tableros de evaluación de TI, pero aparte de eso, no los he visto (y por cierto bloqueé al menos dos de mis tableros de TI).
El armv8 es una nueva bestia, tiene aarch32 (que es la instrucción ARM tradicional con registros de 32 bits) luego aarch64 que es el nuevo conjunto de instrucciones de 64 bits, las instrucciones tienen 32 bits de ancho pero los GPR ahora son de 64 bits. Es un conjunto de instrucciones completamente incompatible, completamente nuevo. GNU lo admite, pero al estilo gnu, debe construir la cadena de herramientas para el objetivo aarch64. El objetivo genérico de la cadena de herramientas arm gnu se construirá para todos los núcleos anteriores a armv8, incluso hasta arm3 y tal vez arm2 (ver el núcleo ámbar en opencores, por ejemplo, puede usar las herramientas gnu arm target para ello).
Entonces, por ejemplo, arm-none-eabi-gcc --target-help muestra
Known ARM CPUs (for use with the -mcpu= and -mtune= options):
arm1020e arm1020t arm1022e arm1026ej-s arm10e arm10tdmi arm1136j-s arm1136jf-s arm1156t2-s arm1156t2f-s arm1176jz-s arm1176jzf-s arm2 arm250
arm3 arm6 arm60 arm600 arm610 arm620 arm7 arm70 arm700 arm700i arm710 arm7100 arm710c arm710t arm720 arm720t arm740t arm7500 arm7500fe arm7d
arm7di arm7dm arm7dmi arm7m arm7tdmi arm7tdmi-s arm8 arm810 arm9 arm920 arm920t arm922t arm926ej-s arm940t arm946e-s arm966e-s arm968e-s arm9e
arm9tdmi cortex-a12 cortex-a15 cortex-a15.cortex-a7 cortex-a17 cortex-a17.cortex-a7 cortex-a32 cortex-a35 cortex-a5 cortex-a53 cortex-a57
cortex-a57.cortex-a53 cortex-a7 cortex-a72 cortex-a72.cortex-a53 cortex-a8 cortex-a9 cortex-m0 cortex-m0.small-multiply cortex-m0plus
cortex-m0plus.small-multiply cortex-m1 cortex-m1.small-multiply cortex-m3 cortex-m4 cortex-m7 cortex-r4 cortex-r4f cortex-r5 cortex-r7
cortex-r8 ep9312 exynos-m1 fa526 fa606te fa626 fa626te fa726te fmp626 generic-armv7-a iwmmxt iwmmxt2 marvell-pj4 mpcore mpcorenovfp native
qdf24xx strongarm strongarm110 strongarm1100 strongarm1110 xgene1 xscale
Known ARM architectures (for use with the -march= option):
armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5e armv5t armv5te armv6 armv6-m armv6j armv6k armv6kz armv6s-m armv6t2 armv6z armv6zk armv7
armv7-a armv7-m armv7-r armv7e-m armv7ve armv8-a armv8-a+crc armv8.1-a armv8.1-a+crc iwmmxt iwmmxt2 native
entonces armv2 a armv8. Tengo curiosidad por saber que es ese armv8 me pregunto si solo es aarch32.
Pero para divagar, puede crear varios programas compatibles con el pulgar y ARM de 32 bits con una cadena de herramientas. El triplete para la denominación de gnu es confuso y, dado que creo que a veces puedes anularlo con lo que quieras, no es algo global tallado en piedra. Los populares actuales son arm-none-eabi- y arm-linux-gnueabi- el primero tiene la noción de incrustado usando newlib o algo así, el último está diseñado para construir programas contra glibc para ejecutar en Linux. Para bare metal, si escribe su código correctamente, puede usarlo indistintamente.
Entonces, las aplicaciones de cortex-m3 en su iPhone, bueno, no por thumb o thumb2, thumb, el original es el único conjunto de instrucciones que funciona en todos los núcleos desde armv4t hasta el presente. pero debido a que las aplicaciones de cortex-m3 son básicas o son para un sistema operativo pequeño (RTOS como FreeRTOS), es probable que sus llamadas al sistema sean incorrectas y que el formato binario sea incorrecto para ejecutarse en su teléfono. La noción de que el conocimiento de las instrucciones del pulgar para un córtex-m también se aplica a un armv7 es correcta. Y el núcleo de su teléfono puede manejar las instrucciones del pulgar. Pero el lenguaje de programación, la cadena de herramientas y otros elementos dictados por Apple pueden limitar lo que puede o no puede hacer con las aplicaciones del teléfono.
El enlace de la plataforma de lanzamiento que publicaste es el enlace que iba a publicar, pero ahora se ha movido a una herramienta alojada en el brazo que usan las letras rm que son confusas ya que cortex-r son instrucciones de brazo de tamaño completo y cortex-m son solo para pulgar . Pero el cortex-r y el cortex-m son familias que apuntan a microcontroladores o ese nivel de diseño integrado. Por lo tanto, tiene sentido desde esa perspectiva, y recomendaría esa cadena de herramientas si no desea crear la suya propia. Sin embargo, no va a utilizar esa cadena de herramientas para crear aplicaciones de iPhone.
arm-elf-gcc es solo otro triplete, antes del eabi abi, que fue uno de los tripletes populares. no significan demasiado, pero al compilar la cadena de herramientas, el triplete hace que se realicen ciertas elecciones predeterminadas, y si no reconoce el triplete o no tiene un comodín para uno de los elementos, el sistema de creación de stock se recuperará. No he intentado construir arm-elf o arm-none-elf en mucho tiempo.
La cadena de herramientas de la plataforma de lanzamiento y/o la construcción para arm-none-eabi funcionarán en todos los núcleos enumerados, puede construir integrados (bare metal, basados en RTOS, etc.) para cualquiera de esos núcleos, desde un quad core armv7 hasta un cortex- m0+, pero no enlace para binarios de linux. Bare metal o cualquier soporte que proporcione
Los binutils son genéricos, o pueden serlo, el ensamblador puede tomar ensamblaje y hacer un objeto. El vinculador puede vincular objetos en función de las reglas del script del vinculador. El compilador puede tomar un archivo y crear un objeto a partir de él que se pueda vincular con otros objetos. Nada de esto depende del sistema operativo todavía, es cuando combina todas estas cosas más las bibliotecas externas deseadas por los programas gcclib, la biblioteca C y las llamadas al sistema cuando obtiene un sistema operativo específico. Y todos los triples le permitirán crear archivos de objetos desde asm o C y vincularlos siempre que evite las bibliotecas externas. Si siente la necesidad de esas bibliotecas, incluso bibliotecas C o incluso división fija o flotante o multiplicación en software (gcclib), comienza a depender del sistema operativo, las bibliotecas externas comienzan a involucrarse.
m.alin
usuario3528438
none-eabi
significa no OS y EABI como ABI. os también podría ser linux y otros, ABI podría ser gun-eabi/gnu-eabi-hf, etc. 2.1) no, aún puede usarlo para v7a, v6, etc., siempre que no-os y EABI sean lo que usted necesidad. 3) utiliza un abi: elf diferente, una versión anterior de ARM ABI.Félix Crazzolara
Félix Crazzolara
viejo contador de tiempo
viejo contador de tiempo