본문 바로가기

카테고리 없음

SWUpdate

SWUpdate

SWUpdate는 임베디드 리눅스 시스템에서 안전하고 신뢰할 수 있는 소프트웨어 업데이트를 제공하기 위해 설계된 오픈 소스 프로젝트입니다.
안정적이고 유연한 업데이트 메커니즘을 제공하며, 다양한 임베디드 환경에서 사용할 수 있도록 설계되었습니다.

https://github.com/sbabic/swupdate

주요 특징

  1. 다양한 업데이트 방식 지원:
    • OTA(Over-The-Air) 업데이트
    • USB 또는 로컬 파일 시스템을 통한 업데이트
    • 네트워크 프로토콜 (HTTP, HTTPS, FTP 등)을 통한 업데이트
  2. 멀티 이미지 업데이트:
    • 단일 업데이트 패키지 내에서 여러 이미지를 동시에 처리 가능.
    • 부트로더, 커널, 파일 시스템 등 다양한 파티션에 업데이트 가능.
  3. 고신뢰성 업데이트:
    • A/B 파티셔닝: 시스템 이미지의 두 복사본을 유지하여 실패 시 복구 가능.
    • 롤백 메커니즘: 업데이트 실패 시 이전 상태로 복구.
  4. 확장성:
    • Lua 스크립트 또는 커스텀 플러그인을 사용하여 사용자 정의 작업 추가 가능.
    • 다양한 SoC(System on Chip) 및 파일 시스템 지원.
  5. 보안 업데이트:
    • GPG 서명을 통한 패키지 무결성 검증.
    • HTTPS를 통한 암호화된 전송.
  6. 호환성:
    • Yocto 프로젝트 및 Buildroot와 통합 가능.
    • U-Boot와 같은 부트로더와 호환.

구성 요소

  • SWU 파일:
    • 업데이트 패키지를 정의하는 파일로, 내부에 여러 바이너리 및 설정을 포함.
    • 파일 형식은 .swu.
  • Handler:
    • 특정 유형의 파일이나 파티션을 처리하는 모듈.
    • 예: Raw Flash, eMMC, UBIFS 등.
  • Update Agent:
    • SWUpdate 프로세스를 관리하며, 네트워크 또는 로컬 소스에서 업데이트를 수행.
  • Web Interface:
    • 사용자가 웹 브라우저를 통해 업데이트를 제어할 수 있는 옵션 제공.

사용 사례

  1. 자동차: 자동차 ECU 소프트웨어 업데이트를 안전하게 수행.
  2. IoT 장치: 소형 디바이스에서의 OTA 업데이트 관리.
  3. 산업용 장비: 필드에 배치된 장비의 안정적인 원격 업데이트.
  4. 커넥티드 장치: 스마트홈, 웨어러블 디바이스에서의 지속적인 소프트웨어 배포.

SWUpdate의 내부 구조

이 소프트웨어는 업데이트 과정을 제어하고, 시스템 무결성을 유지하며, 다양한 임베디드 시스템의 요구 사항을 충족할 수 있도록 고도로 구성 가능한 구조를 가지고 있습니다.

SWUpdate 엔진

  • 업데이트 프로세스를 관리하는 코어 구성 요소입니다.
  • 주요 기능:
    • 업데이트 패키지(.swu)를 읽고, 각 이미지에 적합한 핸들러를 호출.
    • 업데이트 도중 상태를 로깅하고, 실패 시 롤백을 수행.
    • A/B 업데이트 모델과 같은 고신뢰성 기능 지원.

SWU 파일 포맷

  • .swu는 업데이트 패키지를 위한 컨테이너 파일로, 일반적으로 CramFS 또는 SquashFS와 같은 읽기 전용 파일 시스템을 사용합니다.
  • 포함 항목:
    • 이미지: 커널, 루트 파일 시스템, 부트로더 등.
    • 메타데이터: 버전 정보, 서명, 체크섬.
    • Lua 스크립트: 업데이트 과정에서 실행되는 사용자 정의 작업.

핸들러 (Handlers)

  • 핸들러는 특정 유형의 파티션 또는 데이터 저장소를 처리하는 모듈입니다.
    • 예: Raw NAND Flash, eMMC, NOR Flash, UBIFS, EXT4 등.
  • 핸들러는 플러그인 구조로 설계되어 필요에 따라 확장 가능.
  • Handlers

A/B 파티셔닝 모델

  • 시스템은 두 개의 동일한 파티션 세트를 가집니다(A와 B).
    • 업데이트는 비활성 파티션에 적용되고, 성공적으로 적용된 후 부팅을 전환.
    • 실패 시 이전 파티션(A 또는 B)로 롤백 가능.
  • 이 모델은 안정성을 보장하며, 임베디드 장치에서 널리 사용됩니다.

보안

  • 업데이트 패키지 무결성과 신뢰성을 보장하기 위해 GPG 서명을 지원합니다.
    • 패키지를 설치하기 전에 서명을 검증하여 변조 여부를 확인.
  • HTTPS를 통한 암호화된 전송으로 OTA 업데이트를 보호.
  • SHA256 등 해시 알고리즘을 통해 데이터 손상 여부 확인.
  • Update images from verified source
  • Symmetrically Encrypted Update Images

Lua 스크립트

  • 업데이트 과정 중 특정 작업을 정의할 수 있도록 Lua 스크립트를 지원합니다.
    • 예: 업데이트 전/후의 초기화 작업, 데이터 마이그레이션 등.
  • SWUpdate는 Lua 인터프리터를 통합하여 유연한 업데이트 작업을 수행.

SWUpdate 작동 과정

  1. 업데이트 패키지 준비:
    • .swu 파일을 생성.
    • 필요한 이미지와 Lua 스크립트를 패키지에 포함.
  2. 패키지 전달:
    • OTA, USB, 로컬 파일 시스템 등 다양한 방법으로 장치에 전달.
  3. 패키지 검증:
    • GPG 서명과 해시 체크를 통해 무결성 및 인증 확인.
  4. 업데이트 수행:
    • 비활성 파티션 또는 특정 대상에 업데이트.
    • Lua 스크립트를 실행하여 추가 작업 수행.
  5. 부팅 전환:
    • 업데이트 완료 후 부트로더(U-Boot 등)를 통해 새 이미지를 부팅.
    • 성공적으로 부팅하지 못하면 롤백 수행.

플랫폼별 통합

  1. Yocto 프로젝트
  2. Buildroot
    • Buildroot 설정에서 swupdate를 활성화하여 빌드.
    • 컴파일된 바이너리에 포함된 기본 핸들러 사용 가능.
  3. U-Boot와의 통합

SWUpdate와 A/B 업데이트 간의 상호작용

  1. U-Boot 환경변수 사용:
    • U-Boot는 활성 파티션을 추적하는 환경변수(boot_partition, upgrade_available 등)를 관리.
    • SWUpdate는 업데이트 후 U-Boot 환경변수를 수정하여 새 파티션으로 부팅을 전환.
  2. 플래그 관리:
    • SWUpdate는 부팅이 성공했는지 확인하기 위해 플래그를 설정.
    • 새 이미지로 부팅 실패 시, 부트로더는 플래그를 확인하고 롤백을 수행.

Update strategy examples

Scenarios

 

Single copy - running as standalone image

 

 

Double copy with fall-back

 

 

Combine double-copy with rescue system

 

Split system update with application update