ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3회 펌웨어 분석 설계
    NCS 임베디드 SW 엔지니어링 2019. 12. 23. 13:48

    https://youtu.be/KxrjLw-HiiE

    수행목표

    1. 운영 체제의 부팅과 관련된 정보와 운영 체제가 부팅하는 절차를 분석할 수 있다.
    2. 부팅에 필요한 주변 장치들의 동작 방법에 대한 요구 사항을 도출할 수 있다.

     

    CONTENTS

    1. 운영 체제 부트 과정 분석하기
    2. 펌웨어 요구 사항 도출하기
    3. Review & Make

    [CONTENT.1] 운영 체제 부트 과정 분석하기

     

    운영체제 기초 과정 분석을 위해 필요한 지식은?

    먼저 펌웨어와 부트로더에 대한 이해가 필요하다.

     

    펌웨어란 무엇인가요?

    ROM(Read Only Memory)에 저장된 소프트웨어 프로그램.

     

    임베디드 시스템의 구성

    임베디드 시스템은 규모나 기능에 따라서 크게 두 가지 형태로 구분해 볼 수 있다.

    일반적인 PC에 윈도우나 리눅스 등의 운영체제를 갖고 있어서 하드웨어 제어를 운영체제가 담당하고 애플리케이션이 운영체제에 제어를 받는 구조. 복잡한 기능. 비교적 규모가 큰 임베디드 시스템 구성.

     

    일반적인 OS(Operating System)가 없고 애플리케이션 소프트웨어가 하드웨어를 직접 제어하는 구조. 단순한 기능과 비교적 규모가 작은 임베디드 시스템의 구성.

     

    일반적으로 첫번째 구조의 펌웨어는 부트로더를 의미하고 두 번째 구조에서 애플리케이션 소프트웨어는 첫 번째 구조의 애플리케이션 소프트웨어와 구별하기 위해서 펌웨어라고 부른다.

     

    라즈베리파이와 아두이노를 예를 들어보자.

     

    현장의 펌웨어 개발자라고 하면 어떤 분야를 의미할까?

    주로 운영체제가 없이 마이크로 컨트롤러의 제어 소프트웨어를 개발하는 개발자를 의미하는 경우가 많다.

     

    부트로더의 역할과 종류는?

    운영체제가 있는 임베디드 시스템에서는 OS가 시스템의 주인이다. 따라서 주인이 오기 전에 주인을 맞이할 준비를 해야 한다. 이것을 수행하는 것이 부트로더이다.

     

    부트로더(bootloader) : 운영체제가 시스템에 로드되어 잘 동작하기 위한 사전 준비 작업을 하는 것.

     

    부트로더의 기능

    • 하드웨어 초기화
    • 운영체제 동작 환경 구성
    • 운영체제를 메모리로 로드

     

    부트로더가 갖는 특징은?

     

    • 시스템 하드웨어 의존성이 매우 강함
    • 프로세서의 구조, 특징, 사용법 이해 필요
    • 프로세서에 따른 명령어 사용법 이해 필요
    • 크기가 작아야 함
    • 오픈 소스 소프트웨어가 많아 활용이 용이

     

    오픈 소스 부트로더에는 어떤 것들이 있나요?

    모든 하드웨어를 지원하는 부트로더는 없다. 하지만 사람들이 많이 사용하는 하드웨어에 대해서는 오픈 소스 진영에서 계속적으로 추가하고 있다. 따라서 부트로더 개발 시에 오픈 소스에서 지원하고 있는지를 확인해 보는 것도 좋다.

     

    PC 및 서버 등에서 사용하는 GRUB(Grand Unified Bootloader)

    ARM 기반 U-Boot -- the Universal Boot Loader 등이 있다.

     

    운영체제 부트 과정은?

    전원이 인가되면 지정된 위치로부터 기본적인 프로그램을 읽어 들이게 된다. 이것을 메모리에 올리고 실행하게 된다. 이것이 부트로더다.

     

    특정한 프로세서를 예로들어 부트 과정을 살펴보자.

    • Exynos-8890
    • 라즈베리파이

     

    Exynos는 프로세서 안에 작은 용량의 ROM과 RAM을 포함하고 있다. 초기 동작하는 프로그램을 프로세서 안에 포함하고 있다.

    128KB on-chip iROM, 320KB on-chip iSRAM

    iROM에는 초기 부트코드가 포함되어 있어서 처음 전원이 인가되면 코드가 수행되면서 외부 장치로부터 부트로더를 CPU안에 iSRAM으로 적재하는 역할을 한다. iROM에 있는 코드는 여러 가지 부팅 방법을 제공한다. Exynos-8890의 경우에는 SD, MMC, eMMC, UFS 등의 부팅 방법을 제공한다.

     

    Exynos-8890의 부팅 과정은?

    1. 처음 전원이 인가되면 프로세서 내부에 iROM에 있는 부트 코드가 수행된다. iROM의 부트 코드는 OM(Operation Mode)핀을 확인하여 부팅 장치를 결정하게 된다.

     

    2. iROM은 부팅 장치로부터 BL1 코드를 읽어서 내부에 iSRAM으로 옮겨 실행을 시작한다. 이 BL1코드는 부팅 디바이스의 특정 위치, 주로 1번 섹터에 존재하므로 이 코드를 iSRAM에 복사해서 실행하게 된다. 블록은 보통 섹터를 사용한다.

     

    3. iSRAM에 저장된 BL1이 실행되면서 하드웨어 초기화를 수행하고 BL2를 비롯한 나머지 부분들을 DRAM으로 복사해서 실행한다. OSKernel 부분에 해당된다. 

     

    4. DRAM에 적재된 Kernel은 부팅을 시작한다. 리눅스 부팅에서는 초기화 작업을 하는 RAM disk imageuinitrd 파일을 실행하게 되며 이 파일에서 linux root file systemmount 하고 그다음에 정상적인 동작을 하게 된다.

     

    라즈베리파이의 부팅 과정은?

    라즈비안(Raspbian) OS가 들어있는 SD카드는 두개의 파티션을 가지고 있다.

     

    부트 파티션

    • 60MB 용량의 FAT32 포맷 필요
    • GPU 초기화에 필요한 코드와 데이터 포함
    • OS 커널을 메모리로 가져와 실행하는 역할

     

    루트 파티션

    • 나머지 OS와 모든 파일
    • EXT4 리눅스 파일 시스템으로 포맷

     

    라즈비안 OS 이미지 파일에는 어떤 것들이 있을까?

     

    micro SD 카드에 들어가는 라즈비안 이미지

    • hadware component database인 dtb(device tree block) 파일
    • bootcode.bin, start.elf 등의 부트로더 파일
    • 환경설정 텍스트 파일인 cmdline, config
    • image 파일로 kernel.img와 kernel7.img

     

    [CONTENT.2] 펌웨어 요구사항 도출하기

     

    임베디드 시스템 부팅 시 필요한 주변 장치들은 어떤 것들이 있을까?

     

    UART(Universal Asynchronous Receiver/Transmitter) : 병렬 데이터 형태를 직렬 형태로 전환하여 데이터를 전송하는 하드웨어

    이더넷(Ethernet) : 네트워크에 연결된 각 기기들이 고유의 MAC 주소를 가지고 이 주소를 이용해서 상호 간의 데이터를 주고받을 수 있도록 만들어진 것

    USB(Universal Serial Bus) : 직렬포트, 병렬 포트 등 다양한 기종의 연결 방식을 대체하기 위해서 만들어 짐

    GPIO(General Purpose Input Output) : 마이크로프로세서가 주변 장치와 통신하기 위해서 범용으로 사용하는 비 출력 포트(PORTx, DDRx, PINx)

    HDMI(High Definition Multimedia Interface) : 영상과 음성을 통합한 단자 규격

     

    부트로더가 지원해야 하는 기능과 동작에는 어떤 것들이 있을까?

    • 하드웨어 초기화 : 메모리 설정, CPU clock 설정, GPIO 설정, Serial 설정, 네트워크의 MAC 주소 설정, 이더넷 포트 설정 등
    • 메모리 복사 : 커널 이미지, RAM disk image, 부트로더 등을 flash ROM에서 SDRAM으로 복사하는 기능
    • 커널 부팅 : 커널 이미지를 메모리로 복사해 압축을 풀고 실행시키면 부트로더는 수명을 다하게 되며, 제어권은 커널이 가짐
    • 명령어 지원 : 사용자가 부트로더의 기능을 사용할 수 있도록 명령어 지원
    • 디버깅 모드 : 부트로더의 동작 상태를 모니터링하면서 에러 부분을 찾아낼 수 있으며 전문적인 디버깅을 위해서는 장비나 소프트웨어가 필요

    부트로더의 명령들

    시스템 부팅 절차에 따른 하드웨어 초기화 과정은 어떻게 될까?

     

     

    [CONTENT.3] Review & Make

     

    펌웨어와 부트로더 이해

     

    펌웨어 : 하드웨어와 응용 소프트웨어 중간에서 연결 역할을 하는 것, 하드웨어의 기능을 보다 유연하게 소프트웨어로 구현한 것

    부트로더 : 운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.

    https://ko.wikipedia.org/wiki/%EB%B6%80%ED%8C%85

     

    부팅 - 위키백과, 우리 모두의 백과사전

    위키백과, 우리 모두의 백과사전. 시동은 여기로 연결됩니다. 다른 뜻에 대해서는 시동 (동음이의) 문서를 참조하십시오. 부팅 중 바이오스 포스트 과정의 첫 단계 부팅(영어: booting) 또는 부팅업(영어: booting up)은 컴퓨터에서 사용자가 운영 체제를 시동할 때 운영 체제를 시작하는 부트스트래핑 과정이다. 시동(始動, 문화어: 기동, 초기적재)이라고도 한다. 시동 순서는 운영 체제가 로드(적재)될 때 컴퓨터가 수행하는 작업들이 모여 있다. 부

    ko.wikipedia.org

     

    ARM에서 많이 사용되는 오픈 소스 부트로더 U-Boot로 부트로더의 구조를 분석

     

    부트로더의 3단계 : 'BL1', 'BL2', 'BL3'

    'BL0', 'BL1' : hip Vendor에서 제작 및 릴리즈 하는 코드 영역, 수정이 불가능

    'BL2'가 일반적으로 사용하는 부트로더

    U-boot소스를 이용해서 BL2를 개발

     

    U-boot 소스 다운

    터미널 창에

    git clone git://git.denx.de/u-boot.git

    를 입력해 u-boot 소스를 다운로드한다.

     

    'NCS 임베디드 SW 엔지니어링' 카테고리의 다른 글

    6회 펌웨어 구현  (0) 2020.01.06
    5회 펌웨어 설계 문서 분석하기  (0) 2020.01.03
    4회 펌웨어 분석 설계  (0) 2019.12.24
    2회 하드웨어 분석  (0) 2019.12.18
    1회 임베디드 시스템 개요  (0) 2019.12.17
Designed by Tistory.