

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS IoT 무선(OTA) 라이브러리
<a name="ota-update-library"></a>

**참고**  <a name="out-of-date-message"></a>
이 페이지의 내용은 최신 상태가 아닐 수 있습니다. 최신 업데이트는 [Freertos.org 라이브러리 페이지](https://www.freertos.org/Documentation/03-Libraries/01-Library-overview/01-All-libraries)를 참조하세요.

## 소개
<a name="ota-update-library-intro"></a>

[AWS IoT 무선 업데이트(OTA) 라이브러리](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/index.html)를 사용하면 HTTP 또는 MQTT를 프로토콜로 사용하는 FreeRTOS 디바이스에 대한 펌웨어 업데이트의 알림, 다운로드 및 검증을 관리할 수 있습니다. OTA 에이전트 라이브러리를 사용하여 디바이스에서 실행 중인 애플리케이션과 펌웨어 업데이트를 논리적으로 분리할 수 있습니다. OTA 에이전트는 네트워크 연결을 애플리케이션과 공유할 수 있습니다. 네트워크 연결을 공유하여 잠재적으로 많은 양의 RAM을 절약할 수 있습니다. 또한 OTA 에이전트 라이브러리를 사용하여 펌웨어 업데이트를 테스트, 커밋 또는 롤백하기 위한 애플리케이션별 로직을 정의할 수 있습니다.

사물 인터넷(IoT)은 기존에는 연결되지 않았던 임베디드 디바이스까지 인터넷 연결을 확장합니다. 이러한 디바이스는 인터넷을 통해 사용 가능한 데이터를 전달하도록 프로그래밍할 수 있으며 원격으로 모니터링 및 제어할 수 있습니다. 기술이 발전함에 따라 이러한 기존 임베디드 디바이스는 소비자, 산업 및 기업 공간에서 빠른 속도로 인터넷 기능을 제공하고 있습니다.

IoT 디바이스는 일반적으로 대량으로 배포되며 작업자가 접근하기 어렵거나 실용적이지 않은 장소에 배치되는 경우가 많습니다. 데이터가 노출될 수 있는 보안 취약성이 발견되는 시나리오를 생각해 보세요. 이러한 시나리오에서는 영향을 받는 디바이스에 보안 수정을 신속하고 신뢰할 수 있게 업데이트하는 것이 중요합니다. OTA 업데이트를 수행할 수 없으면 지리적으로 분산된 디바이스를 업데이트하기 어려울 수도 있습니다. 기술자에게 이러한 디바이스를 업데이트하도록 하는 것은 비용이 많이 들고 시간이 많이 걸리며 종종 비실용적입니다. 이러한 디바이스를 업데이트하는 데 시간이 걸리면 보안 취약성에 노출되는 기간이 늘어납니다. 업데이트를 위해 이러한 디바이스를 리콜하는 것도 비용이 많이 들고 가동 중지로 인해 소비자에게 심각한 혼란을 야기할 수 있습니다.

무선 업데이트(OTA)를 사용하면 비용이 많이 드는 리콜 또는 기술자 방문 없이 디바이스 펌웨어를 업데이트할 수 있습니다. 이 방법을 사용하면 다음과 같은 이점이 있습니다.
+ **보안** - 디바이스를 현장에 배포한 이후에 발견된 보안 취약성 및 소프트웨어 버그에 신속하게 대응할 수 있습니다.
+ **혁신** - 새로운 기능이 개발되면 제품을 자주 업데이트하여 혁신 주기를 촉진할 수 있습니다. 기존 업데이트 방법에 비해 가동 중지 시간을 최소화하면서 업데이트를 신속하게 적용할 수 있습니다.
+ **비용** - OTA 업데이트는 이러한 디바이스를 업데이트하는 데 기존에 사용하던 방법에 비해 유지 관리 비용을 크게 줄일 수 있습니다.

OTA 기능을 제공하려면 다음과 같은 설계 고려 사항이 필요합니다.
+ **보안 통신** - 업데이트가 암호화된 통신 채널을 사용하여 다운로드 전송 중에 변조를 방지해야 합니다.
+ **복구** - 간헐적으로 네트워크 연결이 중단되거나 잘못된 업데이트를 수신하는 등의 이유로 업데이트가 실패할 수 있습니다. 이러한 시나리오에서는 디바이스가 안정된 상태로 돌아가고 작동 불능 상태를 방지하도록 해야 합니다.
+ **작성자 확인** - 업데이트는 버전 및 호환성 확인과 같은 기타 검증과 함께 신뢰할 수 있는 소스에서 제공되었는지 확인해야 합니다.

FreeRTOS를 통한 OTA 업데이트 설정에 대한 자세한 내용은 [FreeRTOS 무선 업데이트(OTA)](freertos-ota-dev.md) 섹션을 참조하세요.

### AWS IoT 무선(OTA) 라이브러리
<a name="ota-update-library-intro-detail"></a>

 AWS IoT OTA 라이브러리를 사용하면 새로 사용 가능한 업데이트에 대한 알림을 관리하고 다운로드하며 펌웨어 업데이트의 암호화 확인을 수행할 수 있습니다. 무선 업데이트(OTA) 클라이언트 라이브러리를 사용하면 펌웨어 업데이트 메커니즘을 디바이스에서 실행되는 애플리케이션과 논리적으로 분리할 수 있습니다. 무선 업데이트(OTA) 클라이언트 라이브러리는 애플리케이션과 네트워크 연결을 공유하여 리소스가 제한된 디바이스에서 메모리를 절약할 수 있습니다. 또한 무선 업데이트(OTA) 클라이언트 라이브러리를 사용하여 펌웨어 업데이트를 테스트, 커밋 또는 롤백하기 위한 애플리케이션별 로직을 정의할 수 있습니다. 이 라이브러리는 MQTT(Message Queuing Telemetry Transport) 및 HTTP(Hypertext Transfer Protocol)와 같은 다양한 애플리케이션 프로토콜을 지원하며 네트워크 유형 및 조건에 맞게 미세 조정할 수 있는 다양한 구성 옵션을 제공합니다.

이 라이브러리의 API는 다음과 같은 주요 기능을 제공합니다.
+ 알림을 등록하거나 사용 가능한 새 업데이트 요청을 폴링합니다.
+ 업데이트 요청을 수신, 분석, 검증합니다.
+ 업데이트 요청에 포함된 정보에 따라 파일을 다운로드하고 확인합니다.
+ 수신한 업데이트를 활성화하기 전에 자체 테스트를 실행하여 업데이트의 기능적 유효성을 확인합니다.
+ 디바이스의 상태를 업데이트합니다.

이 라이브러리는 AWS 서비스를 사용하여 펌웨어 업데이트 전송, 여러 리전에서 많은 수의 디바이스 모니터링, 잘못된 배포의 폭발 반경 감소, 업데이트 보안 확인과 같은 다양한 클라우드 관련 기능을 관리합니다. 이 라이브러리는 모든 MQTT 또는 HTTP 라이브러리와 함께 사용할 수 있습니다.

이 라이브러리의 데모는 FreeRTOS 디바이스에서 coreMqtt 라이브러리 및 AWS 서비스를 사용한 완전 무선 업데이트를 보여줍니다.

## 특성
<a name="freertos-ota-features"></a>

전체 OTA 에이전트 인터페이스는 다음과 같습니다.

**`[ OTA\_Init](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ae5cc1dcc13fbcb32230f552f48b24f03)`**  
시스템에서 OTA 에이전트('OTA 태스크')를 시작하여 OTA 엔진을 초기화합니다. OTA 에이전트는 하나만 존재할 수 있습니다.

**`[ OTA\_Shutdown](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ac779291eb93f4e0e6459816e60e13b09)`**  
OTA 에이전트 종료 신호입니다. OTA 에이전트는 선택적으로 모든 MQTT 작업 알림 주제를 구독 취소하고, 진행 중인 OTA 작업(있는 경우)을 중지하고, 모든 리소스를 삭제합니다.

**`[ OTA\_GetState](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a6db3f9cb417cb135cb0e68f5b5f2b11f)`**  
OTA 에이전트의 현재 상태를 가져옵니다.

**`[ OTA\_ActivateNewImage](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a5169ba09148e7f5668a90e776e712f8b)`**  
OTA를 통해 수신된 최신 마이크로 컨트롤러 펌웨어 이미지를 활성화합니다. 이제 상세 작업 상태가 자체 테스트됩니다.

**`[ OTA\_SetImageState](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ab68cdf65934474e1f3d2cd1046314bea)`**  
현재 실행 중인 마이크로 컨트롤러 펌웨어 이미지의 확인 상태(테스트 중, 수락됨, 거부됨)를 설정합니다.

**`[ OTA\_GetImageState](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a9c5b25f9a7eff3ded8cdf088c2011742)`**  
현재 실행 중인 마이크로 컨트롤러 펌웨어 이미지의 상태(테스트 중, 수락됨, 거부됨)를 가져옵니다.

**`[ OTA\_CheckForUpdate](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a1178e8009eb05e6f55f6506b625c9fc2)`**  
OTA 업데이트 서비스에서 사용 가능한 다음 OTA 업데이트를 요청합니다.

**`[ OTA\_Suspend](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a65b61ae5dd477e8b2e6c88ea0473c62b)`**  
모든 OTA 에이전트 작업을 일시 중단합니다.

**`[ OTA\_Resume](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ae9d40388ac87e4ac93288de37c98a138)`**  
OTA 에이전트 작업을 재개합니다.

**`[ OTA\_SignalEvent](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a2564144f284db077b8947ba58a6a72bb)`**  
OTA 에이전트 태스크에 이벤트를 알립니다.

**`[ OTA\_EventProcessingTask](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ab3a0cfdc8694a606a1d736b2f54fb113)`**  
OTA 에이전트 이벤트 처리 루프입니다.

**`[ OTA\_GetStatistics](https://docs.aws.amazon.com/freertos/latest/lib-ref/embedded-csdk/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a63182243ef3c18d5f36cd427b83a1a22)`**  
수신, 대기, 처리 및 삭제된 패킷 수를 포함하는 OTA 메시지 패킷의 통계를 가져옵니다.

**`[ OTA\_Err\_strerror](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a6f72911b8fe80f27bce42c3a36dca4b3)`**  
OTA 오류 코드의 문자열 변환입니다.

**`[ OTA\_JobParse\_strerror ](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a1d42efa1af7fa0ed92060a3b7e869648)`**  
OTA 작업 파싱 오류 코드를 문자열로 변환합니다.

**`[ OTA\_PalStatus\_strerror](https://aws.github.io/ota-for-aws-iot-embedded-sdk/v3.4.0/ota_8c.html#a5a58be1ac41b7d619eeeb4861be37c89)`**  
OTA PAL 상태 코드의 문자열 변환입니다.

**`[ OTA\_OsStatus\_strerror](https://aws.github.io/ota-for-aws-iot-embedded-sdk/v3.4.0/ota_8c.html#a4951f4bb1bfbb7312850454ca2b282a4)`**  
OTA OS 상태 코드의 문자열 변환입니다.

## API 참조
<a name="freertos-ota-api"></a>

자세한 내용은 [AWS IoT Over-the-air Update: Functions](https://aws.github.io/ota-for-aws-iot-embedded-sdk/v3.4.0/ota_functions.html)를 참조하세요.

## 사용 예시
<a name="freertos-ota-example"></a>

MQTT 프로토콜을 사용하는 일반적인 OTA 지원 디바이스 애플리케이션은 다음과 같은 API 호출 시퀀스를 사용하여 OTA 에이전트를 구동합니다.

1. the AWS IoT coreMQTT 에이전트에 연결합니다. 자세한 내용은 [coreMQTT 에이전트 라이브러리](coremqtt-agent.md) 단원을 참조하십시오.

1. 버퍼, 필수 OTA 인터페이스, 사물 이름, 애플리케이션 콜백을 포함하여 `OTA_Init`를 호출해 OTA 에이전트를 초기화합니다. 콜백은 OTA 업데이트 작업을 완료한 이후에 실행되는 애플리케이션별 로직을 구현합니다.

1. OTA 업데이트가 완료되면 FreeRTOS는 `accepted`, `rejected`, `self test` 이벤트 중 하나를 사용하여 작업 완료 콜백을 호출합니다.

1. 유효성 검사 오류 등으로 인해 새 펌웨어 이미지가 거부된 경우 애플리케이션에서는 일반적으로 알림을 무시하고 다음 업데이트를 대기할 수 있습니다.

1. 업데이트가 유효하고 수락됨으로 표시된 경우 `OTA_ActivateNewImage`를 호출하여 디바이스를 재설정하고 새 펌웨어 이미지를 부팅합니다.

## 이식
<a name="freertos-ota-porting"></a>

OTA 기능을 플랫폼으로 이식하는 방법에 대한 자세한 내용은 FreeRTOS 이식 안내서의 [OTA 라이브러리 이식](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-ota.html)을 참조하세요.

## 메모리 사용
<a name="ota-update-library-memory"></a>


****  
<a name="ota-memory-estimate"></a>
<table>
<thead>
  <tr><th colspan="3"> AWS IoT OTA의 코드 크기(ARM Cortex-M용 GCC로 생성된 예제)</th></tr>
  <tr><th>파일</th><th>-O1 최적화</th><th>-Os 최적화</th></tr>
</thead>
<tbody>
  <tr><td>ota.c</td><td>8.3K</td><td>7.5K</td></tr>
  <tr><td>ota\_interface.c</td><td>0.1K</td><td>0.1K</td></tr>
  <tr><td>ota\_base64.c</td><td>0.6K</td><td>0.6K</td></tr>
  <tr><td>ota\_mqtt.c</td><td>2.4K</td><td>2.2K</td></tr>
  <tr><td>ota\_cbor.c</td><td>0.8K</td><td>0.6K</td></tr>
  <tr><td>ota\_http.c</td><td>0.3K</td><td>0.3K</td></tr>
  <tr><td>총 추정치</td><td>12.5K</td><td>11.3K</td></tr>
</tbody>
</table>
