Программирование ARM Что означают аббревиатуры ABI и EABI? Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Что означают аббревиатуры ABI и EABI? Печать
Добавил(а) microsin   

Аббревиатуры ABI, EABI, OABI обозначают стандарты организации программного обеспечения для различных платформ.

Примечание: под платформой понимается комбинация определенного оборудования, программного обеспечения операционной системы и кода, написанного определенным языком программирования и преобразованного в машинный код определенным компилятором.

ABI. Аббревиатура расшифровывается как Application Binary Interface. Это стандарт, который определяет взаимосвязь между низкоуровневыми концепциями выполнения кода и высокоуровневыми языками программирования, а также возможности машинного кода определенных аппаратных / операционных платформ. Сюда относятся такие вещи:

● Как типы данных языков C, C++, Fortran и т. д. лежат в памяти (размеры данных, выравнивание, endianness [7]).
● Как работают вложенные вызовы функций - где и как сохраняется информация о том, куда нужно сделать возврат в вызывающую функцию, где сохраняются передаваемые в функцию переменные (в каких регистрах CPU и/или ячейках памяти), как передаются возвращаемые из функции значения.
● Как работает первоначальная инициализация программы (код startup), какой должен быть формат исполняемого кода (executable), как и где хранится код и данные в памяти, как работает загружаемый код DLL, и т. п.

Таким образом, ABI специфичен для определенного языка (следовательно, есть C ABI, C++ ABI, Fortran ABI, Pascal ABI, ..., даже спецификация байт-кода Java, хотя и нацелена на некий "виртуальный" процессор вместо реального, это тоже ABI), а также для определенной операционной системы (MS Windows и Linux на одном и том же оборудовании используют разный ABI) и аппаратных особенностей CPU (API для процессоров ARM и x86 отличаются друг от друга).

Интерфейсы API развивались и обновлялись в течение длительного времени, чтобы учесть изменения новых функций CPU (например, указания того, как должны использоваться регистры x86 SSE, должны быть сделаны после того, как эти регистры появились в CPU, что соответственно потребовало обновления ABI).

Без такой стандартизации (машинный) код, созданный разными компиляторами, не смог бы использовать один и тот же тип библиотек (нельзя было бы заранее знать, как код функций библиотеки ожидает передачи аргументов, как возвращает значения, или как размещены в памяти данные структур).

Каждая платформа (см. примечание выше) определяет целый набор таких ABI, чтобы обеспечить какой-то уровень совместимости. Терминология этих понятий не очень четкая, иногда люди говорят просто об "ABI", в другой раз это называется "поддержкой платформы", или имеют в виду особенность реализации языка, например говорят "C++ ABI". Имейте в виду, что все это не одно и то же.

Даже на определенной платформе нет необходимости использовать только один ABI, потому что различные способы организации среды выполнения могут иметь разные свойства и некоторые преимущества для определенных областей использования (при определенных условиях давать лучшее быстродействие, или более эффективное использование памяти better memory usage, или что-то еще - в зависимости от программы), и разработчики системы стараются сделать её достаточно гибкой и управляемой.

На 32-битной Microsoft Windows, наример, существует множество ABI (fastcall, stdcall, pascal, ...) для соглашений о вызовах функций.

EABI. Аббревиатура означает Embedded Application Binary Interface, т. е. это то же самое, что и ABI, но для встраиваемых приложений (т. е. для программ микроконтроллеров).

Стандарт EABI определяет соглашения для форматов файлов, типов данных, использованию регистров, организацию области стека, передачу параметров в функцию как для одиночной программы встраиваемой системы (bare-metal software или firmware), так и для встраиваемой операционной системы (Embedded OS, чаще всего это RTOS).

Компиляторы, которые поддерживают EABI, создают объектный код, который совместим с кодом, создаваемым другими подобными компиляторами, позволяя разработчикам линковать в свой код библиотеки, сгенерированные другим компилятором. Разработчики, которые пишут на своем языке ассемблера, могут также использовать двоичный код, сгенерированный совместимым компилятором.

EABI был разработан для оптимизации производительности в условиях ограниченных ресурсов, которыми обладает встраиваемая (embedded) система. Таким образом, спецификации EABI опускают многие абстракции, которые реализованы для взаимодействия между ядром и кодом пользователя в сложных операционных системах. Например, динамическая линковка (загружаемые библиотеки DLL) может не поддерживаться, чтобы уменьшить объем двоичного кода и ускорить его загрузку и выполнение. Также может использоваться фиксированное назначение регистрам определенных функций, что позволяет более экономно использовать стек и ускорить вызовы функций и обработчиков прерываний. Также часто для ускорения работы дозволяется работа приложения пользователя в привилегированном режиме процессора, что дает полный контроль приложению над аппаратными ресурсами MCU без необходимости вызова промежуточного драйвера операционной системы.

Часто используемые EABI включают PowerPC [3], Arm EABI [4] и MIPS EABI [5]. Специфические программные реализации наподобие библиотек языка C могут накладывать дополнительные ограничения для формирования более конкретного ABI; один из примеров это GNU OABI [6] и EABI for ARM, оба они являются подмножествами ARM EABI.

[Ссылки]

1. What are the purposes of the ARM ABI and EABI? site:stackoverflow.com.
2. Application binary interface site:wikipedia.org.
3. "EABI Summary". PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30.
4. ABI for the Arm Architecture site:developer.arm.com.
5. MIPS EABI documentation site:sourceware.org.
6. ArmPorts site:wiki.debian.org.
7. Порядок следования байт (endianness).

 

Добавить комментарий


Защитный код
Обновить

Top of Page