ABI와 EABI
ABI (Application Binary Interface)란
응용 프로그램과 운영체제 또는 라이브러리와의 표준화된 인터페이스를 제공하는 것을 말한다. ABI는 서로 다른 컴파일러가 만든 오브젝트 파일을 연결하여 사용할 수 있게 한다.
Application 간 binary 데이터를 어떻게 교환하는지 다음과 같은 규칙들을 정한다.
- 데이터 타입과 정렬방법
- 함수 호출 시 인수 및 결과에 대한 레지스터 교환 방법
- 시스템 콜 호출 방법
- 프로그램 코드의 시작과 데이터에 대한 초기화 방법
- 파일 교환 방법 (ELF 등)
API랑 뭐가 다른거지?
ABI는 API보다 저수준(binary)란 점. 그리고 API는 소스코드에서 사용되고 ABI는 바이너리에서 호환이 된다는 점에서 다르다. 아키텍쳐와 운영체제마다 조금씩 차이가 있다.
EABI (Embedded ABI)
ARM이나 PPC(PowerPC)같은 임베디드 시스템에 적합하도록 개정된 ABI 표준을 말한다. 임베디드 프로그램을 수행하는 파일형식, 자료형, 레지스터 사용, 스택 프레임 조직, 명령 변수를 위한 표준 변환을 정의하고 있다.
EABI를 지원하는 컴파일러는 이와 같은 또 다른 컴파일러가 만든 코드와 호환되는 목적 코드를 만드므로 개발자들이 다른 컴파일러가 만들어낸 목적 코드와 한 컴파일러로 만든 라이브러리를 연결할 수 있게 한다. 자체적인 어셈블리어 코드를 작성하는 개발자들은 EABI를 사용하여 호환 컴파일러가 만들어낸 어셈블리 코드와 상호작용하게 할 수 있다.
일반 목적의 운영체제에서 ABI와 EABI의 주된 차이점은 권한 명령이 응용 프로그램 코드 내에서 실행되는 점, 동적 링크가 요구되지 않는다는 점, 메모리 저장을 위해 더 작아진 스택 프레임 조직을 갖춘다는 점이 있다.
ARM 아키텍처에서 리눅스 버전에 따라 ABI를 사용하는 방식이 두가지로 나뉜다.
- arm/OABI
- 커널 v2.6.15 이전에 사용되던 ABI 방식
- glib 2.3.6 까지 사용
- gcc : linux-arm-none-gnu - arm/EABI
- 커널 v2.6.16 부터 사용되는 ARM EBAI 방식
- glibc v2.3.7 및 v2.4 부터 사용
- gcc : linux-arm-none-gnueabi
EABI를 지원하기 위해서는 cross-compile을 할 때에 EABI 표준을 지원하는 교차 컴파일러를 사용해야 한다.
(예를들자면 Intel FPGA Monitor Program에서 사용하는 교차개발환경)
'Computer Engineering > 임베디드 시스템' 카테고리의 다른 글
임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현 (0) | 2019.06.12 |
---|---|
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수 (0) | 2019.06.11 |
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항 (2) | 2019.06.11 |
툴체인(Tool Chain)이란 (0) | 2019.06.11 |
임베디드 시스템 - 교차 개발 환경(JTAG에 관하여) (0) | 2019.06.11 |
댓글
이 글 공유하기
다른 글
-
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수
2019.06.11 -
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항
2019.06.11 -
툴체인(Tool Chain)이란
툴체인(Tool Chain)이란
2019.06.11 -
임베디드 시스템 - 교차 개발 환경(JTAG에 관하여)
임베디드 시스템 - 교차 개발 환경(JTAG에 관하여)
2019.06.11