arm gcc toolchain как arm-elf или arm-none-eabi, в чем разница? - PullRequest
45 голосов
/ 11 мая 2011

Когда вы создаете набор инструментов gcc, есть возможность создать его как arm-elf или как arm-none-eabi, но в чем разница?

Сегодня я пользуюсь eabi, но это только потому, что все остальные, кажется, делают это ... но так как это действительно плохой аргумент, было бы очень приятно понять разницу.

Примечание. Этот набор инструментов будет кросс-компилировать код для mcu: s на основе Cortex-M3, например stm32.

Спасибо


Некоторые ссылки :

EABI:

ELF:

Ответы [ 4 ]

36 голосов
/ 15 мая 2011

У каждой архитектуры или пары архитектуры / ОС есть ABI.ABI (двоичный интерфейс приложения) описывает, как должны вызываться функции, числа системных вызовов, передаваемые аргументы, какие регистры можно использовать ...

Аби описывает, как компилятор должен генерировать ассемблер.

Если вы используете только ассемблер, вам не нужно заботиться о ABI.

arm-elf и arm-none-eabi, просто используйте две версии Arm ABI.Набор инструментов eabi использует более новую ревизию, но его также можно назвать arm-elf-eabi, поскольку он также генерирует эльфов.

33 голосов
/ 17 апреля 2015

Здесь - отличное объяснение.

Наборы инструментов следуют свободному соглашению об именах: arch [-vendor] [-os] -eabi

  arch    refers to target architecture (which in our case is ARM)
  vendor  refers to toolchain supplier
  os      refers to the target operating system
  eabi    refers to Embedded Application Binary Interface

Некоторые примеры:

arm-none-eabi: этот набор инструментов предназначен для архитектуры ARM, не имеет поставщика, не ориентирован на какую-либо операционную систему и соответствует ARM EABI.

arm-none-linux-gnueabi: этот набор инструментов предназначен для архитектуры ARM, не имеет поставщика, создает двоичные файлы, которые запускаются в операционной системе Linux, и использует GNU EABI. Он используется для ориентированных на ARM систем Linux.

32 голосов
/ 13 июня 2013

Как я знаю:

arm-elf toolchain генерирует код obj для некоторых ОС, которые поддерживают выполнение формата elf (например, linux ABI).ОС будет контролировать выполнение вашей программы.

arm-none-eabi toolchain генерирует код obj для микроконтроллеров или микропроцессоров (для голого металла это будет встроенный EABI ABI).Этот код загружается для очистки флэш-памяти MC, и ядро ​​MC начинает выполнять его после включения питания.Нет ОС, расширенный набор команд, нет возможности для связи с общими модулями.

4 голосов
/ 12 марта 2012

ARM EABI - это стандарт, созданный ARM, который позволяет различным наборам инструментов создавать совместимые объекты.Например, чтобы одна цепочка инструментов могла связывать объекты, созданные другой цепочкой инструментов.

...