BOBO's Note

임베디드 시스템의 Boot Sequence 본문

Embedded System

임베디드 시스템의 Boot Sequence

bobo_hee 2020. 5. 26. 00:51

일반적인 boot sequence에 대해 헷갈린다면, 이 글을 먼저 보고 오자!

2020/05/25 - [Embedded System] - Generic Boot Sequence

 

Generic Boot Sequence

BOBO's Note Generic Boot Sequence 본문 Embedded System Generic Boot Sequence bobo_hee 2020. 5. 25. 23:32 Prev 1 2 3 4 5 6 ··· 8 Next

bobo-dev.tistory.com


임베디드 시스템의 Boot Sequence

일반적인 임베디드 시스템에서의 boot sequence는 다음과 같은 순서로 진행된다.

  1. ROM 코드: SoC에 위치한 ROM에 boot code를 저장해놓는다. ROM 코드는 스토리지(예. NAND 플래시)에 저장된 stage 1 부트로더를 SoC 내부의 SRAM에 로드해온다.

  2. stage 1 bootloader: DRAM 컨트롤러를 초기화하고, stage 2 부트로더를 DRAM에 로드한다.

  3. stage 2 bootloader: 하드웨어를 초기화하여 CPU의 동작 범위를 점점 늘려가고, 쉘 커맨드를 사용자에게 제공하여 상호작용할 수 있게 한다. 그리고 커널을 DRAM에 로드한다. 이후의 과정은 일반적인 boot sequence를 따른다.

임베디드 시스템의 boot sequence

임베디드 시스템에서 stage 2 부트로더로 주로 U-Boot를 사용한다. U-Boot는 커널 이미지 외에도 DTB(Device Tree Blob)을 로드한다.

 

Device Tree (DT)

PC의 경우, BIOS에서 자동으로 디바이스를 인식하여 동작하도록 해주지만, ARM 프로세서를 사용하는 임베디드 시스템에는 BIOS가 없어 커널이 대신 해주어야 한다. 따라서 커널이 고정적으로 디바이스를 찾을 수 있도록 개발자가 디바이스 트리에 디바이스에 대한 정보를 적어 놓는다.

 

Device tree source는 커널 소스의 arch/arm/boot/dts/ 디렉토리에 존재하며, 확장자명은 .dtb이다. 디바이스 트리 소스를 컴파일하면 바이너리 파일인 device tree blob이 생성되고, 이 파일이 부팅될 때 로드된다.

'Embedded System' 카테고리의 다른 글

Kernel Module과 Device Driver  (0) 2020.05.29
Android Boot Sequence  (0) 2020.05.26
Generic Boot Sequence  (0) 2020.05.25
Cross Compile  (0) 2020.05.25
Linux Kernel의 개념  (0) 2020.05.22
Comments