0) 목차
1. Embedded system 구조 및 이해
 - 임베디드 시스템 구조 및 기본구성
 - 프로세서 및 메모리
 - 임베디드 시스템 개발환경 이해
 - 개발환경 설정

2. Firmware 기반 Embedded system 
 - Arm 프로세서 내부구조 및 어셈블리 명령어
 - Boot code 및 boot sequence 이해
 - 펌웨어 수준의 디바이스 제어

3. OS 기반 Embedded system 
 - 임베디드 OS
 - 오픈소스 기반 임베디드 시스템(리눅스/안드로이드)
 - 개발환경 설정
 - Bootloader 및 boot sequence
 - kernel 및 device driver

 

 


1) 임베디드 시스템 구조 및 기본구성
임베디드 시스템: 특정 기능을 수행하기 위해 HW와 S/W를 밀접하게 통합한 장치
 - pc와 구별하였으나, 최근 스마트폰의 고도화로 경계가 모호해지고 있다

임베디드 시스템 구성
 - HW: 프로세서(Processor, SoC), 메모리(ROM, RAM), 주변장치(peripheral device)
 - S/W: 부트로더, OS, 응용 소프트웨어(FW일경우 OS가 없고 부트로더대신 부트코드 존재)

HW 관련 지식
 - Processor: core + co-processor, MMU, Cache 등
 - SoC(system-on-a-chip): Processor + internal ROM/RAM, peripheral controller 등

 - RAM(random access memory): 임의의 영역에 접근하여 read, write 가능
 - ROM(read-only memory): 전원을 꺼도 데이터가 지워지지 않음

 - 주변장치(peripheral device): LCD, Touch, Camera, USB Host/Device, Audio, WIFI 등등

Core 구성
 - 레지스터, ALU(산술 논리 연산 장치, CU(제어 장치), 버스

ARM Processor
 - 임베디드 기기에 많이 사용하는 RISC계열의 프로세서
 - 저전력의 특성이 있어 모바일에 많이 사용된다.
 - ARM사에서 ARM Processor를 생산하며, 타 제조사(예: 삼성전자)에서 Soc를 설계 및 생산한다
 - ARM v8 아키텍처부터 64bit를 지원한다(Cortex-A53, 57, 72)

Memory mapped I/O
 - 메모리 버스를 통해 주어진 전체 주소 중 일부를 활용하여 주변장치에 접근 및 제어할 수 있는 방식
 - 해당 주변장치의 I/O영역은 Non-cacheablefh, 해당 영역에 접근하여 데이터가 저장되는 변수를 volatile 설정(선언)을 해야한다

프로그램
 - 프로세서를 통해 어떤 결과를 얻기 위해 프로세서가 인식할 수 있는 형태로 구성횐 명령어 집합

프로그램언어
 - High-Level Language: 어셈블리어의 복잡한 작성방식을 개선하여 프로그래머의 생산성을 높이고자 하는 목적을 가지는 언어
                        특정 프로세서에 국한되지 않는 범용적 언어
 - Low-Level Language: Assembly language라고도 하며, 사용자가 기계어보다는 편리하게 작성할 수 있도록 pseudo명령을 첨부한 언어
 - machine language: 프로세서가 이해할 수 있는 0과 1로 구성된 2진수 명령어

 


2) 프로세서 및 메모리
프로세서를 찾는 기준
 - 바로 사용할 수 있는가? : 납품기간과 제품수급에 어려움이 없으며, 단종예정이 없어야한다
 - 가격은 적절한가?
 - 속도는 빠른가?: 주어진 작업을 정해진 시간내에 작업이 완료되어야한다
 - 적절한 개발툴을 제공하는가?
    : 최소 - 크로스 컴파일러, 디버거
    : 기타 - ICE, JTAG 디버거, logic analzer 등
 - 사용하고자 하는 OS와의 Porting을 제공하는가?
 - 기타: 주변장치 컨트롤러를 지원하는가? 발열과 전력소모는 어떤가? 등

메모리 특징
 - 크게 처리속도가 느리나 용량이 크고 저렴한 메모리, 처리속다가 빠르나 용량이 적고 비싼 메모리로 나뉜다
 - SRAM(Static RAM, 캐시등에 사용, R/W가능), DRAM(주기억장치, R/W가능), NAND Flash(저렴, page단위 R/W, block단위 erase), NOR Flash(비쌈, 동작 중 Read가능 Write 불가)
   ** RAM에서의 write는 over write를 의미한다(지우고 쓰는 것을 write라고 하지 않는다)
      또한, 위의 Flash에서 적은 write는 over write가 아닌 빈 메모리에 쓰는 것을 의미한다

캐시메모리
 - 프로세서 내에 위치하며, 코어와 주 메모리 사이에 존재하는 작고 빠른 메모리
 - 최근 사용한 데이터를 임시로 저장하며, 주메모리 접근 없이 캐시메모리를 사용한다
 - cache hit: 프로세서가 읽고자 하는 명령, 데이터가 캐시내에 존재하는 경우
   cache miss: 프로세서가 읽고자 하는 명령, 데이터가 캐시내에 미존재하는 경우

 - write through: 프로세서의 데이터 쓰기 동작시 캐시와 외부 메모리 모두에 쓰기 동작을 수행하는 방식
                  메모리 접근 병목현상이 존재
   write back: 캐시와 write buffer에 데이터 쓰기를 수행하는 방식
               메모리 접근 병목현상을 개선하나, 캐시와 주 메모리간의 데이터가 다른 일관성 문제가 존재
     ** write buffer: 코어와 주 메모리 사이에 있는 작은 용량의 FIFO 방식의 메모리, D-cache 내부에 있다

기타
 - TCM(Tightly Coupled Momory): 
 - MPU(memory protection unit)와 MMU(memory management unit)
    : MPU에서 MMU로 발전, MPU는 1)~3), MMU는 전체 기능을 가진다
      1) 메모리를 region 단위로 partition을 수행(region의 크기는 4kb~4gb까지 가능
      2) region 단위로 cacheable, bufferable 특성 부여(1/1: write back사용, 1/0: write through사용, 0/0: I/O장치에 사용, 0/1: 사용하지 않음, 버퍼는 보통 캐시내에 있다)
      3) region 단위로 접근권한 설정 가능(크게 protected와 unprotected로 나뉘며, RW, RO, no-access로 나뉜다)
      4) 프로그램 실행 중에 수시로 2), 3)를 관리 할 수 있다
      5) virtual address를 지원한다(OS 사용시)
     ** MMU는 OS에서 사용하기 위한 가상 주소를 제공하며, 물리주소를 관리한다(그에 따라 OS를 사용하는 프로세서는 항상 일정한 메모리 주소, 구조를 사용할 수 있다)
         ex) 주어진 가상 메모리가 4gb라면(32bit), 1gb는 OS, 3gb는 응용프로그램이 사용한다

파이프라인
 - 명령어들의 수행의 효율화를 위해, 명령어를 겹치도록 나열해 각 단계의 수행을 연속적으로 수행하는 방식
 - CPI(clock cycle per instruction): 명령어 하나를 처리하는데 소요되는 프로세서의 클럭 사이클 수, 1로 갈수록 효율적이다(이상적인 CPI가 1이다)
 - 파이프라인의 단계는 프로세서별로 다르며, 일반적으로는 고성능일수록 파이프단계가 늘어난다



3) 임베디드 시스템 개발환경 이해
target system, host system
 - cross compiler 필요

locate
 - 링커 내부에 존재하며, 링커가 사용한다.
 - linker script file을 사용하여 code와 data를 메모리에 배치하여 target에서 실행가능한 바이너리를 생성한다
    ** linker script file: code와 data가 메모리에 위치할 영역을 정의한 파일

컴파일 결과물(바이너리) 동작
 - 압축되지 않은 바이너리의 경우
    : 롬에 바이너리를 저장하며, 램으로 내용을 복사하며 초기화가 필요한 .bss(ZI)영역을 초기화 한다
      명령어 영역인 .text(RO data)의 경우 NAND Flash계열의 부팅일 시 필수로 복사한다(아닐 경우 복사를 하지 않아도 된다)
 - 압축된 이미지의 경우(예: zImage)
    : 보통 OS가 들어있는 시스템의 경우에 사용하는 방식이며, 롬에 부트로더와 해당 압축 이미지가 있다.
      전원인가시 부트로더가 실행되며, 해당 부트로더의 명령어 수행과정에서 해당 이미지를 램으로 복사, 압축해제, 바이너리 실행(OS 부팅)의 과정으로 진행한다

4) 개발환경 설정
 - 가상머신 설치, 네트워크 설정(TFTP 등) ... 생략

'Study > Embedded basic' 카테고리의 다른 글

Arm 구조 및 제어 - 2  (0) 2022.05.29
Arm 구조 및 제어 - 1  (0) 2022.05.29
임베디드 C 프로그래밍  (0) 2021.09.24
임베디드 시스템 이해 - 2  (0) 2021.09.24
복습  (0) 2021.09.23

+ Recent posts