본문 바로가기

Embedded Linux

부트로더의 간단한 개념 및 U-Boot 빌드해보기

부트로더의 개념

 

소프트웨어를 공부하다보면 컴퓨터나 기타 OS 장치를 가지고 많이 공부를 하게 되는데, 문득 이런 궁금증이 생길 수 있을 것이다. "전원을 켜면 코드는 어디서부터 실행되는 것일까? 리눅스나 윈도우는 어떻게 켜지는 걸까?"

부트로더가 이런 것을 가능하게 해준다. 최초로 장치에 전원을 주게되면 여러분들이 가진 SSD나 HDD 가 처음부터 동작할 것 같지만 그렇지 않다. 최초에는 CPU 코어와 Chip 에 내장 되어있는 정적 메모리 정도이다. 리눅스를 돌릴 수 있는 대부분의 임베디드 칩들은 칩 내에 ROM 코드를 가지고 있으며, 전원이 실행되자마자 롬코드가 실행된다. 이 롬코드는 공개되어있지 않으나, SPL(Secondary program loader), TPL(Tertiary Program loader) 로 차례로 점프하게 되며 이 과정을 통해 SRAM, DRAM 에 접근하여 U-boot 이미지 파일을 읽게 된다. 그후 U-boot 를 통해 리눅스의 핵심인 커널을 로딩할 수 있게 해주고 제어권을 완전히 넘겨버린다. 그리고 부트로더는 스스로 메모리에서 사라지고 시스템에 더이상 관여하지 않는다.

 

U-Boot 빌드

 

아래 주소로 git 을 clone 해온다. checkout 시 버전 및 환경에 따라 빌드가 안되는 버전이 있을 수도 있으니 가급적이면 최신 버전을 사용하거나 다른 버전으로 checkout 하면서 빌드해본다.

$ git clone git://git.denx.de/u-boot.git
$ cd u-boot
$ git checkout v2019.07

 

이후 툴체인을 통해 빌드환경을 구성해주고 빌드하는 커맨드이다. 먼저 아래와 같은 스크립트 파일을 만들고..

[script  파일명 - example]

PATH=${HOME}/x-tools/arm-cortex_a8-linux-gnueabihf/bin/:$PATH
export CROSS_COMPILE=arm-cortex_a8-linux-gnueabihf-
export ARCH=arm


source 명령어로 env 를 구성한다음 빌드한다.

아래에서 두번째 커맨드의 디바이스 명은 am335x_boneblack_defconfig 로 사용 했었으나 최신 버전에서는 evm 으로 통합된듯 하다. 아래처럼 툴체인의 크로스 컴파일러를 이용하기 위해 환경 변수를 사용한 것이다.

$ source example
$ make CROSS_COMPILE=arm=cortex_a8-linux-gnueabihf- am335x_evm-defconfig
$ make CROSS_COMPILE=arm=cortex_a8-linux-gnueabihf-

 

커맨드 명령이후 u-boot 컴파일이 완료된 것을 볼 수 있다.

u-boot 컴파일 완료후 u-boot 이미지 관련 파일들이 생긴다.

타깃의 U-Boot 설치는 다음 포스팅에서 다루도록 하겠다.

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

툴체인 빌드해보기 (crosstool-NG 사용)  (0) 2019.09.01