개요
전원 인가 시, 내부 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 |