[RTOS] 2장: 개발환경구성

YumeIroVillain·2022년 1월 29일
0

컴파일러 설치

sudo apt install gcc-arm-none-eabi
arm-none-eabi-gcc -v
  • ABI란: Application Binary Interface
    Application
    역할: 바이너리 수준에서 애플리케이션이 호환가능하도록 만든 인터페이스.
    '바이너리 수준'은 컴파일이 완료된 오브젝트 파일을 의미.
    따라서, ABI는 링커가 오브젝트 파일(라이브러리 포함)을 링킹할 수 있도록 함수 호출방법을 정의한 인터페이스라는 의미.
    '호출방법'이라는 말이 굉장히 모호한데, 여기서 호출방법이란 실행파일형식, 자료형, 레지스터 사용규칙, 스택프레임 조직, 호출규칙을 말함(자세한건 각주후술)
  • 그렇다면, EABI란: Embedded Application Binary Interface
    역할: 마찬가지이나, 임베디드 환경에서 사용하는 ABI를 정의.
    차이: 동적링크를 지원하지 않음

    운영체제가 없는데, 누가 동적 라이브러리를 관리하고 동적 링킹을 해 주나요? Firmware 는 그 자체로 필요한 모든 기능을 다 포함하고 있는 바이너리여야 합니다.

따라서, EABI는 동적링킹을 지원하지 않는다.

QEMU 설치

sudo apt installl qemu-system-arm
qemu-system-arm --version
qemu-system-arm -M ?

마지막 명령어는 지원가능한 머신을 출력한다. 참고만 하면 된다.
참고로 본 책에서는 realview-pb-a8을 택했다.
ARM 공식에서 파는 머신을 애뮬레이팅한거라 도큐먼트가 많기 때문.

에러발생 시 대처

나의 경우, kr.ubuntu/archive 주소를 못찾는 에러가 발생했는데,

sudo apt-get update

때려주니 주소 잡는데 성공했다.

실습 소스코드 위치

https://https://github.com/navilera/Navilos/commits/master 로 접속
wget https://github.com/navilera/Navilos/archive/95f2b8d.zip
# 이후로도 챕터에 맞춰 해시값만 다르게 설정.

ABI 역할에 대해 좀 더 세부적으로 들어가자면

  • 실행파일형식: 컴파일러가 생성하는 바이너리 파일의 구조
  • 자료형: 언어가 사용하는 자료형의 실제크기
  • 레지스터 사용: 파라미터와 로컬변수가 레지스터를 몇 개 사용하는지
  • 스택프레임 조직: 스택을 어떻게 만들지
    • 스택에 변수가 정의될 때 Parameter First 인지 Local Variable First 인지
    • 선언 순서대로 저장되는지 선언 반대순으로 저장되는지
    • ...
  • 호출규칙: 함수의 인수가 전달되는 방식.
    • 모두 스택에 넣어서 전달하는지
    • 일부는 레지스터에 넣어 직접 건네주는지

등을 정의하는 중요한 규약이다.
이것을 정의함으로써 '바이너리 수준' 에서 애플리케이션 호환이 보장된다.

profile
HW SW 둘다 공부하는 혼종의 넋두리 블로그 / SKKU SSE 17 / SWM 11th

0개의 댓글