728x90
반응형
1. ABI(Application Binary Interface)란
- 서로 다른 binary program 간의 Interface
- 기계어 코드 간의 호환성을 맞추기 위해 정의된 application binary interface 규격
- 서로 다른 compiler를 통해 source code를 compile 하더라도 object 파일끼리 linking이 가능하도록 함
1.1. ABI 내용
- ISA(Instruction Set Architecture), Register file 구조, Memory 접근 유형 등의 세부 사항
- Processor 직접 접근 가능 기본 자료형 size, layout 및 data 구조 정렬
- Calling convention, 함수의 입력 인자 및 return 값 전달 규칙
- Name mangling
- 예외 전파
1.2. API(Application Programming Interface)와의 차이
- API는 함수의 정의 방식을, ABI는 함수의 calling convention을 정의
- Ex) Charging_Start 함수 사용 시
void Charging_Start(int current);
- API
- 함수 이름
- Parameter type
- Header declaration
- ABI
- current 변수를 저장할 register
- Stack 저장 방식
- Return 방식
1.2.1. API
- API는 Source code level에서의 규약 : Source code가 다른 SW component와 상호작용하는 방식을 정의
- 즉 Harware 독립적인 Programming 관점에서의 Interface를 의미
- 즉 해당 Library 사용 시의 코드 작성 방법을 정의한 것
- Ex) FreeRTOS, STM32 HAL Library에서 사용하는 아래 함수들이 API임
xTaskCreate() // FreeRTOS API
HAL_GPIO_WritePin() // STM32 HAL Library API
1.2.2. ABI
- ABI는 Binary level의 interface 규약 : Compile 된 binary 파일이 기계어 level에서 상호작용하는 방식을 정의
- 즉 compile 된 코드(object)에 대한 interface를 정의
- Compile 후 binary로 나온 결과물(object 등) 간의 연결에 중점
- Ex) Windows 98에서 사용하는 program을 Windows XP에서도 그대로 실행 가능
- Ex) sum 함수 사용 시, 아래와 같은 사항들을 지정
int sum(int a, int b)
{
return a + b;
}
| Item | ARM EABI rule |
| 변수 a 저장 | R0 |
| 변수 b 저장 | R1 |
| return value | R0 |
| stack alignment | 8 byte |
- 즉 compile 된 binary 파일들이 recompling 없이 함께 동작할 수 있도록 하는 방식을 정의한 것
- EABI는 각 argument가 사용할 register를 지정하는 등의 CPU architecture에 의존적인 약속
2. EABI(Embedded ABI)란
- Embedded System에 특화된 ABI로, Embedded System에서 사용하는 protocol
- Host가 없는 환경에서의 GCC compiler toolchain for ARM
- EABI를 지원하는 compiler는 다른 compiler가 생성한 코드와 호환되는 object file을 생성
- 이를 통해 한 compiler가 생성한 library를 다른 compiler가 생성한 object file과 link 가능
- EABI는 대상 embedded system의 제한된 resource에 대해 성능에 최적화되어있음
- Kernel과 사용자 공간 사이의 추상화 생략 가능
- Ex) 더 작은 실행 파일과 더 빠른 로딩을 위해 동적 linking을 피함
2.1. EABI 내용
- 파일 형식
- 자료형
- Register 사용 법
- Stack Frame 구성
- Embedded SW Program의 함수 매개변수 전달
3. None EABI란
- EABI가 아니라는 것이 아닌, 특정 제조사나 OS에 특화된 EABI가 아니라는 뜻
- HW 자체에 직접 Program을 올리는 환경을 의미
- 즉 OS 없이 Bare-metal 환경의 MCU 개발 시 사용하는 SW compile 및 build 환경
- ARM Core 기반의 SW는 거의 arm-none-eabi-linux 혹은 arm-none-gnueabi-linux를 사용
- Ex) Toolchain 예시
<architecture>-<vender>-<os>-<abi>
arm-none-eabi-gcc
참고 자료 :
- https://ko.wikipedia.org/wiki/응용_프로그램_이진_인터페이스
- https://embed-avr.tistory.com/48
- https://blog.naver.com/dong880510/140156760753
728x90
반응형
'Study_Programming' 카테고리의 다른 글
| Visual Studio Project 이름 변경법 (0) | 2025.09.30 |
|---|---|
| 자료구조 (0) | 2025.01.20 |
| DLL(Dynamic Link Library)이란 (0) | 2024.07.30 |