임베디드 C 프로그래밍

2021. 9. 24. 18:39

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

+ Recent posts