u-boot

U-Boot 네트워크와 OTA 업데이트

임베디드 친구 2025. 12. 11. 20:42
반응형

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 기반의 이미지 서명 검증 기능을 제공합니다.

보안 부팅 흐름

  1. 개발자가 이미지에 SHA256 해시 생성
  2. RSA 개인키로 서명
  3. U-Boot에서 RSA 공개키를 내장
  4. 부팅 시 이미지 + 서명 검증
  5. 검증 실패 시 부팅 중단 또는 대체 이미지 사용

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에서는 이러한 기능이 제품 업데이트와 유지보수 효율을 극대화하는 핵심 기술로 자리잡고 있습니다.

반응형