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) |
📌 설정 저장 및 종료
- 설정 완료 후 Save 선택
- .config 파일로 저장됨
- Exit로 종료
4. 설정 예제: 환경 변수 저장 방식 변경
🔹 기본 설정 (환경 변수 RAM 사용)
=> printenv
## Error: environment not initialized
- 기본적으로 환경 변수가 휘발성(RAM)으로 설정됨.
- 재부팅하면 환경 변수가 초기화됨.
🔹 menuconfig에서 환경 변수 저장 방식 변경
- make menuconfig 실행
- Environment settings → Environment storage
- mmc 또는 nand 선택 (SD 카드 또는 NAND 플래시에 저장)
- 설정 저장 후 종료
📌 환경 변수 저장 확인
setenv myvar "Hello U-Boot"
saveenv
printenv myvar
📌 정리
✅ 크로스 컴파일 환경 변수 설정 (export CROSS_COMPILE=..., export ARCH=...)
✅ 타겟 아키텍처별 크로스 컴파일러 설정 방법 설명
✅ make menuconfig 실행 및 주요 설정 항목 정리
✅ 환경 변수 저장 방식 변경 실습 포함
'프로그래밍 > 시스템' 카테고리의 다른 글
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 기본적인 U-Boot 빌드 과정) (0) | 2025.02.26 |
---|---|
U-Boot 포팅 (2. 개발 환경 구축 / 타겟 보드 선택) (0) | 2025.02.26 |
U-Boot 포팅 (2. 개발 환경 구축 / 필요한 도구 및 패키지 설치) (0) | 2025.02.26 |
U-Boot 포팅 (1. U-Boot 개요 및 기본 개념 / U-Boot의 구조) (0) | 2025.02.26 |
U-Boot 포팅 (1. U-Boot 개요 및 기본 개념 / U-Boot란?) (0) | 2025.02.26 |