arm gcc toolchain как arm-elf или arm-none-eabi, в чем разница?

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

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

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

Спасибо


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

EABI:

ELF:

4 ответа

Решение

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

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

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

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

Вот отличный документ: https://community.freescale.com/thread/313490

Цепочки инструментов имеют условное обозначение, например 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.

Насколько я знаю:

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

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

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

Другие вопросы по тегам