U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 기본적인 U-Boot 빌드 과정)

2025. 2. 26. 12:26프로그래밍/시스템

기본적인 U-Boot 빌드 과정

U-Boot를 빌드하기 위해서는 타겟 보드에 맞는 설정을 적용한 후, 크로스 컴파일러를 사용하여 바이너리를 생성하는 과정이 필요합니다.
이 과정에서는 보드 설정을 선택하고, 실제로 빌드를 수행하는 방법을 설명합니다.


1. U-Boot 빌드 전 준비 사항

🔹 크로스 컴파일러 및 환경 변수 설정

U-Boot는 일반적으로 임베디드 보드(ARM, RISC-V 등)에서 실행되므로 크로스 컴파일러를 사용해야 합니다.
타겟 보드에 맞게 CROSS_COMPILE과 ARCH 환경 변수를 설정합니다.

📌 예제: ARM 64-bit(AArch64) 보드용 환경 변수 설정

export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64

📌 예제: ARM 32-bit 보드용 환경 변수 설정

export CROSS_COMPILE=arm-linux-gnueabi-
export ARCH=arm

📌 환경 변수 확인

echo $CROSS_COMPILE
echo $ARCH

📌 환경 변수를 영구적으로 설정

echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> ~/.bashrc
echo 'export ARCH=arm64' >> ~/.bashrc
source ~/.bashrc

2. U-Boot 빌드 과정

U-Boot를 빌드하려면 타겟 보드의 기본 설정을 불러온 후, make 명령어를 실행하면 됩니다.

🔹 1) 보드 설정 불러오기 (make <board>_defconfig)

U-Boot는 다양한 보드를 지원하므로, 먼저 해당 보드의 기본 설정(defconfig)을 로드해야 합니다.

📌 보드 설정 목록 확인

ls configs/

예제 출력:

rpi_4_defconfig
imx8mm_evk_defconfig
qemu_arm_defconfig

📌 보드 설정 적용

make <board>_defconfig

예제 (Raspberry Pi 4 빌드):

make rpi_4_defconfig

📌 출력 예제

#
# configuration written to .config
#
  • .config 파일이 생성되었으며, 이 파일에는 해당 보드에 필요한 U-Boot 설정이 포함됩니다.

🔹 2) U-Boot 빌드 실행 (make -j$(nproc))

보드 설정을 적용한 후, make 명령어를 실행하여 U-Boot를 빌드합니다.

📌 병렬 빌드 실행

make -j$(nproc)
  • -j$(nproc) 옵션은 CPU 코어 개수만큼 병렬 빌드를 수행하여 속도를 최적화합니다.

📌 예제 (Raspberry Pi 4)

make -j$(nproc)

📌 출력 예제

CC      common/main.o
CC      common/console.o
LD      u-boot
OBJCOPY u-boot.bin
OBJCOPY u-boot.img
  • 빌드가 성공하면 u-boot.bin, u-boot.img 등 실행 가능한 바이너리가 생성됩니다.

3. 빌드 결과물 확인

U-Boot를 빌드하면 여러 개의 실행 파일이 생성됩니다.

📌 빌드 결과물 확인

ls -lh u-boot*

📌 출력 예제

-rwxr-xr-x 1 user user 1.2M Mar 4 10:30 u-boot
-rw-r--r-- 1 user user 1.1M Mar 4 10:30 u-boot.bin
-rw-r--r-- 1 user user 1.1M Mar 4 10:30 u-boot.img
파일명 설명
u-boot ELF 형식의 U-Boot 실행 파일
u-boot.bin 바이너리 형식의 U-Boot 실행 파일
u-boot.img 특정 보드에서 필요한 이미지 파일

📌 특정 보드에서 사용되는 추가 파일

파일명 설명
SPL 1차 부트로더 (SPL 활성화된 보드)
MLO TI SoC용 1차 부트로더
u-boot-dtb.bin 디바이스 트리 포함 U-Boot 바이너리

4. U-Boot 빌드 오류 해결 방법

🔹 CROSS_COMPILE 또는 ARCH 설정 오류

📌 오류 예제

/bin/sh: 1: aarch64-linux-gnu-gcc: not found

📌 해결 방법

export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64

또는 크로스 컴파일러를 설치합니다.

sudo apt install gcc-aarch64-linux-gnu

🔹 make -j$(nproc) 실행 시 빌드 실패

📌 오류 예제

error: ‘struct device_node’ has no member named ‘phandle’

📌 해결 방법

  • 디바이스 트리 컴파일러(DTC) 설치
sudo apt install device-tree-compiler

📌 정리

환경 변수 설정 (export CROSS_COMPILE=..., export ARCH=...)
보드 설정 적용 (make <board>_defconfig)
U-Boot 빌드 실행 (make -j$(nproc))
빌드 결과물 확인 (u-boot.bin, u-boot.img 등)
빌드 오류 해결 방법 포함