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 등)
✅ 빌드 오류 해결 방법 포함
'프로그래밍 > 시스템' 카테고리의 다른 글
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / QEMU를 활용한 U-Boot 실행) (0) | 2025.02.26 |
---|---|
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 빌드 결과물 분석) (0) | 2025.02.26 |
U-Boot 포팅 (2. 개발 환경 구축 / 타겟 보드 선택) (0) | 2025.02.26 |
U-Boot 포팅 (2. 개발 환경 구축 / 크로스 컴파일 환경 설정) (0) | 2025.02.26 |
U-Boot 포팅 (2. 개발 환경 구축 / 필요한 도구 및 패키지 설치) (0) | 2025.02.26 |