임베디드 기사/실기 - 임베디드 펌웨어

2. 임베디드 이해 및 포팅하기

꿈을향해달리자 2023. 9. 24. 22:20
728x90

2.1 커널 포팅

1. 커널 포팅

1) 커널 포팅 : 커널을 특정 타겟 보드의 하드웨어 환경 및 특정 응용에 맞게 수정하는 과정

2) 커널 포팅 과정

① 커널 소스 풀기

- 오리지널 커널을 사이트에서 다운로드 하여 압축 해제

② 커널 패치

- 개발하는 시스템 CPU Architecture 에 맞는 core 패치 적용

- 개발 보드에 맞는 board 패치 적용

③ 커널 Configuration

- 타겟 보드에 포함된 구성요소와 기능 지원 옵션 선택

- make xconfig 또는 make menuconfig 명령어 사용

④ 커널 컴파일

- make 툴 이용하여 커널 빌드

- make zimage 명령어 사용하여 zimage 생성
⑤ tftp 전송

- tftp zImage kernel 명령 사용

- JTAG 혹은 직렬 통신으로 사용 가능

⑥ 플래시 퓨징

- 보드 RAM에 저장된 커널 이미지를 Flash Memory에 저장

 

2. 커널 빌드 과정 명령어

① 커널 구성 요소 간 의존관계 설정 제거 : make mrproper

② 커널 구성 : make config

③ 선택한 구성 간 의존 관계 확인 : make dep

④ 오브젝트 파일 및 이전 빌드 임시 생성 파일 제거 : make clean

⑤ 실행 가능한 커널 이미지 빌드 : make bzimage

⑥ 모듈로 선택한 항목에 대한 빌드 : make module

⑦ 커널 이미지 및 모듈 지정 위치에 설치 : make install

 

2.2 부트로더

1. 부트로더

1) 부트로더 : 커널 또는 OS를 메모리에 올리는 과정에서 하드웨어를 초기화하고 커널을 압축해제 후 메모리에 적재, 제어를 OS에 넘기는 과정을 수행하는 프로그램

 

2) 부트로더의 종류

- LILO, GRUB : 리눅스 부트로더로 주로 대형서버, PC등에 사용

- U-boot : 주로 ARM에 사용

- BLOB : Intel 사의 Xscale Core 기반 CPU 부트로더

- Eboot : Windows CE 환경의 부트로더

 

3) 부트로더의 기능

- 하드웨어 초기화 : CPU, Speed, 메모리 타이밍, 인터럽트, UART, GPIO 등 장치 초기화

- Flash Device 초기화

- 네트워크 디바이스 초기화

- Root File System 이미지 적재

- 커널을 메모리에 적재하고 실행 주소를 커널 시작 주소로 점프

- 부트 옵션 설정을 위한 사용자 인터페이스

 

4) 부트로더를 대상 제품에 탑재하는 방법

- 롬 라이터를 이용하여 ROM에 기록 후 부착

ㄴ EEPROM 사용

- ICE 장비를 이용하여 플래시 탑재

ㄴ JTAG 포트를 통해 Target 시스템에 퓨징

- JTAG 동글을 이용

- Ethernet 이용한 TFTP 포팅

ㄴ 부트로더가 탑재가 되어 있어야 가능

 

2.3 교차개발 환경

1. 교차 개발 환경 도구

1) 교차 개발 환경 필수 구성 요소

① Host 컴퓨터 : 임베디드 시스템 개발을 위한 컴퓨터

② 타겟 보드 : 실제 임베디드 시스템이 설치되고 실행되는 보드

③ Tool Chain : 소프트웨어 개발을 위해 공통적으로 요구되는 개발 도구 집합

- Compiler : 컴파일 및 링킹 수행

ㄴ ex) Cross Compiler

- Library : 링킹 과정에 필요한 라이브러리

ㄴ ex) GNU C library

- Utility : 소스 편집, 바이너리 후처리

ㄴ ex) Binutils

④ BSP (Board Support Package) : 시스템 보드의 포팅 및 설정 가능한 툴

- 부트로더

- OAL : OEM Adaptation Layer의 약어로 하드웨어와 소프트웨어를 연결해주는 HAL (Hardware Abstraction Layer) 계층

- Device Driver : 주변 장치 초기화 및 제어를 위한 드라이버

- Configuration : 환경변수 및 레지스터 설정을 위한 초기 설정 파일

 

2. 교차 개발 환경이 필요한 이유

- 개발 초기에는 타깃 하드웨어에 아무런 프로그램도 설치되어 있지 않다

- 일반적으로 타깃 시스템 하드웨어 구성이 컴파일 하기에 적합하지 않다

- 타깃 시스템은 대부분 소형 시스템 혹은 특수 목적용으로 설계되어 자원 제약성이 크다. 모니터와 키보드도 없는 시스템이 대부분이다.

728x90