임베디드 C 프로그래밍
1) 임베디드 환경설치
- 생략
2) 컴파일 과정
컴파일: 소스파일을 목적파일에 거쳐 최종목적인 바이너리파일을 생성하는 과정
컴파일 단계
- 전처리, 컴파일, 어셈블, 링크 과정으로 바이너리 생성
- 툴체인이 위의 과정을 수행하기 위해 전처리기, 컴파일러, 어셈블러, 링커를 차례대로 호출한다
- 전처리: include 시킨 헤더 내용과 define한 메크로, 상수를 소스파일에 복사하는 작업
별도의 옵션이 없을 시 .i형태로 결과물을 임시 저장 후 삭제된다
** -E 옵션: 전처리까지만 하고 중단(컴파일 전 중단)
- 컴파일: 고수준의 소스파일을 저수준의 파일(.s, 어셈블 파일)로 번역
- 어셈블: 어셈블리어를 기계어로 번역(.s ->. o)
- 링크: 여러 오브젝트파일(.o)과 라이브러리 파일(.a, .so)들을 참조하여 최종 바이너리 생성
각 오브젝트 파일들이 포함하던 코드와 데이터는 section단위로 묶어 1개의 실행가능한 바이너리 파일을 생성
** 오브젝트 파일은 링커에 의해 해석될 수 있도록 여러 섹션들로 구성되어 있다(ex: text, rodata, data, bss)
3) 바이너리 이미지
- 실행가능 이미지: 메모리에 적재되어 실행가능한 오브젝트 파일
- 바이너리 형식에는 여러 형식이 있다. ex) elf
4) elf
Executable and Linkable Format 의 약자이며, 리눅스와 유닉스 계열 시스템의 표준 바이너리 파일 형식이다.
** 참조: https://ko.wikipedia.org/wiki/ELF_%ED%8C%8C%EC%9D%BC_%ED%98%95%EC%8B%9D
elf 형식의 파일을 디버깅 하기위한 표준 디버깅 자료형식에는 DWARF가 있다
** 참조: https://ko.wikipedia.org/wiki/DWARF
ELF 형식의 파일은 다음과 같이 구성되어 있다
- ELF Header
: 파일 포맷명, 오브젝트 타입, 엔디안, 코어타입, 운영체제, 시작 어드레스 정보
: 그 밖에 프로그램 런타임시 사용되는 세그먼트 정보를 담은 program header(program header table), 바이너리의 섹션 정보를 담은 section header(section header table)가 있다
- binary
: 코어가 실행하는 순수한 기계어 코드만 존재하는 실행파일
: Text, rodata, data, section만 존재한다
- debug symbol
: 소스레벨 수준의 디버깅을 위한 심볼정보
이후는 C언어, 임베디드 시스템 이해와 겹치는 부분이 있어 생략
'Study > Embedded basic' 카테고리의 다른 글
Arm 구조 및 제어 - 2 (0) | 2022.05.29 |
---|---|
Arm 구조 및 제어 - 1 (0) | 2022.05.29 |
임베디드 시스템 이해 - 2 (0) | 2021.09.24 |
임베디드 시스템 이해 - 1 (0) | 2021.09.23 |
복습 (0) | 2021.09.23 |