1. 임베디드 리눅스 구성요소
1. 툴체인 (Toolchain)
타겟 장치를 위한 코드를 만드는데 필요한 컴파일러와 기타 도구로 구성되어있다.
2. 부트로더 (Bootloader)
3. 커널 (Kernel)
4. 파일 시스템 (File System)
※ 다섯번째 요소 : 임베디드 애플리케이션에 고유한 프로그램의 묶음, 장치를 해당장치답게 만들어줌.
2. 툴체인
2.1 툴체인 소개
툴체인은 임베디드 리눅스 보드 브링업(Bring-up) 과정의 첫 번째 요소입니다. 소스 코드를 차텟 장치에서 실행할 수 있는 실행파일로, 컴파일러, 링커, 런타임 라이브러리를 포함하는 컴파일 도구들의 집합입니다.
- 타겟 프로세서를 위한 최적의 명령어 세트를 제공해야 합니다.
- 프로젝트에 필요한 언어를 POSIX 표준에 따라 제공해야 합니다.
- 프로젝트 초기에 결정된 툴체인은 프로젝트가 끝날 때까지 변경되어선 안됩니다.
흔히, 많이 쓰이는 툴체인은 GNU 툴체인이어서 GNU 툴체인은 기존 코드와의 호환과 폭넓은 아키텍처/운영체제를 지원하는 장점이 있다.
한편, 지난 수 년간 발전해온 Clang 컴파일러는 좀더 빠른 컴파일과 향상된 진단기능을 가지게 되어, GNU 툴체인을 대체할 정도로 발전하였다.
표준 GNU 툴체인 구성
- Binutils (어셈블러, 링커 등 바이너리 관련 유틸리티 조합)
- GCC (C 컴파일러)
- C 라이브러리 (glibc 또는 uClibc)
보통 툴체인은 SoC 또는 보드 벤더(제조사)에서 제공하는 걸 사용하지만, 여건에 따라 직접 만들어야 하기도 합니다.
보통 3가지 방법 중 하나를 이용합니다.
1. 처음부터 하나하나 직접 제작 : Cross Linux From Scratch
2. Crosstool-NG 사용 : GNU Autotools 빌드 시스템, 스립트화 되어있으며 메뉴 기반 UI도 제공
3. Buildroot 또는 Yocto와 같은 빌드시스템 사용 : 가장 편리하며, 거의 표준화 되는 추세입니다.
2.2 툴체인 종류
네이티브
툴체인이 만드는 프로그램과 같은 종류의 시스템, 종종 동일한 시스템에서 실행된다.
PC와 서버에서는 일반적인 경우이며, 특정 부류의 임베디드 디바이스에서는 점점 보편화 되고 있다.
크로스
툴체인이 타겟 머신과 다른 종류의 시스템에서 실행된다.
빠른 PC에서 개발한 다음 임베디드 디바이스에 로드해 테스트할 수 있다.
거의 모든 임베디드 리눅스 개발이 크로스 개발 툴체인을 사용
호스트 와 타겟이 동일한 아키텍처일 경우, 크로스 컴파일 방식은 호스타와 타겟을 분리하되 개발 라이브러리 등 툴체인은 프로젝트 기간 내내 변치 않아야 한다는점을 잊지 말자.
다수의 추가 패키지를 컴파일하려면 네이티브로 컴파일 하는 편이 낫다.
3. etc
ABI (Application Binary Interface) : 함수 호출간에 인자를 넘기는 호출 규칙
ARM 아키텍처는 EABI (Extended ABI)로 바뀌며 범용(정수) 레지스터를 쓰지만, 새로 바뀐 EABIHF (EABI Hard-Float)는 부동소수점 레지스터를 사용한다.
C 라이브러리
glibc : 표준 GNU C 라이브러리로, POSIX API의 가장 완전한 구연이어서 크기가 크다.
musl libc : 표준을 준수하면서 작은 크기로, 램과 저장공간의 크기가 제한된 시스템을 위한 좋은 선택
uClibc-ng : MMU 없는 CPU(마이크로컨트롤러) 용으로 개발했지만, 후에 리눅스에서 사용할 수 있도록 modify되었다.
'Embedded : : Linux > : : Linux' 카테고리의 다른 글
Linux C/C++ shared library 컴파일하기 fPIC 옵션 GOT, PLT (0) | 2024.04.18 |
---|---|
[Linux] 환경변수 PATH 추가하기 (0) | 2024.04.17 |
임베디드 리눅스 개발 단체 (0) | 2023.11.14 |
리눅스(유닉스)의 파일 시스템 (0) | 2023.11.09 |
리눅스(Linux)의 디렉터리(Directory) (0) | 2023.11.09 |