U-Boot 포팅 (2. 개발 환경 구축 / 크로스 컴파일 환경 설정)

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

크로스 컴파일 환경 설정

U-Boot는 임베디드 시스템에서 동작하는 부트로더이므로, 개발 환경(PC)과 타겟 보드(임베디드 프로세서)의 아키텍처가 다릅니다.
따라서 크로스 컴파일러를 사용하여 타겟 보드에서 실행 가능한 U-Boot 바이너리를 빌드해야 합니다.

이 과정에서 CROSS_COMPILE, ARCH 환경 변수 설정 및 make menuconfig를 활용한 설정 방법을 설명하겠습니다.


1. 크로스 컴파일 환경 변수 설정

🔹 환경 변수 설정의 필요성

U-Boot를 빌드할 때 컴파일러와 타겟 아키텍처를 지정하는 환경 변수를 설정해야 합니다.
이를 설정하지 않으면 호스트 시스템(x86)용 바이너리가 빌드되거나, 빌드 오류가 발생할 수 있습니다.

🔹 주요 환경 변수

환경 변수 설명
CROSS_COMPILE 사용할 크로스 컴파일러의 접두사
ARCH 타겟 시스템의 CPU 아키텍처
PATH 크로스 컴파일러 경로 추가

🔹 타겟 아키텍처별 설정 예제

1) ARM 32-bit (Cortex-A, RPi, BeagleBone 등)

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

2) ARM 64-bit (AArch64, Raspberry Pi 4, Jetson, i.MX8 등)

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

3) RISC-V (SiFive, Kendryte K210 등)

export CROSS_COMPILE=riscv64-linux-gnu-
export ARCH=riscv

4) MIPS (네트워크 라우터, 미디어 플레이어 등)

export CROSS_COMPILE=mips-linux-gnu-
export ARCH=mips

📌 환경 변수 확인

echo $CROSS_COMPILE
echo $ARCH

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

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

2. make menuconfig 및 설정 방법

🔹 make menuconfig란?

  • U-Boot의 빌드 설정을 GUI 형태로 변경할 수 있는 인터페이스입니다.
  • Kconfig 시스템을 사용하여 빌드 옵션을 쉽게 선택할 수 있습니다.
  • 커널의 menuconfig와 유사한 방식으로 동작합니다.

📌 패키지 설치 (Ubuntu/Debian)

sudo apt install libncurses5-dev libncursesw5-dev

📌 패키지 설치 (CentOS/Fedora)

sudo dnf install ncurses-devel

🔹 make menuconfig 실행 방법

1) 기본적인 menuconfig 실행

make menuconfig

2) 특정 보드에 대한 menuconfig 실행

먼저 보드의 기본 설정을 불러옵니다.

make <board>_defconfig
make menuconfig

예를 들어, Raspberry Pi 4를 설정하려면:

make rpi_4_defconfig
make menuconfig

3. make menuconfig 설정 항목

menuconfig 실행 후, 방향키(↑↓)를 이용하여 설정을 조정할 수 있습니다.

설정 항목 설명
Target CPU Architecture CPU 아키텍처 선택 (ARM, RISC-V, MIPS 등)
Boot options 부팅 관련 설정 (네트워크 부팅, 자동 부팅)
Device Drivers SPI, I2C, USB, UART 등의 드라이버 활성화
Networking support 네트워크 지원 (TFTP, DHCP, PXE 부팅)
Environment settings 환경 변수 저장 위치 (SD, NAND, eMMC)

📌 설정 저장 및 종료

  1. 설정 완료 후 Save 선택
  2. .config 파일로 저장됨
  3. Exit로 종료

4. 설정 예제: 환경 변수 저장 방식 변경

🔹 기본 설정 (환경 변수 RAM 사용)

=> printenv
## Error: environment not initialized
  • 기본적으로 환경 변수가 휘발성(RAM)으로 설정됨.
  • 재부팅하면 환경 변수가 초기화됨.

🔹 menuconfig에서 환경 변수 저장 방식 변경

  1. make menuconfig 실행
  2. Environment settings → Environment storage
  3. mmc 또는 nand 선택 (SD 카드 또는 NAND 플래시에 저장)
  4. 설정 저장 후 종료

📌 환경 변수 저장 확인

setenv myvar "Hello U-Boot"
saveenv
printenv myvar

📌 정리

크로스 컴파일 환경 변수 설정 (export CROSS_COMPILE=..., export ARCH=...)
타겟 아키텍처별 크로스 컴파일러 설정 방법 설명
make menuconfig 실행 및 주요 설정 항목 정리
환경 변수 저장 방식 변경 실습 포함