부록 A.2.1 ABI (Application Binary Interface)
Application Binary Interface, 인터페이스는 어떤 것을 연결하는 것입니다. ABI도 결국에 Application Binary를 연결하는 약속 내지는 규약입니다. Application Binary는 애플리케이션인데 바이너리 수준에서 애플리케이션이 호환 가능하도록 만든 인터페이스(약속)입니다.
바이너리 수준은 쉽게 설명하자면 컴파일된 오브젝트 파일을 의미합니다 그리고 컴파일된 오브젝트 파일들을 링킹하는 놈은 링커(Linker)입니다. 즉, 링커가 오브젝트 파일들을 링크할 수 있도록 함수 호출 방법을 정의한 인터페이스(약속)입니다. (오브젝트 파일 중에서는 라이브러리 파일도 포함됨)
넓게 함수 호출 방법이라고 했지만 호출 방법의 세부적으로는 실행 파일 형식, 자료형, 레지스터 사용, 스택프레임 조직, 호출 규칙 입니다.
- 실행 파일 형식 : 컴파일러가 생성하는 바이너리 파일 구조
- 자료형 : 자료형의 실제 크기
- 레지스터 사용 : 파라미터와 로컬 변수가 레지스터 몇 개를 사용하는지 정함
- 스택프레임 조직 : 스택의 구조, 스택에 변수가 정의될 때 파라미터가 우선인지 로컬 변수가 우선인지 순서를 정하고 변수 선언 순서대로 저장하는지 혹은 반대로 저장하는지를 정함
- 호출 규칙 : 함수의 인수가 전달되는 방식, 모든 파라미터가 스택에 저장하는지 혹은 일부는 레지스터에 저장하는지 정함
책에 사용하는 gcc명은 arm-none-eabi-gcc입니다. eabi는 Embedded ABI이라는 뜻입니다. abi와 eabi를 나눈 이유는 abi 같은 경우에 운영체제에서 동작하는 실행 파일에 대한 폭넓은 정의까지 포함 되어 있기 때문입니다. 그리고 둘의 가장 큰 차이점은 동적 링크의 지원 유무 입니다. 윈도우의 dll, 리눅스의 so 동적 라이브러리 지원 vs 펌웨어는 정적 링크만 지원합니다.
펌웨어 같은 경우 운영체제가 없어 동적 라이브러리를 지원하지 않는 것이 당연합니다. 펌웨어는 그 자체로 모든 기능을 다 가지고 있는 바이너리 입니다.
정리
1. 인터페이스는 어떤 것을 연결할 때 만드는 약속 혹은 규약이다.
2. 이 약속을 세부적으로 따지면 실행 파일 형식, 자료형, 레지스터 사용, 스택프레임 조직, 호출 규칙으로 나눌 수 있다.
3. 펌웨어는 정적 링크만 지원한다. 그래서 eabi로 나누었다.
'OS > Embedded OS' 카테고리의 다른 글
부록 A.5 Makefile을 짜보자 (0) | 2021.08.24 |
---|---|
부록 A.4 gcc 사용법 (0) | 2021.08.24 |
부록 A.3 실행 파일 형식 (0) | 2021.08.24 |
부록 A.1 ARM 아키텍처 기초 지식 (0) | 2021.08.16 |
2장 개발 환경 구성하기 (0) | 2021.08.14 |