U-Boot 네트워크와 OTA 업데이트
RK3399 기반 시스템을 예제로 살펴보는 U-Boot 네트워크 구성 및 OTA 업데이트 기법을 소개합니다. 본 글은 실전 환경에서 활용할 수 있는 네트워크 설정, TFTP/NFS 기반 부팅, 보안 부팅 개요, OTA 스크립트 예제까지 포함하며, 결론적으로 “U-Boot는 단순한 부트로더가 아니라 시스템 관리 도구”라는 관점을 설명합니다.
1. U-Boot 네트워크 구성 개요
RK3399 보드에서 U-Boot는 기본적으로 Ethernet 컨트롤러 드라이버를 탑재하고 있으며, 다음 기능을 제공합니다.
- DHCP를 통한 자동 IP 획득
- TFTP를 통한 커널/디바이스트리/루트파일시스템 다운로드
- NFS 루트 마운트 지원
- 네트워크 진단 명령 (ping, mdio 등)
RK3399의 경우 U-Boot 디바이스 트리와 Kconfig에서 GMAC 컨트롤러가 활성화되어 있어야 하며, 대부분의 BSP는 이를 기본 구성으로 포함하고 있습니다.
2. Ethernet 설정
U-Boot 네트워크 사용을 위해 가장 먼저 확인해야 하는 것은 환경 변수(environment variable)입니다.
기본 환경 변수 확인
=> printenv ipaddr
=> printenv serverip
=> printenv ethaddr
수동 IP 설정 예시
=> setenv ipaddr 192.168.0.10
=> setenv serverip 192.168.0.2
=> saveenv
Ethernet 링크 확인
=> mii info
=> mii read 0 1
3. TFTP를 이용한 이미지 다운로드
TFTP는 빠르고 간단하게 펌웨어 이미지를 전달할 수 있어 개발 및 OTA 초기 단계에서 많이 활용됩니다.
TFTP 부팅 예제 (RK3399)
=> setenv serverip 192.168.0.2
=> setenv ipaddr 192.168.0.10
=> tftpboot 0x02000000 Image
=> tftpboot 0x01f00000 rk3399.dtb
=> booti 0x02000000 - 0x01f00000
루트 파일시스템 NFS 마운트 예제
=> setenv rootpath /export/rootfs
=> setenv bootargs "console=ttyFIQ0 root=/dev/nfs rw nfsroot=${serverip}:${rootpath},tcp"
=> booti 0x02000000 - 0x01f00000
4. DHCP 자동 구성
DHCP를 사용하면 IP 설정 없이 네트워크 부팅을 자동화할 수 있습니다.
DHCP + TFTP 자동 부팅
=> dhcp
=> tftpboot 0x02000000 Image
RK3399에서는 CONFIG_CMD_DHCP가 활성화되어 있어야 하며, 대부분의 BSP 설정에 포함되어 있습니다.
5. OTA 업데이트 스크립트 예제
U-Boot 환경에서 OTA 업데이트를 수행하는 일반적인 방식은 TFTP 또는 HTTP(S)로 새로운 이미지를 다운로드한 뒤 eMMC 또는 SPI Flash에 덮어쓰는 방법입니다.
아래 예제는 TFTP 기반 OTA 스크립트이며, RK3399의 eMMC에 커널 파티션을 업데이트하는 간단한 형태입니다.
OTA 스크립트 예제
setenv ota_url Image.new
setenv ota_loadaddr 0x02000000
# 이미지 다운로드
tftpboot ${ota_loadaddr} ${ota_url}
# 다운로드 성공 여부 확인
if test $? -ne 0; then
echo "Download failed";
exit;
fi;
# eMMC 파티션 쓰기
mmc dev 0
mmc write ${ota_loadaddr} 0x8000 0x4000
echo "OTA update complete"
saveenv
설명
ota_url: 새로운 이미지 이름 또는 경로ota_loadaddr: 다운로드할 RAM 주소mmc write: eMMC 특정 섹터에 기록
실제 OTA 시스템에서는 여러 파티션(A/B), 이미지 검증, 롤백 처리 등을 고려해야 하며, 다음 장에서 이를 위한 보안 개요를 설명합니다.
6. 보안 부팅 및 이미지 검증 개요
OTA는 네트워크 기반 업데이트이기 때문에 보안이 매우 중요합니다. U-Boot는 SHA256, RSA 기반의 이미지 서명 검증 기능을 제공합니다.
보안 부팅 흐름
- 개발자가 이미지에 SHA256 해시 생성
- RSA 개인키로 서명
- U-Boot에서 RSA 공개키를 내장
- 부팅 시 이미지 + 서명 검증
- 검증 실패 시 부팅 중단 또는 대체 이미지 사용
U-Boot 설정 예시
다음 CONFIG 설정이 필요합니다.
CONFIG_FIT=y
CONFIG_FIT_SIGNATURE=y
CONFIG_RSA=y
CONFIG_SHA256=y
FIT 이미지 예제 구조
/fit-image {
description = "RK3399 Firmware";
images {
kernel {
data = /incbin/("Image");
hash-1 {
algo = "sha256";
};
};
};
signatures {
sig1 {
algo = "sha256,rsa2048";
key-name-hint = "devkey";
};
};
}FIT 이미지를 활용하면 one-shot OTA 업데이트뿐 아니라 안정적인 이미지 검증 기반 업데이트 시스템을 구축할 수 있습니다.
7. OTA 최종 설계 팁 (RK3399)
RK3399 환경에서 OTA 구현 시 자주 고려되는 항목은 다음과 같습니다.
- A/B 파티션 구성 (slot_a, slot_b)
- 부팅 실패 자동 롤백
- 부트카운터 기반 실패 감지
- U-Boot 환경 변수 보호 (redundant env)
- 보안 서명된 FIT 이미지 사용
OTA 업데이트는 단순한 이미지 덮어쓰기 방식보다 훨씬 안정성을 요구하므로, 실제 제품에서는 A/B 슬롯과 검증 기반 흐름을 강력히 권장합니다.
결론 요약
U-Boot는 더 이상 단순히 커널을 실행하는 부트로더가 아닙니다.
네트워크 설정, TFTP/NFS 부팅, OTA 업데이트, 이미지 보안 검증까지 수행하는 강력한 시스템 관리 도구입니다. 특히 RK3399와 같은 고성능 SoC에서는 이러한 기능이 제품 업데이트와 유지보수 효율을 극대화하는 핵심 기술로 자리잡고 있습니다.
'u-boot' 카테고리의 다른 글
| U-Boot 디버깅과 커스터마이징: UART 로그를 이용한 실전 기법 (0) | 2025.12.10 |
|---|---|
| U-Boot에서 커널 및 루트파일시스템 로딩 (RK3399 기준) (0) | 2025.12.09 |
| U-Boot 환경 변수와 스크립트 완전 정복(Rockchip RK3399 기반) (0) | 2025.12.08 |
| U‑Boot 명령어(Command) 추가 및 실행 구조 완전 정리 (0) | 2025.12.07 |
| U-Boot 드라이버 구조와 포팅 방법 (0) | 2025.12.05 |