[에이콘][요약] 임베디드 시스템 아키텍처 사물인터넷을 위한 임베디드 시스템의 기초 Chapter 2 - 작업환경과 워크플로 최적화
Chapter 2. 작업환경과 워크플로 최적화
이번 chapter에서는 특정 타겟을 위한 펌웨어 이미지를 생성하는 툴체인(toolchain)에 대해 배운다.
2.1. Compiler
- C 컴파일러는 GNU/리눅스 배포판의 GCC가 대표적이며
.c
소스코드를.o
오브젝트 파일로 만든다.- 컴파일을 수행한 host와 타겟 디바이스의 아키텍처가 동일하면 그냥 ‘컴파일러’
- 컴파일을 수행한 host와 타겟 디바이스의 아키텍처가 다르면 ‘크로스 컴파일러’라고 부른다.
- 프로그램에는 여러 모듈이 필요하고, 이 모듈 하나하나가 오브젝트 파일로 구성된다.
2.2. Linker
-
링커는 오브젝트 파일들의 집합인 모듈들의 심볼 의존성을 모두 처리해 실행파일로 만드는 역할을 한다.
-
결과물인
.elf
실행파일은 프로그램 코드와 데이터를 포함하는 등 다양한 section으로 구성된다..text
section: 프로그램 코드를 포함하며 읽기 전용이다..rodata
section: 런타임에 수정되지 않는const
상수를 저장하기 위한 읽기 전용 공간이다..data
section: 초기화 된 변수나static
같은 전역 변수들이 저장되는 공간이다. 읽기/쓰기 가능하다..bss
section: 초기화 되지 않은 변수들이 저장되는 공간이다. 읽기/쓰기 가능하다. 프로그램의 초기화 코드는 main() 함수 실행 이전에 이 영역의 변수들이 모두0
으로 초기화되는 것을 보장해야 한다.
-
링커 스크립트는 타겟의 메모리 섹션을 서술한 파일이다. 여기에는 프로그램이 실행되기 전에 꼭 필요한 정보들이 포함되며 코드 내 모든 심볼에 대한 정보가 저장돼있다. 즉, 메모리에 매핑되는 각 section에 대한 설명과 타겟의 flash & RAM에 프로그램을 올릴 때 필요한 정보가 저장된
.ld
파일이다.-
가장 간단한 링커 스크팁트는 적어도 RAM과 FLASH에 대한 정보를 담은 MEMORY section을 갖고 있다.
MEMORY { FLASH(rx) : ORIGIN = 0x00000000, LENGTH = 256K RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 64K }
-
앞서
.text
와.rodata
는 읽기 전용이라고 했다. 따라서 flash에 저장돼야 한다.
반면.data
와.bss
는 RAM에 매핑되며 수정이 가능하다.
-
2.3. Make
-
Make
는 binary 이미지 파일 생성을 자동화할 수 있는 표준 유닉스/POSIX 도구다. -
사용자가 직접 레시피나 규칙을 적용해 입맛에 맞는 출력 파일을 자동으로 생성해줄 수 있는 강력한 도구다.
-
별도의 문법을 가지며 구조는 아래와 같다.
target: [prerequisites] recipe1 recipe2 ...
2.4. Debugger
- 가장 유명한 디버거는 GCC Debugger인 GDB이다.
임베디드 sw 개발은 보통 host와 타겟 플랫폼이 다르기 때문에 원격 디버그 세션을 만들어야 디버깅이 가능하다. - 디버거는 CPU register와 memory의 현재 상태를 직접 살펴보면서 런타임 속 오류를 잡아낼 수 있도록 돕는다.
- ※ 개발 중 원활한 디버깅을 위해 컴파일러의 최적화 기능은 사용하지 않는 것이 좋다. 컴파일러가 코드의 실행 순서를 변경하고, 몇몇 변수는 숨겨버릴 수 있어서, 최적화된 코드 흐림이 디버깅 시 추적을 더 어렵게 만든다.
2.5. GCC Toolchain
- GCC는 ARM 임베디드 툴체인을 배포하고 있다.
arm-none-eabi
라는 접두어로 시작한다. - 내부에는 크로스 컴파일러와 디버거를 포함한다.
2.6. 타겟과의 상호작용
- 개발할 때 보통 우리는 타겟 보드와 JTAG 또는 SWD 인터페이스를 통해 flash에 펌웨어를 업로드하고 디버깅한다.
- 타겟의 JTAG/SWD 기능에 접근할 수 있는 강력한 오픈소스 도구로 로컬 소켓을 생성하는 OpenOCD (On-Chip Debugger)가 있다.
- 몇몇 개발 보드는 host와 통신하기 위한 추가 인터페이스가 부착된 경우도 있다. STMicrolectronics는 Cortex-M을 위한 ST-Link라는 인터페이스가 부착돼있다. 이를 통해 직접적인 디버깅 접근과 flash 업로드 기능을 지원한다.
2.7. 에뮬레이터
- Host PC에서 전체 타겟 플랫폼을
qemu
로 에뮬레이션하면 위험성을 줄이고 이식성 요구 없이 타겟 머신에 특화된 코드를 실행하고 디버깅할 수 있다. Qemu
가 ARM의 하드웨어와 특수기능을 상당히 정확히 구현하고 있지만, 실제 하드웨어와 시스템 레이아웃이 완전 일치하지는 않기 때문에 분명히 한계를 가진다. 그렇지만, Qemu는 Cortex-M의 기능을 숙지하는 가장 빠른 방법이라 장담한다.
Author And Source
이 문제에 관하여([에이콘][요약] 임베디드 시스템 아키텍처 사물인터넷을 위한 임베디드 시스템의 기초 Chapter 2 - 작업환경과 워크플로 최적화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@embeddedjune/에이콘요약-임베디드-시스템-아키텍처-사물인터넷을-위한-임베디드-시스템의-기초-Chapter-2-작업환경과-워크플로-최적화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)