본문 바로가기
Embedded System/Bootloader

Bootloader(U-Boot) Overview

by rewyear 2023. 12. 28.

개요

전원 인가 시, 내부 ROM이 실행되어 Operation Mode에 맞게 Bootloader를 sram에 loading하고 실행되어 cpu 및 memory, hw 초기화 등을 수행하고 OS를 DRAM에 load하고 제어권을 넘기는 프로그램.

 

U-boot

임베디드 장치에서 장치의 운영 체제 커널을 부팅하기 위한 지침을 패키징하는 데 사용되는 오픈 소스 기본 bootloader. 
ARM processor 기반 & 임베디드 Linux 시스템 경우 주로 u-boot를 사용

 

u-boot를 기반으로 자신의 system or board에 맞게 porting을 진행

 

directory 구성 

  • arch: 주로 architecture에 dependency가 있는 code, start.S 코드가 위치
  • board: 보드 관련 dependency가 있는 code
  • common: arch와 관계없이 공통적으로 동작하는 code
  • drivers: gpio, i2c, spi, usb와 같은 기본 device에 대한 driver
  • include: 헤더 파일
  • lib: arch와 관계없이 공통적으로 사용하는 lib
  • disk: 디스크 드라이버와 파티션 관련 코드
  • net: 네트워크 관련 코드(ethernet, tcp, udp, etc…)
  • configs: 특정 target bootloader를 빌드하기 위한 default config(defconfig)가 정의되어 있는 디렉토리

Build

Bootloader의 대략적인 빌드 과정은 다음과 같다.

1. u-boot 빌드를 위해서 toolchain 설정 후 cross compiler 및 architecture를 지정해준다.

# toolchain의 bin 디렉토리로 이동 후
export PATH=$PWD:$PATH

# u-boot 디렉토리로 이동 후, 아래와 같이 환경변수 설정
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm

 
2. 빌드 시 필요한 default configuration 및 추가 configuration 설정 후 빌드 

# defconfig 설정 및 config 설정 후 빌드
make <xxx>_defconfig
make menuconfig
make -j20


dts 컴파일 시 #include와 같은 전처리 구문을 처리하지 않기 때문에, 수동으로 전처리 처리해야 함.

make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- dtbs


output
• u-boot.map: symbol map
• u-boot: ELF 형식의 U-Boot 이미지 파일
• u-boot.bin: 플래시 메모리에 탑재되는 순수 바이너리 이미지 파일
• u-boot.lds: lds 파일은 링커에게 코드 배치에 대한 방식을 어떻게 할지에 대해 기재한 파일

300x250

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

U-boot command  (0) 2023.12.28
U-Boot Sequence 및 구조 분석  (0) 2023.12.28