1. U-Boot 개요
부트로더는 타깃 초기화 및 타깃 동작환경을 설정하고 시스템 운영체제 부팅, 플래시 메모리 관리 등의 역할을 한다. 하지만 부트로더 자체의 기능만 사용한다면 다른 부트로더를 사용해도 무방하다.
U-boot(Universal BOOTloader)는 PowerPC와 ARM 임베디드 시스템에서 기반을 두고 사용되는 부트로더이며, 가장 활발하게 개발되고 다양하게 사용되는 오픈소스이다.
PPC, ARM, MIPS 등 다양한 CPU를 지원하며, TFTP를 이용하여 운영체제 부팅이 가능하고 플래시 메모리, IDE, SCSI 등 다양한 매체를 이용하여 부팅도 가능하다.
JFFS2파일 시스템을 비롯한 다양한 파일시스템을 관리하는 기능이 있으며, 각 CPU에 대한 명령어 체계가 동일하여 다른 Platform에 다양한 명령어와 스크립트를 지원한다.
2. U-Boot 실행
U-boot 실행의 전체적인 과정
상세 설명:
① 임베디드 시스템의 전원을 인가해주게 되면 Bootloader인 U-boot가 먼저 여러 가지 하드웨어 장치들을 초기화함으로써 시스템에 붙어있는 장치들을 사용할 수 있도록 준비
② Auto boot (Bootloader 순차적 실행 후 자동으로 부팅이 될 수 있게 하는 모드)
㉠ Auto boot 허용할 경우:
커널, 파일시스템을 로딩(메모리 적재)하고, 커널의 첫 번째 명령을 실행할 수 있도록 커널에게 제어권을 넘겨주고 Linux embedded system 부팅
㉡ Auto boot 허용하지 않을 경우(수동의 경우):
커널이 실행되지 않고 bootloader만 실행되어 명령 입력을 기다리고 있는 상태, 이 상태에서 설정을 바꾸거나 할 수 있고, 커널 부팅 명령을 실행하게 되면 부팅이 진행되고, 아니면 입력 명령을 계속해서 대기하고 처리하게 된다.
3. 부트로더 설치 파일 압축 해제
1) U-Boot 부트로더 설치 파일 압축 해제
아래 사진은 U-boot 설치 파일 압축 해제 과정이다.
교재에선 압축 해제하라고 하는 파일 이름과 들어 있는 Uboot 파일 이름이 다르니 신경 써야 한다.
개발 CD에는 'uboot_4412_20131202.tgz'가 존재하며, 'tar zxvf' 명령으로 압축 해제한다.
폴더를 확인하면 ‘uboot_4412’ 폴더가 생긴 것을 확인할 수 있으며, 폴더를 확인하면 제대로 압축 해제된 것을 확인할 수 있다.
2) U-Boot 디렉토리 구조 및 설명
파일 이름 | 파일 설명 |
board | board에 의존적인 파일 |
common | architecture에 독립적인 파일 |
cpu | architecture에 독립적인 파일 |
disk | code for disk drive partition handling |
doc | u-boot 관련 문서 |
driver | 외부 장치의 driver 파일 |
examples | u-boot을 위한 test 실행 파일 |
fs | uboot에서 지원하는 file system 관련 파일 |
include | header file |
lib_ | arm architecture 관련 라이브러리 파일 |
net | network 관련 파일 |
post | Power On Self Test |
tools | Tools to build S-Record or U-Boot images, etc. |
api | API 관련 코드 및 예제 |
arch | arm, mips, powerpc등 프로세서 아키텍처별 코드와 라이브러리, 시작코드(start.S) 존재 |
common | architecture에 독립적인 파일, 부트로더 명령어 |
sd_fusing | SD를 이용한 부팅 관련 파일 |
configs | default configuration 사전에 개발보드에 맞게 기본설정을 저장해둔 파일 |
config.mk | MakeFile이 참조하는 빌드관련 유틸리티 정보 및 환경파일 |
build.sh | 사용자가 쉽게 빌드 할 수 있게 만든 명령어 shell script 파일 |
Makefile | 빌드환경 Makefile |
4. U-Boot 빌드 (이미지 생성)
u-boot 폴더에서 make 유틸리티를 사용하여 진행한다.
※ u-boot 폴더가 아니라면 제대로 진행되지 않으니 주의하여야 한다.
- make distclean: 기존에 작업했던 object, config 파일을 삭제하고 초기화
- make config: ‘smdk4412_config.h’를 사용, 환경설정을 변경한다.
- make: 부트로더 컴파일
ls로 디렉토리를 확인하면 다음과 같은 결과가 나온다.
사실 개발 CD에서 막 압축을 풀고 난 상태와 동일한데, 내가 생각하기엔 새로 압축을 풀었기 때문에 기존에 작업했던 파일이 존재하지 않아 같은 파일로 나온 것 이거나 이미 빌드가 진행되어 있는 상태로 압축되어있는 게 아닌가 싶다.