[Linux] gnueabi vs gnueabihf 차이를 이해해보자(ABI)

2026. 3. 25. 14:36·Embedded Systems/리눅스

비글본블랙을 부팅시키는 과정에서 툴체인을 만지다 보니, arm-linux-gnueabi, arm-linux-gnueabihf, arm-none-eabi 같은 이름을 자주 보게 된다. 저 뒤에 붙는 단어들(gnueabi 등등)이 구체적으로 무엇을 의미하는지 궁금해 파헤쳐보았다.

 

gnueabi, gnueabihf, eabi 모두 ABI의 타입을 정의하는 단어들이다. ABI란 무엇인가?


ABI(Application Binary Interface) 너는 누구냐.

우선 API란 무엇일까? 다음 출처에 따르면, API란 소스코드 레벨에서 두 소프트웨어가 소통하기 위한 규칙이다.

그렇다면 ABI는 무엇일까? 다음 stackoverflow 답변 에 따르면 ABI는 기계어 수준의 API라고 한다.

예를 들어, 내가 외부 라이브러리를 사용해 소스코드를 작성하면 API를 이용하여 라이브러리에 접근한다. 코드가 컴파일된 이후에는 프로세스가 된 내 애플리케이션은 ABI를 통해 라이브러리의 이진 데이터에 접근한다. 요런 개념인 것이다. ABI는 API처럼 컴파일된 내 애플리케이션이 외부 라이브러리에 접근하는 방식을 정의한 것인데, 단지 로우레벨로 정의했을 뿐이다.

 

정리하면, ABI는 컴파일된 프로그램(바이너리)들끼리 서로 어떻게 상호작용하는지에 대한 규칙이다.

 

EABI(Embedded Application Binary Interface) 너는 또 누구냐

EABI정의에 대한 신용할 수 있는 소스가 많이 없어서 고생을 꽤나 했다.. 위키피디아가 그나마 가장 신뢰할 수 있는 것 같아 읽어보았다(설명이 참 잘 돼있어서 풀 텍스트를 가져왔다..).

EABI는 임베디드 OS에서 사용되는 ABI로, 임베디드 프로그램을 위한 파일 포멧이나 데이터 타입, 레지스터 사용, 스택 프레임 할당방식, 함수 매개변수 전달방식 등등 특징을 정의한다.

EABI를 지원하는 각 컴파일러 및 어셈블러는 다른 컴파일러 및 어셈블러가 생성한 코드와 호환되는 목적 파일을 생성한다. 이를 통해 개발자는 한 컴파일러가 생성한 라이브러리를 다른 컴파일러가 생성한 목적 파일과 링크할 수 있다.
일반적으로 EABI는 대상 임베디드 시스템의 제한된 리소스에 대해 성능에 최적화되어 있다. 따라서 EABI는 일반적으로 데스크톱 운영 체제에서 볼 수 있는 커널과 사용자 공간 사이의 추상화를 생략할 수 있다. 예를 들어, 더 작은 실행 파일과 더 빠른 로딩을 위해 동적 링킹을 피할 수 있고, 고정된 레지스터 사용은 더 작은 스택과 커널 호출을 허용하며, 특권 모드에서 응용 프로그램을 실행하면 장치 드라이버 호출의 간접 없이 사용자 지정 하드웨어 작업에 직접 접근할 수 있다.

널리 사용되는 EABI에는 파워PC, Arm, MIPS EABI가 포함된다. C 라이브러리와 같은 특정 소프트웨어 구현은 더 구체적인 ABI를 형성하기 위해 추가적인 제한을 부과할 수 있다. 한 가지 예는 ARM용 GNU OABI및 EABI인데, 둘 다 ARM EABI의 하위 집합이다.

 

guneabi와 gnueabihf

이놈들의 정확한 정의 출처를 찾으려 했지만 쉽지 않았다... 요놈도 stackoverflow에서 말하는 정의로 우선 이해하고 넘어가본다!

 

gnueabi는 리눅스에 특화된 EABI이다.

gnueabihf의 'hf'는 hard-float의 약자로, 컴파일러와 라이브러리들이 하드웨어 부동소수점 명령어를 사용하는 EABI이다.

 

결론적으로, 둘은 다른 하드웨어를 상정하기 때문에 명령어 레벨에서 다르다.

 

 

< References >

https://en.wikipedia.org/wiki/Application_binary_interface

https://ece353.engr.wisc.edu/arm-assembly/eabi/

https://stackoverflow.com/questions/2171177/what-is-an-application-binary-interface-abi

https://aws.amazon.com/ko/what-is/api/

https://stackoverflow.com/questions/8060174/what-are-the-purposes-of-the-arm-abi-and-eabi

https://stackoverflow.com/questions/26692065/difference-between-arm-eabi-arm-gnueabi-and-gnueabi-hf-compilers

'Embedded Systems > 리눅스' 카테고리의 다른 글

[Linux] crosstool-ng 빌드시 'Retrieving needed toolchain components' 에러 디버깅  (0) 2026.03.27
[Linux] 를 이해하기 위해 일단 비글본블랙에 올려보자. - 툴체인 만들기  (0) 2026.03.25
[Linux] 임베디드 리눅스 부팅 순서 + 비글본 블랙(BBB) 부팅 순서  (0) 2026.03.17
[Linux] 임베디드 리눅스 부팅 타임 최적화  (0) 2025.11.19
[Linux] BBB Linux boot time 최적화 #0  (0) 2025.11.04
'Embedded Systems/리눅스' 카테고리의 다른 글
  • [Linux] crosstool-ng 빌드시 'Retrieving needed toolchain components' 에러 디버깅
  • [Linux] 를 이해하기 위해 일단 비글본블랙에 올려보자. - 툴체인 만들기
  • [Linux] 임베디드 리눅스 부팅 순서 + 비글본 블랙(BBB) 부팅 순서
  • [Linux] 임베디드 리눅스 부팅 타임 최적화
jh-rrr
jh-rrr
기술의 깊이에 집중하며 성장하길 지향합니다.
  • jh-rrr
    Embedded World
    jh-rrr
  • 전체
    오늘
    어제
    • 분류 전체보기 (73) N
      • 소프트웨어 (18)
        • 프로그래밍 (2)
        • C (11)
        • Python (1)
        • 운영체제 (3)
        • 네트워크 (0)
      • Embedded Systems (24) N
        • 리눅스 (13)
        • MCU 기본 (2)
        • 임베디드 레시피 (0)
        • Arm 아키텍처 (5) N
      • Projects (1)
        • Cortex-M3 (1)
        • 재난 구조 로봇 (0)
      • AI (12)
        • Computer Vision (2)
        • Deep Learning (4)
        • cs224n (2)
        • cs231n (2)
      • 취업 준비 (1)
        • 프로젝트 & 자격증 (1)
      • 엔지니어링 뉴스 (3)
      • Paper Reviews (4)
      • Insights (7)
        • Seminar ! (2)
        • 서평 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    일귀
    stm32f 시리즈를 이용한 arm cortex-m3/m4 구조와 응용
    리눅스
    커널 이미지
    kernel image 란
    conda: command not found
    리눅스 오류
    커널 이미지란
    OS 이미지
    essential deep learning paper reading
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
jh-rrr
[Linux] gnueabi vs gnueabihf 차이를 이해해보자(ABI)
상단으로

티스토리툴바