107
FreeRTOS 이식 안내서

FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

  • Upload
    others

  • View
    12

  • Download
    1

Embed Size (px)

Citation preview

Page 1: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS이식 안내서

Page 2: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서

FreeRTOS: 이식 안내서Copyright © Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon의 상표 및 트레이드 드레스는 Amazon이 제공하지 않는 제품 또는 서비스와 관련하여 고객에게 혼동을 유발할수 있는 방식 또는 Amazon을 폄하하거나 평판에 악영향을 주는 방식으로 사용될 수 없습니다. Amazon이 소유하지 않은기타 모든 상표는 Amazon과 제휴 관계이거나 관련이 있거나 후원 관계 여부에 관계없이 해당 소유자의 자산입니다.

Page 3: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서

Table of ContentsFreeRTOS 포팅 .................................................................................................................................. 1

프리어토는 무엇입니까? .............................................................................................................. 1FreeRTOS 이식 .......................................................................................................................... 1

시스템 요구 사항 ................................................................................................................ 2이전 버전의 FreeRTOS 이식 ................................................................................................ 2이식 FAQ .......................................................................................................................... 5

이식을위한 FreeRTOS 다운로드 ........................................................................................................... 7이식을 위해 FreeRTOS 소스 코드 설정 .................................................................................................. 8

FreeRTOS 다운로드 구성 ............................................................................................................ 8공급업체가 제공하는 보드별 라이브러리를 위한 디렉터리 구성 .................................................. 8프로젝트 파일에 대한 디렉터리 구성 ..................................................................................... 9구성FreeRTOSConfig.h .................................................................................................... 9

테스트를 위해 FreeRTOS 소스 코드 설정 ....................................................................................... 9IDE 프로젝트 만들기 ......................................................................................................... 10CMake 목록 파일 생성 ...................................................................................................... 11

FreeRTOS 라이브러리 이식 ............................................................................................................... 24이식 흐름 차트 ......................................................................................................................... 25configPRINT_STRING() ......................................................................................................... 27

Prerequisites .................................................................................................................... 27Implementation ................................................................................................................. 27Testing ............................................................................................................................ 27

FreeRTOS 커널 ........................................................................................................................ 28Prerequisites .................................................................................................................... 28FreeRTOS 커널 구성 ......................................................................................................... 28Testing ............................................................................................................................ 29

Wi-Fi ....................................................................................................................................... 29Prerequisites .................................................................................................................... 29Porting ............................................................................................................................ 30Testing ............................................................................................................................ 30Validation ......................................................................................................................... 34

TCP/IP .................................................................................................................................... 35FreeRTOS+TCP 이식 ........................................................................................................ 35lwIP 이식 ......................................................................................................................... 38

보안 소켓 ................................................................................................................................. 39Prerequisites .................................................................................................................... 40Porting ............................................................................................................................ 40Testing ............................................................................................................................ 40Validation ......................................................................................................................... 44에코 서버 설정 ................................................................................................................. 44

코드Ks11 ................................................................................................................................. 47Prerequisites .................................................................................................................... 47Porting ............................................................................................................................ 47Testing ............................................................................................................................ 49Validation ......................................................................................................................... 51

TLS ........................................................................................................................................ 51Prerequisites .................................................................................................................... 51Porting ............................................................................................................................ 52AWS IoT 에 디바이스 연결 ................................................................................................. 52TLS 테스트용 인증서 및 키 설정 ......................................................................................... 54BYOC 생성(ECDSA) ......................................................................................................... 59Testing ............................................................................................................................ 67Validation ......................................................................................................................... 68

코렘큐트 .................................................................................................................................. 69Prerequisites .................................................................................................................... 69

iii

Page 4: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서

IDE 테스트 프로젝트 설정 .................................................................................................. 69로컬 테스트 환경 설정 ....................................................................................................... 69테스트 실행 ...................................................................................................................... 70Validation ......................................................................................................................... 70

코어HTTP ................................................................................................................................ 70Prerequisites .................................................................................................................... 70IDE 테스트 프로젝트 설정 .................................................................................................. 70로컬 테스트 환경 설정 ....................................................................................................... 71테스트 실행 ...................................................................................................................... 71

무선(OTA) 업데이트 .................................................................................................................. 71Prerequisites .................................................................................................................... 72Porting ............................................................................................................................ 72IoT 디바이스 부트로더 ....................................................................................................... 73Testing ............................................................................................................................ 76Validation ......................................................................................................................... 78

Bluetooth Low Energy ............................................................................................................... 78Prerequisites .................................................................................................................... 78Porting ............................................................................................................................ 79Testing ............................................................................................................................ 80Validation ......................................................................................................................... 82

BLET를 사용하여 업데이트 ........................................................................................................ 82Introduction ...................................................................................................................... 82Prerequisites .................................................................................................................... 83Setup .............................................................................................................................. 83Testing ............................................................................................................................ 89Validation ......................................................................................................................... 90References ...................................................................................................................... 91

공통 I/O ................................................................................................................................... 91Prerequisites .................................................................................................................... 92Testing ............................................................................................................................ 92I2C 라이브러리 포팅 ......................................................................................................... 94UART 라이브러리 포팅 ...................................................................................................... 96SPI 라이브러리 포팅 ......................................................................................................... 98

셀룰러 ................................................................................................................................... 100Prerequisites .................................................................................................................. 100

버전 1.4.x에서 버전 201906.00(및 이후 버전)으로 마이그레이션 ............................................................. 101애플리케이션 마이그레이션 ...................................................................................................... 101이식 마이그레이션 ................................................................................................................... 101

FreeRTOS 코드 디렉터리 구조 .......................................................................................... 101CMake 빌드 시스템 ......................................................................................................... 101Wi-Fi 라이브러리 이식 마이그레이션 .................................................................................. 102

...................................................................................................................................................... ciii

iv

Page 5: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서프리어토는 무엇입니까?

FreeRTOS 포팅프리어토는 무엇입니까?

15년간 세계 유수의 칩 회사와 협력하여 개발되었으며, 현재 175초마다 다운로드 는 마이크로컨트롤러 및소형 마이크로프로세서를 위한 시장을 선도하는 실시간 운영 체제입니다. MIT 오픈 소스 라이선스에 따라 자유롭게 배포되는 FreeRTOS 는 모든 산업 분야에서 사용하기에 적합한 커널과 증가하는 라이브러리 세트가포함되어 있습니다. FreeerTOS는 신뢰성과 사용 편의성에 중점을 두어 제작되었습니다.

FreeRTOS 에는 연결, 보안 및 무선 (OTA) 업데이트용 라이브러리가 포함되어 있습니다. FreeerTOS에는 자격을 갖춘 보드에서 FreeerTOS 기능을 보여주는 데모 응용 프로그램도 포함되어 있습니다.

FreeRTOS 는 오픈 소스 프로젝트입니다. GitHub 사이트 https://github.com/aws/amazon-freertos에서 소스코드를 다운로드하거나 변경 사항 또는 기능 향상에 기여하거나 문제를 보고할 수 있습니다. MIT 오픈 소스라이선스에 따라 FreeRTOS 코드를 릴리스하므로 상용 및 개인 프로젝트에서 코드를 사용할 수 있습니다.

우리는 또한 FreeerTOS 문서에 대한 기여를 환영합니다 (FreeRTOS 사용 설명서,FreeRTOS 이식 안내서,및FreeRTOS 검증 안내서). https://github.com/awsdocs/aws-freertos-docs에서 설명서에 대한 마크다운 소스를 사용할 수 있습니다. 이 소스는 Creative Commons(CC BY-ND) 라이선스 하에서 릴리스됩니다.

FreeRTOS 커널 및 구성 요소는 개별적으로 릴리스되며 의미 체계 버전 관리를 사용합니다. 통합 FreeRTOS릴리스는 주기적으로 이루어집니다. 모든 릴리스는 YYYYMM.NN 형식의 날짜 기반 버전 관리를 사용합니다. 여기서

• Y는 연도를 나타냅니다.• M은 월을 나타냅니다.• N은 지정된 월 내의 릴리스 순서를 나타냅니다(00은 첫 번째 릴리스).

예를 들어, 202121년 6월의 두 번째 릴리스는 202106.01이 됩니다.

이전에는 FreeRTOS 릴리스는 메이저 릴리스에 의미 체계 버전 관리를 사용했습니다. Amazon FreeRTOS는 날짜 기반 버전 관리로 이동했지만 (FreeRTOS 1.4.8에서 FreeRTOS AWS 참조 통합 201906.00으로 업데이트됨), FreeRTOS 커널 및 각 개별 FreeRTOS 라이브러리는 여전히 의미 체계 버전 관리를 그대로 유지하고 있습니다. 의미 체계 버전 관리에서는 버전 번호(X.Y.Z) 자체가 릴리스가 메이저 릴리스인지, 마이너 릴리스인지, 또는 포인트 릴리스인지를 나타냅니다. 라이브러리의 의미 체계 버전을 사용하여 새 릴리스의 범위와 애플리케이션에 미치는 새 릴리스의 영향을 평가할 수 있습니다.

LTS 릴리스는 다른 릴리스 유형과 다르게 유지 관리됩니다. 메이저 릴리스와 마이너 릴리스는 결함 해결뿐아니라 새 기능으로 자주 업데이트됩니다. LTS 릴리스는 중요한 결함과 보안 취약성을 해결하기 위한 변경사항으로만 업데이트됩니다. 시작 후 특정 LTS 릴리스에는 새로운 기능이 도입되지 않습니다. 이 유형의 릴리스는 릴리스 후 최소 3역년 동안 유지 관리 되며, 메이저 릴리스와 마이너 릴리스가 나타내는 동적 기준과는 대조적으로 안정적인 기준을 사용할 수 있는 옵션을 디바이스 제조업체에게 제공합니다.

IoT 디바이스로 FreeRTOS 이식마이크로 컨트롤러 보드가 FreeRTOS 를 실행하려면 먼저 일부 FreeRTOS 코드를 디바이스의 하드웨어에이식해야 합니다. 기본 커널 포트는FreeRTOS 이식 안내서의프레어토스보그를 선택합니다. 보안, 연결 등을위해 FreeRTOS 라이브러리를 포함하려는 포트의 경우 커널 포트에 다음 지침이 빌드됩니다.

디바이스에 FreeRTOS 이식하려면

1. 의 지침을 따릅니다.이식을위한 FreeRTOS 다운로드 (p. 7)를 사용하여 이식을 위해 FreeRTOS 최신 버전을 다운로드합니다.

1

Page 6: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서시스템 요구 사항

2. 의 지침을 따릅니다.이식을 위해 FreeRTOS 소스 코드 설정 (p. 8)를 사용하여 FreeRTOS 다운로드의 파일 및 폴더를 이식하고 테스트하도록 구성합니다.

3. 의 지침을 따릅니다.FreeRTOS 라이브러리 이식 (p. 24)를 사용하여 FreeRTOS 라이브러리를 디바이스로 이식합니다. 각 이식 주제에는 포트 테스트에 대한 지침이 포함되어 있습니다.

시스템 요구 사항FreeRTOS 로 이식하는 디바이스는 다음 최소 요구 사항을 충족하는 마이크로 컨트롤러 보드여야 합니다.

• 25MHz 처리 속도• 64KB RAM• MCU에 저장된 실행 가능한 이미지당 128KB의 프로그램 메모리• (OTA 라이브러리 이식 (p. 71)인 경우) MCU에 저장된 두 개의 실행 가능 이미지

이전 버전의 FreeRTOS 이식이전 버전의 FreeerTOS를 이식하는 경우프리어토스 AWS 참조 통합 리포지토리를 실행하고 버전 태그로 이식 중인 FreeRTOS 버전을 체크아웃합니다. PDF 형식의 검증 및 테스트 설명서는 tests 폴더에 있습니다.검증 및 테스트 설명서 기록은 아래 표를 참조하십시오.

FreeRTOS 이식 및 검증 설명서의 수정 기록

날짜 포팅 및 검증 가이드의설명서 버전

변경 기록 FreeRTOS 버전

202020년 12월 분류: 20년(이식 안내서)

분류: 20년(검증 안내서)

• 제1회 출시 예정• 테스트용 CoreHTTP

라이브러리 구성 (p. 70) 추가됨

• 셀룰러 라이브러리 포팅 (p. 100) 추가됨

분류: 20년

202020년 11월 2011년(이식 안내서)

2011년(검증 안내서)

• 제1회 출시 예정• 테스트용 CoreMQTT

라이브러리 구성 (p. 69) 추가됨

2011년

20202020년 7월 분류: 20년(이식 안내서)

분류: 20년(검증 안내서)

• 제1회 출시 예정 분류: 20년

2020년 2월 18일 202002.00(포팅 안내서)

202002.00(검증 안내서)

• 릴리스 202002.00• 아마존 프리어토는 이

제 프리어토입니다.

202002.00

2019년 12월 17일 201912.00(포팅 안내서)

201912.00(검증 안내서)

• 릴리스 201912.00• 공통 I/O 라이브러리

포팅 (p. 91)을 추가했습니다.

201912.00

2019년 10월 29일 201910.00(포팅 안내서)

201910.00(검증 안내서)

• 릴리스 201910.00• 난수 생성기 이식 정보

가 업데이트되었습니다.

201910.00

2

Page 7: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서이전 버전의 FreeRTOS 이식

날짜 포팅 및 검증 가이드의설명서 버전

변경 기록 FreeRTOS 버전

2019년 8월 26일 201908.00(포팅 안내서)

201908.00(검증 안내서)

• 릴리스 201908.00• 추가됨테스트용

HTTPS 클라이언트 라이브러리 구성

코드KCS11 라이브러리 포팅하기 (p. 47)업데이트됨

201908.00

2019년 6월 17일 201906.00(이식 안내서)

201906.00(검증 안내서)

• 릴리스 201906.00• 디렉터리 구조 업데이

201906.00 메이저

2019년 5월 21일 1.4.8(이식 안내서)

1.4.8(검증 안내서)

• 이식 설명서를 이식FreeRTOS 이식 안내서

• 검증 설명서를FreeRTOS 검증 안내서

1.4.8

2019년 2월 25일 1.1.6 • 시작 안내서 템플릿 부록에서 다운로드 및 구성 지침 제거(84페이지)

1.4.5

1.4.6

1.4.7

2018년 12월 27일 1.1.5 • CMake 요구 사항에대한 검증 체크리스트부록 업데이트(70페이지)

1.4.5

1.4.6

2018년 12월 12일 1.1.4 • TCP/IP 이식 부록에lwIP 이식 지침 추가(31페이지)

1.4.5

2018년 11월 26일 1.1.3 • Bluetooth Low Energy이식 부록 추가(52페이지)

• FreeRTOS 테스트 정보를 위한 AWS IoT 디바이스 테스터 추가

• FreeRTOS 콘솔 부록에 등록할 정보의CMake 링크 추가 (85페이지)

1.4.4

3

Page 8: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서이전 버전의 FreeRTOS 이식

날짜 포팅 및 검증 가이드의설명서 버전

변경 기록 FreeRTOS 버전

2018년 11월 7일 1.1.2 • PKCS #11 이식 부록의 PKCS #11 PAL 인터페이스 이식 지침 업데이트(38페이지)

• CertificateConfigurator.html경로 업데이트(76페이지)

• 시작 안내서의 템플릿부록 업데이트(80페이지)

1.4.3

2012년 10월 8일 1.1.1 • aws_test_runner_config.h테스트 구성 표에 새“AFQP에 필요” 열 추가(16페이지)

• 테스트 프로젝트 만들기 섹션의 Unity 모듈디렉터리 경로 업데이트(14페이지)

• "권장 이식 순서" 차트업데이트(22페이지)

• TLS 부록, 테스트 설정의 클라이언트 인증서및 키 변수 이름 업데이트(40페이지)

• 보안 소켓 이식 부록과 테스트 설정(34페이지), TLS 이식 부록과 테스트 설정(40페이지) 및 TLS 서버 설정 부록(57페이지)의파일 경로 변경

1.4.2

2018년 8월 27일 1.1.0 • OTA 업데이트 이식 부록 추가(47페이지)

• 부트로더 이식 부록 추가(51페이지)

1.4.0

1.4.1

4

Page 9: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서이식 FAQ

날짜 포팅 및 검증 가이드의설명서 버전

변경 기록 FreeRTOS 버전

2018년 8월 9일 1.0.1 • "권장 이식 순서" 차트업데이트(22페이지)

• PKCS #11 이식 부록업데이트(36페이지)

• TLS 이식 부록, 테스트 설정(40페이지) 및TLS 서버 설정 부록, 9단계(51페이지)의 파일 경로 변경

• MQTT 이식 부록, 사전조건의 하이퍼링크 수정(45페이지)

• BYOC 만들기 지침 부록의 예제에 AWS CLI구성 지침 추가 (57페이지)

1.3.1

1.3.2

2018년 7월 31일 1.0.0 FreeRTOS 검증 프로그램 안내서의 초기 버전

1.3.0

이식 FAQFreeRTOS 포트란 무엇입니까?

FreeRTOS 포트는 필수 FreeRTOS 라이브러리 및 플랫폼에서 지원하는 FreeRTOS 용 API의 보드별 구현입니다. 이 포트를 사용하면 API가 보드에서 작동하며, 필요에 따라 플랫폼 공급업체가 제공하는 디바이스 드라이버 및 BSP와의 통합을 구현합니다. 또한 포트에는 보드에서 요구하는 구성 조정(예: 클럭 속도, 스택 크기, 힙 크기)이 포함되어야 합니다.

내 디바이스는 Wi-Fi, Bluetooth Low Energy 또는 무선(OTA) 업데이트를 지원하지 않습니다. FreeRTOS 를이식하려면 모든 라이브러리가 필요합니까?

FreeRTOS 연결 라이브러리를 이식하기 위한 기본 요구 사항은 디바이스가 클라우드에 연결할 수 있어야 한다는 것입니다. 예를 들어, 보안 이더넷 연결 를 통해 클라우드에 연결할 수 있으면 Wi-Fi, BluetoothLow Energy 및 무선 (OTA) 라이브러리가 필요하지 않습니다. 일부 테스트 및 데모 애플리케이션은 모든라이브러리를 이식해야 작동합니다.

나는 “에 도달 할 수에코 서버“를 두 개의 서로 다른 네트워크 (예: 두 개의 다른 액세스 포인트에 있는 두 개의서브넷)

에코 서버는 TCP/IP 및 TLS 포트 테스트를 통과해야 합니다. 에코 서버는 보드가 연결된 네트워크에서연결할 수 있어야 합니다. 다른 서브넷의 디바이스가 단일 에코 서버와 통신해야 하는 경우 서브넷을 통한 라우팅을 활성화하려면 IT 지원 센터에 문의하십시오.

FreeRTOS 포트 테스트를 실행하려면 어떤 네트워크 포트를 열어야 합니까?

FreeRTOS 포트 테스트를 실행하려면 다음 네트워크 연결이 필요합니다.

포트 프로토콜

443, 8883 MQTT

8443 Greengrass Discovery

5

Page 10: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서이식 FAQ

이 페이지 또는 FreeRTOS 이식 안내서의 나머지 부분에서 답변을 얻지 못한 이식에 대해 질문이 있는 경우FreeerTOS 엔지니어링 팀에 문의하십시오.를 선택합니다.

6

Page 11: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서

이식을위한 FreeRTOS 다운로드FreeRTOS 를 플랫폼으로 이식하기 전에 FreeRTOS 를 다운로드하거나 FreeerTOS 저장소를GitHub를 선택합니다. 자세한 내용은 README.md 파일을 참조하십시오.

Note

리포지토리를 복제하는 것이 좋습니다. 복제 기능을 사용하면 리포지토리에 푸시될 때 마스터 브랜치에 대한 업데이트를 쉽게 선택할 수 있습니다.

FreeRTOS 를 다운로드하거나 복제하면 플랫폼으로FreeerTOS 코드 이식을 시작할 수 있습니다. 지침은 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 및 FreeRTOS 라이브러리 이식 (p. 24) 단원을 참조하십시오.

Note

FreeRTOS 설명서 전체에서 FreeRTOS 다운로드를 이라고 합니다.freertos를 선택합니다.

7

Page 12: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서FreeRTOS 다운로드 구성

이식을 위해 FreeRTOS 소스 코드 설정

FreeRTOS 를 다운로드한 후 이식을 시작하려면 먼저 FreeerTOS 다운로드에서 일부 파일과 폴더를 구성해야 합니다.

이식을 위해 FreeRTOS 다운로드를 준비하려면FreeRTOS 다운로드 구성 (p. 8)를 사용하여 FreeRTOS다운로드의 디렉터리 구조를 디바이스에 맞게 구성합니다.

디버깅을 위해 이식된 라이브러리를 테스트하려는 경우 이식을 시작하기 전에 테스트를 위해 일부 파일을 구성해야 합니다. 테스트 설정에 대한 자세한 내용은 테스트를 위해 FreeRTOS 소스 코드 설정 (p. 9) 단원을 참조하십시오.

Note

검증을 위해 포트를 공식적으로 검사하려면 FreeRTOS 용 AWS IoT 디바이스 테스터를 사용해야 합니다. FreeRTOS AWS IoT 디바이스 테스터에 대한 자세한 내용은 단원을 참조하십시오.FreeRTOS 용 AWS IoT 디바이스 테스터 사용FreeRTOS 사용 설명서를 참조하십시오.FreeRTOS 용 검증에 대한 자세한 내용은 단원을 참조하십시오.FreeRTOS 검증 안내서를 선택합니다.

FreeRTOS 다운로드를 구성하고 테스트 환경을 설정한 후에는 FreeerTO 이식을 시작할 수 있습니다. 이식및 테스트 지침은 FreeRTOS 라이브러리 이식 (p. 24) 단원을 참조하십시오.

FreeRTOS 다운로드 구성아래 지침에 따라 디바이스에 FreeRTOS 코드를 이식하기 위해 FreeerTOS 다운로드를 구성합니다.

공급업체가 제공하는 보드별 라이브러리를 위한 디렉터리 구성다운로드의 루트 디렉터리(freertos) 아래에서 vendors 폴더는 다음과 같이 구성됩니다.

vendors+ - vendor (Template, to be renamed to the name of the MCU vendor) + - boards |   + - board (Template, to be renamed to the name of the development board) |   + - aws_demos |   + - aws_tests |   + - CMakeLists.txt |   + - ports + - driver_library (Template, to be renamed to the library name)    + - driver_library_version (Template, to be renamed to the library version)

vendor and board 폴더는 데모 및 테스트 프로젝트 생성을 보다 쉽게 수행할 수 있도록 제공되는 템플릿폴더입니다. 해당 디렉터리 구조에서는 모든 데모 및 테스트 프로젝트가 일관된 구성을 유지합니다.

aws_tests 폴더의 구조는 다음과 같습니다.

vendors/vendor/boards/board/aws_tests

8

Page 13: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서프로젝트 파일에 대한 디렉터리 구성

+ - application_code (Contains main.c, which contains main())| + - vendor_code (Contains vendor-supplied, board-specific files)| + - main.c (Contains main())+ - config_files (Contains FreeRTOS config files)

모든 테스트 프로젝트에는 공급업체가 제공하는 드라이버 라이브러리가 필요합니다. GPIO 출력을 LED 표시등에 매핑하는 헤더 파일과 같은 일부 공급업체 제공 파일은 대상 개발 보드에만 적용됩니다. 이러한 파일은 vendor_code 폴더에 있습니다.

GPIO 라이브러리와 같은 기타 공급업체 제공 파일은 보드의 MCU 제품군 전반에서 공통적으로 사용됩니다.이러한 파일은 driver_library folder.

MCU 제품군에서 공통적으로 사용되는 공급업체 제공 라이브러리를 위해 디렉터리를 설정하려면

1. 대상 보드의 MCU 제품군에 공통적으로 사용되는 모든 필수 공급업체 제공 라이브러리를driver_library_version 폴더에 저장합니다.

2. vendor 폴더 이름을 공급업체 이름으로 바꾸고 driver_library 및 driver_library_version폴더 이름을 드라이버 라이브러리 이름 및 해당 버전으로 바꿉니다.

Important

대상 보드의 MCU 제품군에 공통적으로 사용되는 공급업체 제공 라이브러리를 freertos/test또는 freertos/demos의 하위 디렉터리에 저장하지 마십시오.

프로젝트 파일에 대한 디렉터리 구성freertos에서 projects 폴더의 구조는 다음과 같습니다.

projects+ - vendor (Template, to be renamed to the name of the MCU vendor)    + - board (Template, to be renamed to the name of the development board) + - ide (Contains an IDE-specific project) + - visual_studio (contains project files for Visual Studio)

프로젝트 디렉터리를 설정하려면

1. ide 폴더 이름을 테스트 프로젝트를 빌드하는 데 사용하는 IDE의 이름으로 바꿉니다.2. vendor 폴더 이름을 공급업체 이름으로 바꾸고 board 폴더 이름을 개발 보드 이름으로 바꿉니다.

구성FreeRTOSConfig.hFreeRTOS 다운로드의 디렉터리 구조를 구성한 후FreeRTOSConfig.h구성 헤더 파일을 엽니다.

FreeRTOSConfig.h에서 보드 이름을 구성하려면

1. Open freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSConfig.h.

2. 행에서#define configPLATFORM_NAME "Unknown", 변경 Unknown 를 보드 이름과 일치시킵니다.

테스트를 위해 FreeRTOS 소스 코드 설정FreeRTOS 에는 이식된 각 라이브러리에 대한 테스트가 있습니다. aws_test_runner.c 파일은aws_test_runner_config.h 헤더 파일에 지정된 각 테스트를 실행하는 RunTests 함수를 정의합니다.

9

Page 14: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서IDE 프로젝트 만들기

각 FreeRTOS 라이브러리를 이식할 때, 이식된 FreeerTOS 소스 코드를 빌드하고, 컴파일된 코드를 보드로플래시하고, 보드에서 실행하여 포트를 테스트할 수 있습니다.

테스트를 위해 FreeRTOS 소스 코드를 빌드하려면 다음 중 하나를 사용하면 됩니다.

• 지원되는 IDE.

IDE를 사용하여 FreeRTOS 소스 코드를 빌드하는 경우 IDE 테스트 프로젝트를 설정해야 합니다. IDE 프로젝트 만들기 (p. 10)의 지침에 따라 IDE에서 테스트 프로젝트를 생성합니다. FreeRTOS 라이브러리이식 (p. 24) 아래의 각 라이브러리별 이식 섹션에는 IDE 테스트 프로젝트에서 라이브러리의 이식된 소스 파일 설정에 대한 추가 지침이 포함되어 있습니다.

• CMake 빌드 시스템.

CMake를 사용하고 있다면 CMakeLists.txt CMake 목록 파일을 만들어야 합니다. CMake 목록 파일 생성 (p. 11)의 지침을 따라 CMakeLists.txt CMake 목록 파일을 생성할 수 있습니다.

Important

ACMakeLists.txt사용하는 테스트 방법에 관계없이 FreeRTOS 콘솔에 대해 검증된 디바이스를 나열하려면 파일이 필요합니다.

코드를 빌드한 후 플랫폼의 플래시 유틸리티를 사용하여 컴파일된 코드를 디바이스로 플래시합니다.

Note

Device Tester의 userdata.json 파일에서 빌드 및 플래시 도구를 지정하므로 Device Tester로 포트를 검증하는 경우 코드를 수동으로 플래시할 필요가 없습니다.

IDE 프로젝트 만들기FreeRTOS 다운로드를 구성한 후 IDE 프로젝트를 만들고 코드를 프로젝트로 가져올 수 있습니다.

아래 지침에 따라 테스트를 위해 필요한 IDE 프로젝트 구조로 IDE 프로젝트를 만듭니다.

Important

Eclipse 기반 IDE를 사용하는 경우 지정된 폴더의 모든 파일을 빌드하도록 프로젝트를 구성하지 마십시오. 대신, 각 소스 파일에 개별적으로 연결하여 프로젝트에 소스 파일을 추가합니다.

1. IDE를 열고 freertos/projects/vendor/board/ide 디렉터리에 aws_tests라는 프로젝트를 만듭니다.

2. IDE의 aws_tests 프로젝트 아래에 두 개의 가상 폴더를 만듭니다.

• application_code

• config_files

언더aws_tests에서 IDE 프로젝트에 두 개의 가상 폴더가 있어야 합니다.application_code및config_files를 선택합니다.

Note

Eclipse는 추가로 includes 폴더를 생성합니다. 이 폴더는 필요한 구조의 일부가 아닙니다.3. freertos/vendors/vendor/boards/board/aws_tests/application_code 및 해당 하위 디

렉터리에 있는 모든 파일을 IDE의 aws_tests/application_code 가상 폴더로 가져옵니다.4. freertos/tests 및 해당 하위 디렉터리에 있는 모든 파일을 IDE의 aws_tests/

application_code 가상 디렉터리로 가져옵니다.

10

Page 15: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

5. freertos/vendors/vendor/boards/board/aws_tests/config_files 디렉터리에 있는 모든헤더 파일을 IDE의 aws_tests/config_files 가상 폴더로 가져옵니다.

Note

이식하지 않는 라이브러리의 파일은 프로젝트로 가져올 필요가 없습니다. 예를들어, OTA 라이브러리를 이식하지 않는 경우 aws_ota_agent_config.h 및aws_test_ota_config.h 파일을 생략할 수 있습니다. Wi-Fi 라이브러리를 이식하지 않는 경우 aws_test_wifi_config.h 및 aws_wifi_config.h 파일을 생략할 수 있습니다.

6. 필요한 타사 라이브러리를 포함하여 freertos/libraries의 필수 라이브러리 및 해당 하위 디렉터리를 aws_tests IDE 프로젝트로 가져옵니다. 필수 라이브러리에 대한 자세한 내용은FreeRTOS 이식 흐름도를 선택합니다. 테스트 프로젝트 외에 포함해야 하는 타사 라이브러리에 의존하는 FreeRTOS 라이브러리에 대한 정보는 특정 라이브러리의 이식 섹션에 나와 있습니다.

마지막으로, 다음 디렉터리에 있는 unity 파일을 프로젝트로 가져옵니다.

• freertos/libraries/3rdparty/unity/src/

• freertos/libraries/3rdparty/unity/extras/fixture/src/

Note

이식하지 않는 라이브러리의 파일은 프로젝트로 가져올 필요가 없습니다.7. freertos/freertos_kernel 및 freertos/freertos_kernel/include 디렉터리에 있는 모든

소스 파일을 aws_tests IDE 프로젝트로 가져옵니다.8. 컴파일러 및 플랫폼 아키텍처에 해당하는 freertos/freertos_kernel/portable의 하위 디렉터

리를 aws_tests IDE 프로젝트로 가져옵니다.9. 디바이스에 대해 사용 중인 FreeRTOS 메모리 관리 구현을 aws_tests IDE 프로젝트로 가져옵니다.

freertos/freertos_kernel/portable/MemMang 디렉터리에는 FreeRTOS 메모리 관리 구현이포함되어 있습니다. heap_4.c 또는 heap_5.c를 사용할 것을 권장합니다.

FreeRTOS 메모리 관리에 대한 자세한 내용은 메모리 관리를 참조하십시오.10. 프로젝트의 IDE 속성을 열고 컴파일러의 포함 경로에 다음 경로를 추가합니다.

• freertos/vendors/vendor/boards/board/aws_tests/config_files

• freertos/freertos_kernel/include

• freertos/freertos_kernel/portable/compiler/architecture

• 공급업체가 제공하는 드라이버 라이브러리에 필요한 모든 경로11. UNITY_INCLUDE_CONFIG_H 및 AMAZON_FREERTOS_ENABLE_UNIT_TESTS를 프로젝트 속성의 프로

젝트 수준 매크로로 정의합니다.

IDE 프로젝트 설정을 완료하면 FreeRTOS 라이브러리를 디바이스로 이식할 준비가 된 것입니다. 지침은FreeRTOS 라이브러리 이식 (p. 24)을 참조하십시오.

CMake 목록 파일 생성이식을 위해 FreeRTOS 다운로드를 구성한 후에는 프로젝트와 플랫폼을 위한 CMake 목록 파일을 설정할 수있습니다.

주제• Prerequisites (p. 12)• CMakeLists.txt 템플릿에서 플랫폼에 맞는 목록 파일 만들기 (p. 12)• CMake를 사용하여 FreeRTOS 빌드 (p. 19)

11

Page 16: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

Prerequisites계속하기 전에 호스트 시스템이 다음 사전 조건을 충족하는지 확인하십시오.

• 디바이스의 컴파일 도구 체인이 컴퓨터의 운영 체제를 지원해야 합니다. CMake는 모든 버전의 Windows,macOS 및 Linux를 지원합니다.

Linux용 Windows 하위 시스템(WSL)은 지원되지 않습니다. Windows 시스템에서 네이티브 CMake를 사용합니다.

• CMake 버전 3.13 이상이 설치되어 있어야 합니다.

CMake.org에서 CMake의 바이너리 배포를 다운로드할 수 있습니다.

Note

CMake 이진 배포를 다운로드하는 경우 명령줄에서 CMake를 사용하기 전에 CMake 실행 파일을PATH 환경 변수에 추가해야 합니다.

또한 macOS에서 homebrew, Windows에서 scoop이나 chocolatey와 같은 패키지 관리자를 사용하여CMake를 다운로드하고 설치할 수 있습니다.

Note

많은 Linux 배포판에 대한 패키지 관리자의 CMake 패키지 버전은 최신 버전이 아닙니다.배포의 패키지 관리자에 최신 버전의 CMake가 포함되어 있지 않으면 를 시도할 수 있습니다.linuxbrew또는nix를 선택합니다.

• 호환 가능한 네이티브 빌드 시스템이 있어야 합니다.

CMake는 GNU Make 또는 Ninja 등의 많은 네이티브 빌드 시스템을 대상으로 할 수 있습니다. Make와Ninja는 모두 Linux, macOS 및 Windows의 패키지 관리자를 사용하여 설치할 수 있습니다. Windows에서Make를 사용하는 경우 수식에서 독립 실행형 버전을 설치하거나 Make를 번들로 제공하는 MinGW를 설치할 수 있습니다.

Note

MinGW의 Make 실행 파일은 make.exe가 아니라 mingw32-make.exe입니다.

Ninja는 Make보다 빠르며 모든 데스크톱 운영 체제에 네이티브 지원을 제공하므로 Ninja를 사용하는 것이좋습니다.

CMakeLists.txt 템플릿에서 플랫폼에 맞는 목록 파일 만들기ACMakeLists.txt템플릿 파일은 FreeRTOS 와 함께 제공되며freertos/vendors/vendor/boards/board/CMakeLists.txt를 선택합니다.

CMakeLists.txt 템플릿 파일은 4개의 섹션으로 구성됩니다.

• FreeRTOS 콘솔 메타데이터 (p. 13)• 컴파일러 설정 (p. 14)• FreeRTOS 이동식 계층 (p. 15)• FreeRTOS 데모 및 테스트 (p. 18)

지침에 따라 목록 파일의 이 4개 섹션을 플랫폼에 맞게 편집하십시오. freertos/vendors에 있는 다른 검증된 공급업체 보드의 CMakeLists.txt 파일을 예제로 참조할 수 있습니다.

파일 전체에 두 가지 기본 함수가 호출됩니다.12

Page 17: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

afr_set_board_metadata(name value)

이 함수는 FreeRTOS 콘솔에 대한 메타데이터를 정의합니다. 함수는 freertos/tools/cmake/afr_metadata.cmake에 정의되어 있습니다.

afr_mcu_port(module_name [<DEPENDS> [targets...]])

이 함수는 FreeRTOS 모듈 (즉, 라이브러리) 과 연관된 이동식 계층 대상을 정의합니다. CMakeGLOBAL INTERFACE IMPORTED 대상을 AFR:module_name::mcu_port 형식의 이름으로 생성합니다. DEPENDS가 사용되는 경우 추가 대상이 target_link_libraries와 연결됩니다. 함수는freertos/tools/cmake/afr_module.cmake에 정의되어 있습니다.

FreeRTOS 콘솔 메타데이터

템플릿 파일의 첫 번째 섹션은 보드의 정보를 FreeRTOS 콘솔에 표시하는 데 사용되는 메타데이터를 정의합니다. afr_set_board_metadata(name value) 함수를 사용하여 템플릿에 나열된 각 필드를 정의합니다. 이 표에서는 각 필드에 대한 설명을 제공합니다.

필드 이름 값 설명

ID 보드의 고유 ID

DISPLAY_NAME FreeRTOS 콘솔에 표시할 보드의 이름

DESCRIPTION FreeRTOS 콘솔 보드에 대한 간략한 설명

VENDOR_NAME 보드의 공급업체 이름

FAMILY_NAME 보드의 MCU 제품군 이름

DATA_RAM_MEMORY 보드의 RAM 크기와 약어로 표시된 단위. 예를 들어킬로바이트의 경우 KB입니다.

PROGRAM_MEMORY 보드의 프로그램 메모리 크기와 약어로 표시된 단위. 예를 들어 메가바이트의 경우 "MB"입니다.

CODE_SIGNER OTA 업데이트에 사용되는 코드 서명 플랫폼.SHA256 해시 알고리즘 및 ECDSA 암호화 알고리즘에는 AmazonFreeRTOS-Default를 사용합니다. 다른 코드 서명 플랫폼을 사용하려면 문의하십시오.

SUPPORTED_IDE 세미콜론으로 구분된 보드 지원 IDE의 ID 목록

IDE_ID_NAME 지원되는 IDE의 이름. Replace ID 를 IDE에 대해 나열된 ID로 바꿉니다.SUPPORTED_IDE필드를 입력합니다.

IDE_ID_COMPILER 지원되는 IDE에 대해 지원되는 컴파일러 이름을 세미콜론으로 구분한 목록. Replace ID 를 IDE에 대해나열된 ID로 바꿉니다.SUPPORTED_IDE필드를 입력합니다.

KEY_IMPORT_PROVISIONING 보드 데모 프로젝트가 사전 프로비저닝된aws_clientcredential_keys.h헤더 파일에저장됩니다. 이 경우빠른 Connect가 FreeRTOS 콘솔에서 활성화됩니다.

의도한 보드 프로비저닝 메커니즘이 JITR/JITP 또는다중 계정 등록인 경우 FALSE로 설정합니다. 이 경

13

Page 18: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

필드 이름 값 설명우빠른 Connect는 FreeRTOS 콘솔에서 비활성화됩니다.

컴파일러 설정템플릿 파일의 두 번째 섹션은 보드의 컴파일러 설정을 정의합니다. 컴파일러 설정을 보유하는 대상을 만들려면afr_mcu_port함수를 사용하여compiler대신 module_name 를 생성하려면INTERFACE이름을 가진대상AFR::compiler::mcu_port를 선택합니다. 커널은 이 INTERFACE 대상에 공개적으로 연결되므로컴파일러 설정이 모든 모듈에 일시적으로 채워집니다.

기본 제공되는 표준 CMake 함수를 사용하여 목록 파일의 이 섹션에서 컴파일러 설정을 정의합니다. 컴파일러 설정을 정의할 때는 다음 모범 사례를 따르십시오.

• target_compile_definitions를 사용하여 컴파일 정의와 매크로를 제공합니다.• target_compile_options를 사용하여 컴파일러 플래그를 제공합니다.• target_include_directories를 사용하여 포함 디렉터리를 제공합니다.• target_link_options를 사용하여 링커 플래그를 제공합니다.• target_link_directories를 사용하여 링커 검색 디렉터리를 제공합니다.• target_link_libraries를 사용하여 링크에 대한 라이브러리를 제공합니다.

Note

컴파일러 설정을 다른 곳에서 정의할 경우 파일의 이 섹션에 있는 정보를 복제할 필요가 없습니다.대신 DEPENDS로 afr_mcu_port를 호출하여 다른 위치에서 대상 정의를 가져옵니다.예:

# your_target is defined somewhere else. It does not have to be in the same file.afr_mcu_port(compiler DEPENDS your_target)

DEPENDS로 afr_mcu_port를 호출하면target_link_libraries(AFR::module_name::mcu_port INTERFACEyour_targets)가 호출되고 필요한 AFR::compiler::mcu_port 대상의 컴파일러 설정이 채워집니다.

여러 컴파일러 사용

보드가 여러 컴파일러를 지원하는 경우 AFR_TOOLCHAIN 변수를 사용하여 컴파일러 설정을 동적으로선택할 수 있습니다. 이 변수는 사용 중인 컴파일러의 이름으로 설정되며 freertos/tools/cmake/toolchains에 있는 도구 체인 파일의 이름과 동일해야 합니다.

예:

if("${AFR_TOOLCHAIN}" STREQUAL "arm-gcc") afr_mcu_port(compiler DEPENDS my_gcc_settings).elseif("${AFR_TOOLCHAIN}" STREQUAL "arm-iar") afr_mcu_port(compiler DEPENDS my_iar_settings).else() message(FATAL_ERROR "Compiler ${AFR_TOOLCHAIN} not supported.")endif()

고급 컴파일러 설정

프로그래밍 언어를 기반으로 컴파일러 플래그를 설정하거나 다른 릴리스 및 디버그 구성의 설정을 변경하는것과 같은 고급 컴파일러 설정을 지정하려는 경우 CMake 생성기 표현식을 사용할 수 있습니다.

14

Page 19: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

예:

set(common_flags "-foo")set(c_flags "-foo-c")set(asm_flags "-foo-asm")target_compile_options( my_compiler_settings INTERFACE $<$<COMPILE_LANGUAGE:C>:${common_flags} ${c_flags}> # This only have effect on C files. $<$<COMPILE_LANGUAGE:ASM>:${common_flags} ${asm_flags}> # This only have effect on ASM files.)

CMake 생성기 표현식은 구성 단계 중 CMake가 목록 파일을 읽을 때 평가되지 않습니다. 생성 단계 중CMake가 목록 파일 읽기를 끝내고 대상 빌드 시스템을 위한 빌드 파일을 생성할 때 평가됩니다.

FreeRTOS 이동식 계층

템플릿 파일의 세 번째 섹션은 FreeRTOS (즉, 라이브러리) 에 대한 모든 이동식 계층 대상을 정의합니다.

를 사용해야 합니다.afr_mcu_port(module_name)함수를 사용하여 구현하려는 각 FreeRTOS 모듈에 대해 이동식 계층 대상을 정의할 수 있습니다.

원하는 모든 CMake 함수를 사용할 수 있습니다.afr_mcu_port호출은 해당 FreeRTOS 모듈을 빌드하는 데필요한 정보를 제공하는 이름의 대상을 생성합니다.

이afr_mcu_port함수는 생성글로벌 인터페이스 가져온 라이브러리 대상를 양식의 이름으로 바꿉니다.AFR::module_name::mcu_port를 선택합니다. GLOBAL 대상은 CMake 목록 파일에서 참조할 수있습니다. 로INTERFACE대상은 독립 실행형 대상 또는 라이브러리로 빌드되지 않지만 해당 FreeRTOS모듈로 컴파일됩니다. IMPORTED 대상 이름에는 대상 이름의 네임스페이스(::)가 포함됩니다(예:AFR::kernel::mcu_port).

해당하는 이동식 계층 대상이 없는 모듈은 기본적으로 비활성화됩니다. 이동식 계층 대상을 정의하지 않고CMake를 실행하여 FreeRTOS 를 구성하면 다음과 같은 결과가 나타납니다.

FreeRTOS modules: Modules to build: Disabled by user: Disabled by dependency: kernel, posix, pkcs11, secure_sockets, mqtt, ...

Available demos: Available tests:

를 업데이트할 때CMakeLists.txt파일에서 해당 FreeRTOS 모듈이 활성화됩니다. 또한 종속성 요구 사항이 계속 충족되는 모든 FreeRTOS 모듈을 빌드할 수 있어야 합니다. 예를 들어, CoreMQTT 라이브러리가 활성화된 경우 유일한 종속성이 CoremQTT 라이브러리이기 때문에 Device Shadow 라이브러리도 활성화됩니다.

Note

FreeRTOS 커널 종속성은 최소한의 요구 사항입니다. FreeRTOS 커널 종속성이 충족되지 않으면CMake 구성이 실패합니다.

커널 이식 대상 설정

커널 이식 대상(AFR::kernel::mcu_port)을 만들려면 모듈 이름이 kernel인 afr_mcu_port를 호출하십시오. afr_mcu_port를 호출할 때 FreeRTOS 이동식 계층 및 드라이버 코드의 대상을 지정하십시오. 대상을 만든 후에는 대상에서 사용할 종속성 정보와 FreeRTOS 이동식 계층 및 드라이버 코드 정보를 제공할수 있습니다.

15

Page 20: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

다음 지침에 따라 커널 이식 대상을 설정합니다.

커널 이식 대상을 설정하려면

1. 드라이버 코드의 대상을 만듭니다.

예를 들어, 드라이버 코드에 대한 STATIC 라이브러리 대상을 만들 수 있습니다.

add_library(my_board_driver STATIC ${driver_sources})

# Use your compiler settingstarget_link_libraries( my_board_driver PRIVATE AFR::compiler::mcu_port# Or use your own target if you already have it.# PRIVATE ${compiler_settings_target})

target_include_directories( my_board_driver PRIVATE "include_dirs_for_private_usage" PUBLIC "include_dirs_for_public_interface")

또는 드라이버 코드에 대한 INTERFACE 라이브러리 대상을 만들 수 있습니다.

# No need to specify compiler settings since kernel target has them.add_library(my_board_driver INTERFACE ${driver_sources})

Note

INTERFACE 라이브러리 대상에는 빌드 출력이 없습니다. INTERFACE 라이브러리 대상을 사용하면 드라이버 코드가 커널 라이브러리로 컴파일됩니다.

2. FreeRTOS 이동식 계층을 구성합니다.

add_library(freertos_port INTERFACE)target_sources( freertos_port INTERFACE "${AFR_MODULES_DIR}/freertos_kernel/portable/GCC/ARM_CM4F/port.c" "${AFR_MODULES_DIR}/freertos_kernel/portable/GCC/ARM_CM4F/portmacro.h" "${AFR_MODULES_DIR}/freertos_kernel/portable/MemMang/heap_4.c")target_include_directories( freertos_port INTERFACE "${AFR_MODULES_DIR}/freertos_kernel/portable/GCC/ARM_CM4F" "${include_path_to_FreeRTOSConfig_h})

Note

또한 이 소스 파일과 포함 디렉터리를 AFR::kernel::mcu_port 대상에 직접 지정하여FreeRTOS 이동식 계층을 구성할 수도 있습니다.

3. 커널 이동식 계층 대상을 만듭니다.

# Bring in driver code and freertos portable layer dependency.afr_mcu_port(kernel DEPENDS my_board_driver freertos_port)

16

Page 21: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

# If you need to specify additional configurations, use standard CMake functions with# AFR::kernel::mcu_port as the target name.target_include_directories( AFR::kernel::mcu_port INTERFACE "${additional_includes}" # e.g. board configuration files)target_link_libraries( AFR::kernel::mcu_port INTERFACE "${additional_dependencies}")

4. 목록 파일과 구성을 테스트하려면 FreeRTOS 커널 포트를 사용하는 간단한 애플리케이션을 작성하면됩니다. CMake를 사용하여 FreeRTOS 응용 프로그램을 개발하고 빌드하는 방법에 대한 자세한 내용은단원을 참조하십시오.CMake를 사용하여 FreeRTOS 빌드 (p. 19)를 선택합니다.

5. 데모를 만든 후 목록 파일에 add_executable 및 target_link_libraries 호출을 추가하고 정적라이브러리로 커널을 컴파일하여 커널 이동식 계층이 올바르게 구성되었는지 확인합니다.

add_executable( my_demo main.c)target_link_libraries( my_demo PRIVATE AFR::kernel)

FreeRTOS 모듈에 대한 이식 대상 설정

커널에 대한 이동식 계층 대상을 추가한 후에는 다른 FreeRTOS 모듈에 대한 이동식 계층 대상을 추가할 수있습니다.

예를 들어, Wi-Fi 모듈에 이동식 계층을 추가하려면 다음을 수행합니다.

afr_mcu_port(wifi)target_sources( AFR::wifi::mcu_port INTERFACE "${AFR_MODULES_DIR}/vendors/vendor/boards/board/ports/wifi/iot_wifi.c")

이 Wi-Fi 모듈 이동식 계층 예제에는 드라이버 코드를 기반으로 하는 구현 파일이 하나만 있습니다.

FreeRTOS 보안 소켓 모듈에 이동식 계층을 추가하려는 경우 모듈은 TLS에 따라 달라집니다. 따라서 해당이동식 계층 대상이 Wi-Fi 모듈보다 약간 더 복잡하게 됩니다. FreeRTOS 는 연결할 수 있는 mbedTLS 기반으로 기본 TLS 구현을 제공합니다.

afr_mcu_port(secure_sockets)target_sources( AFR::secure_sockets::mcu_port INTERFACE ${portable_layer_sources})target_link_libraries( AFR::secure_sockets::mcu_port AFR::tls)

이 예제 코드에서 표준 CMake 함수 target_link_libraries는 보안 소켓 이동식 계층이 AFR::tls에종속되어 있음을 나타냅니다.

17

Page 22: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

대상 이름을 사용하여 모든 FreeRTOS 모듈을 참조할 수 있습니다.AFR::module_name를 선택합니다. 예를 들어, FreeRTOS-Plus-TCP에 대한 종속성을 기술하기 위해 동일한 구문을 사용할 수도 있습니다.

target_link_libraries( AFR::secure_sockets::mcu_port AFR::freertos_plus_tcp AFR::tls)

Note

플랫폼이 TLS만 처리하는 경우 드라이버 코드를 직접 사용할 수 있습니다. 드라이버 코드를 TLS에 직접 사용하면 를 호출할 필요가 없습니다.target_link_libraries입니다. 그 이유는 모든FreeRTOS 모듈이 드라이버 코드가 포함된 커널에 암시적으로 종속되기 때문입니다.모든 비 커널 FreeRTOS 모듈은 암시적으로 커널에 종속되기 때문에, 해당 이식 계층에 대해 커널을 종속성으로 지정할 필요가 없습니다. 그러나 POSIX 모듈은 선택적 커널 모듈로 정의됩니다.POSIX를 사용하려면 명시적으로 커널 이동식 계층에 포함시켜야 합니다. 예:

# By default, AFR::posix target does not expose standard POSIX headers in its public# interface, i.e., You need to use "freertos_plus_posix/source/FreeRTOS_POSIX_pthread.c" instead of "pthread.h".# Link to AFR::use_posix instead if you need to use those headers directly.target_link_libraries( AFR::kernel::mcu_port INTERFACE AFR::use_posix)

FreeRTOS 데모 및 테스트템플릿 파일의 마지막 섹션에서는 FreeRTOS 데모 및 테스트 대상을 정의합니다. 종속성 요구 사항을 만족하는 각 데모 및 테스트에 대해 CMake 대상이 자동으로 만들어집니다.

이 섹션에서는 add_executable 함수를 사용하여 실행 가능 대상을 정의합니다. 테스트를 컴파일하는 경우 대상 이름으로 aws_tests를 사용하거나 데모를 컴파일하는 경우 aws_demos를 사용하십시오. 링커 스크립트 및 빌드 후 명령과 같은 다른 프로젝트 설정을 제공해야 할 수도 있습니다. 예:

if(AFR_IS_TESTING) set(exe_target aws_tests)else() set(exe_target aws_demos)endif()

set(CMAKE_EXECUTABLE_SUFFIX ".elf")add_executable(${exe_target} "${board_dir}/application_code/main.c")

그런 다음 target_link_libraries를 호출하여 사용 가능한 CMake 데모 또는 테스트 대상을 실행 가능한 대상에 연결합니다.

Note

데모 및 테스트를 활성화하려면 여전히 aws_demos/config_files/aws_demo_config.h 및aws_tests/config_files/aws_test_runner_config.h를 수정해야 합니다.

빌드 후 명령 실행

빌드 후 명령 실행에 대한 자세한 내용은 add_custom_command를 참조하십시오. 두 번째 서명을 사용합니다. 예:

# This should run an external command "command --arg1 --arg2".

18

Page 23: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

add_custom_command( TARGET ${exe_target} POST_BUILD COMMAND "command" "--arg1" "--arg2")

Note

CMake는 디렉터리를 만들고 파일을 복사하는 등 플랫폼에 독립적인 많은 공통 작업을 지원합니다.CMake 명령줄 작업에 대한 자세한 내용은 CMake command-line tool reference를 참조하십시오.기본 제공 변수 ${CMAKE_COMMAND}를 사용하여 CMake 목록 파일에서 CMake 명령줄 도구를 참조할 수 있습니다.

CMake를 사용하여 FreeRTOS 빌드CMake는 기본적으로 호스트 운영 체제를 대상 시스템으로 사용합니다. 교차 컴파일에 CMake를 사용하려면 사용할 컴파일러를 지정하는 도구 체인 파일을 제공해야 합니다. FreeRTOS 는 몇 가지 기본 도구 체인 파일을freertos/tools/cmake/toolchains를 선택합니다. 도구 체인 파일 사용에 대한 지침은 CMake 명령줄 인터페이스를 사용하는지 또는 GUI를 사용하는지에 따라 다릅니다. 빌드 파일 생성(CMake 명령줄 도구) (p. 19)에서 자세한 내용을 확인할 수 있습니다. CMake의 교차 컴파일에 대해 자세히 알아보려면 공식 CMake Wiki의 Cross Compiling을 참조하십시오.

CMake 기반의 프로젝트를 빌드하려면

1. CMake를 실행하여 Make 또는 Ninja와 같은 네이티브 빌드 시스템용 빌드 파일을 생성합니다.

CMake 명령줄 도구 또는 CMake GUI를 사용하여 네이티브 빌드 시스템용 빌드 파일을 생성할 수 있습니다.

FreeRTOS 빌드 파일 생성에 대한 자세한 내용은 단원을 참조하십시오.빌드 파일 생성(CMake 명령줄도구) (p. 19)및빌드 파일 생성(CMake GUI) (p. 20)를 선택합니다.

2. 네이티브 빌드 시스템을 호출하여 프로젝트를 실행 파일로 만듭니다.

FreeRTOS 빌드 파일에 대한 자세한 내용은 단원을 참조하십시오.생성된 빌드 파일에서 FreeRTOS 빌드 (p. 23)를 선택합니다.

빌드 파일 생성(CMake 명령줄 도구)CMake 명령줄 도구 (cmake) 를 사용하여 명령줄에서 FreeRTOS 용 빌드 파일을 생성할 수 있습니다.

빌드 파일을 생성하려면 대상 보드, 컴파일러, 소스 코드와 빌드 디렉터리의 위치를 지정해야 합니다. 를 사용하여 대상 보드를 지정합니다.-DVENDOR옵션을 선택합니다. -DCOMPILER 옵션을 사용하여 컴파일러를지정합니다. -S 스위치를 사용하여 소스 코드의 위치를 지정하고 -B 스위치를 사용하여 생성된 빌드 파일의위치를 지정합니다.

Note

컴파일러는 시스템의 PATH 변수에 있어야 하며, 그렇지 않은 경우 컴파일러의 위치를 지정해야 합니다.

예를 들어, 공급업체가 Texas Instruments이고 보드가 CC3220 Launchpad이며 컴파일러가 ARM용 GCC인경우, 다음 명령을 실행하여 현재 디렉터리에 있는 소스 파일을 build-directory라는 디렉터리로 빌드할수 있습니다.

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build-directory

Note

Windows를 사용하는 경우 CMake가 기본적으로 Visual Studio를 사용하기 때문에 네이티브 빌드시스템을 지정해야 합니다. 예:

19

Page 24: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build-directory -G Ninja

Or:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build-directory -G "MinGW Makefiles"

정규 표현식 ${VENDOR}.* 및 ${BOARD}.*는 일치하는 보드를 검색하는 데 사용되므로 VENDOR 및 BOARD옵션에 대해 공급업체 및 보드의 전체 이름을 사용할 필요가 없습니다. 일치하는 항목이 하나만 있는 경우 이름의 일부만 사용해도 됩니다. 예를 들어, 다음 명령은 동일한 소스에서 동일한 빌드 파일을 생성합니다.

cmake -DVENDOR=ti -DCOMPILER=arm-ti -S . -B build-directory

cmake -DBOARD=cc3220 -DCOMPILER=arm-ti -S . -B build-directory

cmake -DVENDOR=t -DBOARD=cc -DCOMPILER=arm-ti -S . -B build-directory

기본 디렉터리 cmake/toolchains에 없는 도구 체인 파일을 사용하려면 CMAKE_TOOLCHAIN_FILE 옵션을 사용할 수 있습니다. 예:

cmake -DBOARD=cc3220 -DCMAKE_TOOLCHAIN_FILE='/path/to/toolchain_file.cmake' -S . -B build-directory

도구 체인 파일이 컴파일러에 대한 절대 경로를 사용하지 않고 컴파일러를 PATH 환경 변수에 추가하지 않은 경우 CMake가 해당 경로를 찾을 수 없습니다. CMake가 도구 체인 파일을 찾을 수 있게 하려면AFR_TOOLCHAIN_PATH 옵션을 사용합니다. 이 옵션은 bin 아래에서 지정된 도구 체인 디렉터리 경로와 도구 체인의 하위 폴더를 검색합니다. 예:

cmake -DBOARD=cc3220 -DCMAKE_TOOLCHAIN_FILE='/path/to/toolchain_file.cmake' -DAFR_TOOLCHAIN_PATH='/path/to/toolchain/' -S . -B build-directory

디버깅을 활성화하려면 CMAKE_BUILD_TYPE을 debug로 설정합니다. 이 옵션을 활성화한 경우 CMake는디버그 플래그를 컴파일 옵션에 추가하고 디버그 기호로 FreeRTOS 를 빌드합니다.

# Build with debug symbolscmake -DBOARD=cc3220 -DCOMPILER=arm-ti -DCMAKE_BUILD_TYPE=debug -S . -B build-directory

CMAKE_BUILD_TYPE을 release로 설정하여 컴파일 옵션에 최적화 플래그를 추가할 수도 있습니다.

빌드 파일 생성(CMake GUI)

CMake GUI를 사용하여 FreeRTOS 빌드 파일을 생성할 수 있습니다.

CMake GUI를 사용하여 빌드 파일을 생성하려면

1. 명령줄에서 cmake-gui를 실행하여 GUI를 시작합니다.2. Browse Source(소스 찾아보기)를 선택하고 소스 입력을 지정한 다음 Browse Build(빌드 찾아보기)를 선

택하고 빌드 출력을 지정합니다.

20

Page 25: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

3. 구성을 선택하고 Specify the build generator for this project(이 프로젝트에 대한 빌드 생성기 지정)에서생성된 빌드 파일을 빌드하는 데 사용할 빌드 시스템을 찾아서 선택합니다.

Note

팝업 창이 보이지 않으면 기존 빌드 디렉터리를 재사용하는 것일 수 있습니다. 이 경우 먼저 메뉴에서 File(파일)->Delete Cache(캐시 삭제)를 클릭하여 CMake 캐시를 삭제합니다.

4. Specify toolchain file for cross-compiling(교차 컴파일을 위한 도구 체인 파일 지정)을 선택하고 다음을선택합니다.

5. 도구 체인 파일(예: freertos/tools/cmake/toolchains/arm-ti.cmake)을 선택하고 완료를 선택합니다.

FreeRTOS 의 기본 구성은 이동식 계층 대상을 제공하지 않는 템플릿 보드입니다. 결과적으로 Error inconfiguration process(구성 프로세스 중 오류) 메시지가 있는 창이 나타납니다.

Note

다음과 같은 오류 메시지가 나타나는 경우

CMake Error at tools/cmake/toolchains/find_compiler.cmake:23 (message):

21

Page 26: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

Compiler not found, you can specify search path with "AFR_TOOLCHAIN_PATH".

컴파일러가 환경 변수 PATH에 없는 것입니다. GUI에서 AFR_TOOLCHAIN_PATH 변수를 설정하여 컴퓨터를 설치한 위치를 CMake에 알립니다. AFR_TOOLCHAIN_PATH 변수가 보이지 않으면팝업 창에서 Add Entry(항목 추가) 버튼을 클릭하고, AFR_TOOLCHAIN_PATH를name(이름)으로 입력한 다음, PATH를 type(유형)으로 선택하고, value(값)에 컴파일러 경로를입력합니다(예: "C:/toolchains/arm-none-eabi-gcc").

6. GUI는 이제 다음과 같아야 합니다.

AFR_BOARD를 선택하고 보드를 선택한 다음 구성을 다시 선택합니다.7. 생성을 선택합니다. CMake는 빌드 시스템 파일(예: makefiles 또는 ninja 파일)을 생성하며, 이러한 파일

은 첫 번째 단계에서 지정한 빌드 디렉터리에 나타납니다. 다음 단원의 지침에 따라 이진 이미지를 생성합니다.

22

Page 27: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서CMake 목록 파일 생성

생성된 빌드 파일에서 FreeRTOS 빌드

출력 바이너리 디렉터리에서 빌드 시스템 명령을 호출하여 네이티브 빌드 시스템으로 FreeRTOS 를 빌드할 수 있습니다. 예를 들어, 빌드 파일 출력 디렉터리가 build-directory이고 네이티브 빌드 시스템으로Make를 사용하는 경우 다음 명령을 실행하세요.

cd build-directory make -j4

CMake 명령줄 도구를 사용하여 FreeRTOS 를 빌드할 수도 있습니다. CMake는 네이티브 빌드 시스템을 호출하기 위한 추상 계층을 제공합니다. 예:

cmake --build build-directory

다음은 CMake 명령줄 도구의 빌드 모드를 사용하는 몇 가지 일반적인 사례입니다.

# Take advantage of CPU cores.cmake --build build-directory --parallel 8

# Build specific targets.cmake --build build-directory --target afr_kernel

# Clean first, then build.cmake --build build-directory --clean-first

CMake 빌드 모드에 대한 자세한 내용은 CMake 설명서를 참조하십시오.

23

Page 28: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서

FreeRTOS 라이브러리 이식이식을 시작하기 전에 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8)의 지침을 따르십시오.

디바이스에 FreeRTOS 를 이식하려면 아래 주제의 지침을 따르십시오.

1. configPRINT_STRING() 매크로 구현 (p. 27)2. FreeRTOS 커널 포트 구성 (p. 28)3. Wi-Fi 라이브러리 이식 (p. 29)

Note

디바이스가 Wi-Fi를 지원하지 않는 경우 대신 이더넷 연결을 사용하여 AWS 클라우드에 연결할수 있습니다. FreeRTOS Wi-Fi 라이브러리의 포트가 필요하지 않는 경우도 있습니다.

4. TCP/IP 스택 이식 (p. 35)5. 보안 소켓 라이브러리 이식 (p. 39)6. 코드KCS11 라이브러리 포팅하기 (p. 47)7. TLS 라이브러리 이식 (p. 51)8. 테스트용 CoreMQTT 라이브러리 구성 (p. 69)9. 테스트용 CoreHTTP 라이브러리 구성 (p. 70)10.OTA 라이브러리 이식 (p. 71)

Note

현재 FreeRTOS OTA 업데이트 라이브러리의 포트는 검증에 필요하지 않습니다.11.Bluetooth Low Energy 라이브러리 이식 (p. 78)

Note

현재 FreeRTOS Bluetooth Low Energy 라이브러리의 포트는 검증에 필요하지 않습니다.12.Bluetooth 저에너지를 사용하여 무선 업데이트 수행 (p. 82)

Note

현재 AWS IoT Device Tester는 Bluetooth Low Energy 라이브러리를 사용하여 Over of Air 업데이트의 검증에 대해 지원하지 않습니다. 이 자격에 관심이 있는 파트너는 APN (AWS 파트너 네트워크) 팀을 통해 AWS에 문의해야 합니다.

13.공통 I/O 라이브러리 포팅 (p. 91)

Note

현재 FreeRTOS 공통 I/O 라이브러리의 포트는 검증에 필요하지 않습니다.14.셀룰러 라이브러리 포팅 (p. 100)

Note

현재 FreeRTOS 셀룰러 라이브러리의 포트는 검증에 필요하지 않습니다.

보드에 FreeRTOS 를 이식한 후에는 FreeRTOS 포트의 유효성을 검사할 수 있습니다. FreeRTOS AWS IoTDevice Tester에 대한 자세한 내용은 단원을 참조하십시오.AWS IoT Device Tester를 사용하여FreeRTOS사용 설명서를 참조하십시오.

24

Page 29: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서이식 흐름 차트

Note

FreeRTOS 를 사용하여 FreeRTOS 포트를 검증하기 전에 테스트 목적으로 코드에 삽입한 모든 로깅 메시지를 제거해야 합니다. 그렇지 않으면 검증에 실패할 수 있습니다.

디바이스에 FreeRTOS 검증에 대한 자세한 내용은FreeRTOS 검증 안내서를 선택합니다.

FreeRTOS 이식 흐름 차트디바이스에 FreeRTOS 를 이식할 때 아래의 흐름 차트를 참조하십시오.

25

Page 30: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서이식 흐름 차트

26

Page 31: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서configPRINT_STRING()

configPRINT_STRING() 매크로 구현구현해야 합니다.configPRINT_STRING()매크로를 사용하여 FreeRTOS 라이브러리를 포팅할 수 있습니다. FreeRTOSconfigPRINT_STRING()테스트 결과를 사람이 읽을 수 있는 ASCII 문자열로 출력합니다.

PrerequisitesconfigPRINT_STRING() 매크로를 구현하려면 다음이 필요합니다.

• UART 또는 가상 COM 포트 출력을 지원하는 개발 보드• 해당 플랫폼에 맞게 구성된 FreeRTOS 프로젝트와 이식 테스트 IDE 프로젝트

자세한 정보는 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 단원을 참조하십시오.

ImplementationconfigPRINT_STRING()을 구현하려면

1. 디바이스를 터미널 에뮬레이터에 연결하여 테스트 결과를 출력합니다.2. freertos/vendors/vendor/boards/board/aws_tests/application_code/main.c 파일을

열고 prvMiscInitialization() 함수에서 configPRINT_STRING("Test Message")에 대한 호출을 찾습니다.

3. configPRINT_STRING("Test Message") 호출 직전에 공급업체가 제공한 UART 드라이버를 사용하여 UART 전송 속도를 115200으로 초기화하는 코드를 추가합니다.

4. freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSConfig.h를 열고 configPRINT_STRING()의 빈 정의를 찾습니다. 매크로는 NULL로 끝나는 ASCII C 문자열을 유일한 파라미터로 사용합니다.

5. 공급업체가 제공한 UART 출력 함수를 호출하도록 configPRINT_STRING()의 빈 정의를 업데이트합니다.

예를 들어, UART 출력 함수의 프로토타입이 다음과 같다고 가정합니다.

void MyUARTOutput( char *DataToOutput, size_t LengthToOutput );

configPRINT_STRING()을 다음과 같이 구현합니다.

#define configPRINT_STRING( X ) MyUARTOutput( (X), strlen( (X) ) )

Testing테스트 데모 프로젝트를 빌드 및 실행합니다. Test Message가 UART 콘솔에 나타나면 콘솔이 올바르게 연결 및 구성되고 configPRINT_STRING()이 올바르게 작동하며 테스트가 완료됩니다.prvMiscInitialization()에서 configPRINT_STRING("Test Message")에 대한 호출을 제거할 수있습니다.

configPRINT_STRING() 매크로를 구현한 후에는 디바이스의 FreeRTOS 커널 포트 구성을 시작할 수 있습니다. 자세한 내용은 FreeRTOS 커널 포트 구성 (p. 28) 단원을 참조하십시오.

27

Page 32: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서FreeRTOS 커널

FreeRTOS 커널 포트 구성이 섹션에서는 FreeRTOS 커널의 포트를 FreeRTOS 포트 테스트 프로젝트에 통합하는 방법을 설명합니다.사용 가능한 커널 포트 목록은 FreeRTOS 커널 포트를 참조하십시오.

는 멀티태스킹 및 작업 간 통신에 FreeRTOS 커널을 사용합니다. 자세한 내용은 단원을 참조하십시오.FreeRTOS 커널 기초의 FreeRTOS 사용자 가이드 및분류: 프리어토스주를 선택합니다.

Note

FreeRTOS 커널을 새로운 아키텍처로 이식하는 작업은 이 설명서에서 다루지 않습니다.FreeRTOS 커널을 새로운 아키텍처로 이식하려면FreeRTOS 엔지니어링 팀에 문의를 선택합니다.FreeRTOS 검증 프로그램의 경우 기존 포트만 지원됩니다. 이러한 포트에 대한 수정은 검증 프로그램 내에서 허용되지 않습니다. Github 또는 Sourceforge에서 다운로드할 수 있는 공식 포트만 허용됩니다.

Prerequisites이식을 위해 FreeRTOS 커널을 설정하려면 다음이 필요합니다.

• 대상 플랫폼에 대한 공식 FreeRTOS 커널 포트• 대상 플랫폼 및 컴파일러에 대한 올바른 FreeRTOS 커널 포트 파일을 포함하는 IDE 프로젝트 또는CMakeLists.txt 목록 파일

테스트 프로젝트 설정에 대한 자세한 내용은 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 단원을 참조하십시오.

• 디바이스를 위한 configPRINT_STRING() 매크로 구현입니다.

configPRINT_STRING() 구현에 대한 정보는 configPRINT_STRING() 매크로 구현 (p. 27) 단원을참조합니다.

FreeRTOS 커널 구성헤더 파일 freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSConfig.h는 FreeRTOS 커널에 대한 애플리케이션별 구성 설정을 지정합니다. 각 구성 옵션에대한 설명은 FreeRTOS.org의 Customisation을 참조하십시오.

FreeRTOS 커널이 디바이스에서 작동하도록 구성하려면 FreeRTOSConfig.h를 열고 다음 표의 구성 옵션이 해당 플랫폼에 대해 올바르게 지정되어 있는지 확인합니다.

구성 옵션 설명

configCPU_CLOCK_HZ 틱 인터럽트를 생성하는 데 사용되는 클럭의 주파수를 지정합니다.

configMINIMAL_STACK_SIZE 최소 스택 크기를 지정합니다. 먼저 사용 중인FreeRTOS 커널 포트에 대해 공식 FreeRTOS데모에서 사용하는 값으로 설정할 수 있습니다. 공식 FreeRTOS 데모는 FreeRTOS.org웹 사이트에서 배포합니다. 스택 오버플로검사가 2로 설정되고 오버플로가 발생할 때configMINIMAL_STACK_SIZE가 증가하는지 확인합니다. RAM을 절약하려면 스택 오버플로가 발생하지 않는 최소값으로 스택 크기를 설정하십시오.

28

Page 33: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

구성 옵션 설명

configTOTAL_HEAP_SIZE FreeRTOS 힙의 크기를 설정합니다. 작업 스택 크기와 마찬가지로 사용되지 않는 힙 공간이 RAM을 소비하지 않도록 힙 크기를 조정할 수 있습니다.

Note

ARM Cortex-M3, M4 또는 M7 디바이스를 이식하는 경우 configPRIO_BITS 및configMAX_SYSCALL_INTERRUPT_PRIORITY도 올바르게 지정해야 합니다.

Testing1. /libraries/freertos_plus/standard/utils/src/iot_system_init.c를 열고

SYSTEM_Init() 함수 내에서 SOCKETS_Init()를 호출하는 행을 주석으로 처리합니다. 이 초기화 함수는 아직 포팅하지 않은 라이브러리에 속합니다. 이 라이브러리의 포팅 섹션에는 이 함수의 주석 처리를 해제하는 지침이 포함되어 있습니다.

2. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.3. 5초마다 UART 콘솔에 "."이 표시되면 FreeRTOS 커널이 올바르게 구성되고 테스트가 완료된 것입니

다.

freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSConfig.h를 열고 configUSE_IDLE_HOOK를 0으로 설정하여 실행 중인vApplicationIdleHook() 및 출력 중인 "."에서 커널을 중지하도록 합니다.

4. 5초 이외의 다른 빈도로 "."이 표시되면 FreeRTOSConfig.h를 열어 configCPU_CLOCK_HZ가 보드의 올바른 값으로 설정되어 있는지 확인하십시오.

디바이스에 대한 FreeRTOS 커널 포트를 구성한 후 Wi-Fi 라이브러리 이식을 시작할 수 있습니다. 자세한 내용은 Wi-Fi 라이브러리 이식 (p. 29) 단원을 참조하십시오.

Wi-Fi 라이브러리 이식FreeRTOS Wi-Fi 라이브러리는 공급업체에서 제공하는 Wi-Fi 드라이버와 인터페이스합니다. FreeRTOS Wi-Fi 라이브러리에 대한 자세한 내용은 단원을 참조하십시오.프리르토스 Wi-Fi 라이브러리(출처: 사용 설명서).

디바이스가 Wi-Fi 네트워킹을 지원하지 않는 경우 FreeRTOS Wi-Fi 라이브러리 이식에 건너뛰고 단원을 시작할 수 있습니다.TCP/IP 스택 이식 (p. 35)를 선택합니다.

Note

검증을 위해서는 디바이스가 AWS 클라우드에 연결되어야 합니다. 디바이스가 Wi-Fi를 지원하지 않는 경우 대신 이더넷 연결을 사용합니다. FreeRTOS Wi-Fi 라이브러리의 포트가 필요하지 않는 경우도 있습니다.

PrerequisitesWi-Fi 라이브러리를 이식하려면 다음이 필요합니다.

• 공급업체에서 제공하는 Wi-Fi 드라이버가 포함된 IDE 프로젝트 또는 CMakeLists.txt 목록 파일.

테스트 프로젝트 설정에 대한 자세한 내용은 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 단원을 참조하십시오.

• FreeRTOS 커널의 검증된 구성.

29

Page 34: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Porting

플랫폼에 맞는 FreeRTOS 커널 구성에 대한 정보는 FreeRTOS 커널 포트 구성 (p. 28) 단원을 참조하십시오.

• 두 개의 무선 액세스 포인트

Portingfreertos/vendors/vendor/boards/board/ports/wifi/iot_wifi.c에는 Wi-Fi 관리 함수 집합에대한 빈 정의가 포함되어 있습니다. 공급업체에서 제공하는 Wi-Fi 드라이버 라이브러리를 사용하여 다음 표에 나열된 함수 세트를 구현하십시오.

기능 설명

WIFI_On Wi-Fi 모듈을 켜고 드라이버를 초기화합니다.

WIFI_ConnectAP Wi-Fi 액세스 포인트(AP)에 연결합니다.

WIFI_Disconnect AP 연결을 해제합니다.

WIFI_Scan Wi-Fi 네트워크 검색을 수행합니다.

WIFI_GetIP Wi-Fi 인터페이스의 IP 주소를 검색합니다.

WIFI_GetMAC Wi-Fi 인터페이스의 MAC 주소를 검색합니다.

WIFI_GetHostIP DNS를 사용하여 호스트 이름에서 호스트 IP 주소를검색합니다.

freertos/libraries/abstractions/wifi/include/iot_wifi.h에는 이러한 함수를 구현하는 데필요한 정보가 포함되어 있습니다.

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 복사본을 생성하지 마십시오.

IDE 프로젝트에서 Wi-Fi 라이브러리를 설정하려면

1. 소스 파일 freertos/vendors/vendor/boards/board/ports/wifi/iot_wifi.c를aws_tests IDE 프로젝트에 추가합니다.

2. 소스 파일 aws_test_wifi.c를 aws_tests IDE 프로젝트에 추가합니다.

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

30

Page 35: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

Wi-Fi 라이브러리의 이동식 계층 대상 정의에 대한 예제는 다음을 참조하십시오.

# WiFiafr_mcu_port(wifi)target_sources( AFR::wifi::mcu_port INTERFACE "freertos/vendors/vendor/boards/board/ports/wifi/iot_wifi.c")

로컬 테스트 환경 설정IDE 프로젝트에서 라이브러리를 설정한 후, 테스트용 기타 몇 가지 파일을 구성해야 합니다.

Wi-Fi 테스트를 위한 소스 및 헤더 파일을 구성하려면

1. freertos/vendors/vendor/boards/board/aws_tests/application_code/main.c를 열고vApplicationDaemonTaskStartupHook(void) 및 prvWifiConnect(void)의 함수 정의에서#if 0 및 #endif 컴파일러 지시문을 삭제합니다.

2. Secure Sockets 라이브러리를 포팅하지 않은 경우 freertos/libraries/freertos_plus/standard/utils/src/iot_system_init.c를 열고 SOCKETS_Init()를 호출하는 행을 주석으로처리합니다. 보안 소켓 라이브러리 이식 (p. 39) 섹션에 도달하면 이 초기화 함수 호출의 주석 처리를해제하라는 메시지가 표시됩니다.

3. freertos/tests/include/aws_clientcredential.h를 열고 첫 번째 AP에 대해 다음 표의 매크로를 설정합니다.

매크로 값

clientcredentialWIFI_SSID C 문자열로 표시된 Wi-Fi SSID(따옴표로 묶음)

clientcredentialWIFI_PASSWORD C 문자열로 표시된 Wi-Fi 암호(따옴표로 묶음)

clientcredentialWIFI_SECURITY 다음 중 하나입니다.

• eWiFiSecurityOpen

• eWiFiSecurityWEP

• eWiFiSecurityWPA

• eWiFiSecurityWPA2

eWiFiSecurityWPA2가 권장됩니다.

4. freertos/libraries/abstractions/wifi/test/aws_test_wifi.h를 열고 두 번째 AP에 대해 다음 표의 매크로를 설정합니다.

매크로 값

testWIFI_SSID C 문자열로 표시된 Wi-Fi SSID(따옴표로 묶음)

testWIFI_PASSWORD C 문자열로 표시된 Wi-Fi 암호(따옴표로 묶음)

31

Page 36: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

매크로 값

testWIFI_SECURITY 다음 중 하나입니다.

• eWiFiSecurityOpen

• eWiFiSecurityWEP

• eWiFiSecurityWPA

• eWiFiSecurityWPA2

eWiFiSecurityWPA2가 권장됩니다.

5. Wi-Fi 테스트를 활성화하려면 freertos/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h를 열고 testrunnerFULL_WIFI_ENABLED를 1로설정합니다.

Important

다음 테스트에는 보안 소켓 라이브러리의 포트와 실행 중인 에코 서버가 필요합니다.

• WiFiConnectionLoop

• WiFiIsConnected

• WiFiConnectMultipleAP

보안 소켓 라이브러리를 이식하고 에코 서버를 시작해야 이 테스트를 통과할 수 있습니다. 보안소켓 라이브러리를 이식하고 에코 서버를 시작한 후 Wi-Fi 테스트를 다시 실행하여 모든 테스트가 통과하는지 확인하십시오. 보안 소켓 라이브러리 이식에 대한 자세한 내용은 보안 소켓 라이브러리 이식 (p. 39) 단원을 참조하십시오. 에코 서버 설정에 대한 자세한 내용은 에코 서버설정 (p. 44) 단원을 참조하십시오.

테스트 실행Wi-Fi 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다.

32

Page 37: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

...

33

Page 38: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

Validation용 디바이스를 공식적으로 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된 소스 코드를 검증해야 합니다. 의 지침을 따르십시오.AWS IoT Device Tester를 FreeRTOS에 사용를 클릭하여 포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Testerconfigs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

34

Page 39: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서TCP/IP

FreeRTOS Wi-Fi 라이브러리를 디바이스로 이식한 후 TCP/IP 스택 이식에 시작할 수 있습니다. 자세한 내용은 TCP/IP 스택 이식 (p. 35) 단원을 참조하십시오.

TCP/IP 스택 이식FreeRTOS는 온칩 TCP/IP 기능이 없는 보드에 TCP/IP 스택을 제공합니다. 플랫폼이 TCP/IP 기능을 별도의 네트워크 프로세서 또는 모듈로 오프로드하는 경우 이 이식 단원을 건너뛰고 보안 소켓 라이브러리 이식 (p. 39) 단원을 시작할 수 있습니다.

FreeRTOS+TCP는 FreeRTOS 커널의 네이티브 TCP/IP 스택입니다. FreeRTOS+TCP는 FreeRTOS에서유지 관리하며 FreeRTOS와 함께 사용하기 위해 권장되는 TCP/IP 스택입니다. 자세한 내용은 FreeRTOS+TCP 이식 (p. 35) 단원을 참조하세요.

경량 IP(lwIP) TCP/IP 스택은 FreeRTOS 커널에 이식된 타사의 오픈 소스 TCP/IP 스택입니다. lwip 포트 계층은 현재 lwip 버전 2.1.2를 지원합니다. 자세한 내용은 lwIP 이식 (p. 38) 단원을 참조하세요.

Note

이 이식 단원에서는 플랫폼의 이더넷 또는 Wi-Fi 드라이버로 이식하는 방법에 대해서만 설명합니다.이 테스트는 이더넷 또는 Wi-Fi 드라이버가 네트워크에 연결할 수 있는지만 확인합니다. 보안 소켓라이브러리를 이식할 때까지 네트워크를 통해 데이터 송수신을 테스트할 수 없습니다.

FreeRTOS+TCP 이식FreeRTOS+TCP는 FreeRTOS 커널의 네이티브 TCP/IP 스택입니다. 자세한 내용은 FreeRTOS.org를 참조하십시오.

PrerequisitesFreeRTOS+TCP 라이브러리를 이식하려면 다음이 필요합니다.

• 공급업체에서 제공하는 이더넷 또는 Wi-Fi 드라이버가 포함된 IDE 프로젝트 또는 CMakeLists.txt 목록파일.

테스트 프로젝트 설정에 대한 자세한 내용은 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 단원을 참조하십시오.

• FreeRTOS 커널의 검증된 구성.

플랫폼에 맞는 FreeRTOS 커널 구성에 대한 정보는 FreeRTOS 커널 포트 구성 (p. 28) 단원을 참조하십시오.

PortingFreeRTOS-TCP 라이브러리 포팅을 시작하기 전에 freertos/libraries/freertos_plus/standard/freertos_plus_tcp/portable/NetworkInterface 디렉터리를 확인하여 디바이스에 대한 포트가 이미 존재하는지 확인합니다.

포트가 존재하지 않으면 다음을 수행하십시오.

1. FreeRTOS+TCP를 디바이스에 이식하는 방법은 FreeRTOS.org의 Porting FreeRTOS+TCP to aDifferent Microcontroller를 참조하십시오.

2. 필요한 경우 FreeRTOS+TCP를 새 컴파일러에 이식하는 방법은 FreeRTOS.org의 Porting FreeRTOS+TCP to a New Embedded C Compiler를 참조하십시오.

35

Page 40: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서FreeRTOS+TCP 이식

3. NetworkInterface.c 파일에서 공급업체가 제공한 이더넷 또는 Wi-Fi 드라이버를 사용하는 새포트를 구현하고 freertos/libraries/freertos_plus/standard/freertos_plus_tcp/portable/NetworkInterface/board_family에 파일을 저장합니다.

Note

freertos/libraries/freertos_plus/standard/freertos_plus_tcp/portable/BufferManagement 디렉터리의 파일은 여러 포트에서 사용됩니다. 이 디렉터리의 파일은 편집하지 마십시오.

포트를 생성한 후 또는 포트가 이미 있는 경우 freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h를 열고 사용 중인 플랫폼에 맞게 구성 옵션을 편집합니다. 구성 옵션에 대한 자세한 내용은 FreeRTOS.org의 FreeRTOS+TCP Configuration을 참조하십시오.

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정

이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 FreeRTOS+TCP 라이브러리를 설정하려면

1. freertos/libraries/freertos_plus/standard/freertos_plus_tcp 및 해당 하위 디렉터리에 있는 모든 소스 및 헤더 파일을 aws_tests IDE 프로젝트에 추가합니다.

Note

FreeRTOS는 freertos/freertos_kernel/portable/MemMang에 5가지 예제 힙 관리 구현을 포함합니다. FreeRTOS+TCP 및 BufferAllocation_2.c에는 heap_4.c 또는heap_5.c 구현이 필요합니다. 를 사용해야 합니다.heap_4.c또는heap_5.cFreeRTOS 데모애플리케이션이 제대로 실행되도록 합니다. 사용자 지정 힙 구현을 사용하지 마십시오.

2. freertos/libraries/freertos_plus/standard/freertos_plus_tcp/include를 컴파일러의 포함 경로에 추가합니다.

CMakeLists.txt 파일 구성

CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

로컬 테스트 환경 설정

IDE 프로젝트에서 라이브러리를 설정한 후, 테스트용 기타 몇 가지 파일을 구성해야 합니다.

36

Page 41: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서FreeRTOS+TCP 이식

TCP 테스트를 위한 소스 및 헤더 파일을 구성하려면

1. Secure Sockets 라이브러리를 포팅하지 않은 경우 freertos/libraries/freertos_plus/standard/utils/src/iot_system_init.c를 열고 SYSTEM_Init() 함수에서SOCKETS_Init()를 호출하는 행을 주석 처리합니다. 보안 소켓 라이브러리 이식 (p. 39) 섹션에 도달하면 이 초기화 함수 호출의 주석 처리를 해제하라는 메시지가 표시됩니다.

2. freertos/vendors/vendor/boards/board/aws_tests/application_code/main.c를 열고FreeRTOS_IPInit()에 대한 호출의 주석 처리를 해제합니다.

3. 네트워크에 대한 유효한 값으로 다음 배열을 채웁니다.

변수 설명

uint8_t ucMACAddress[ 6 ] 기본 MAC 주소 구성

uint8_t ucIPAddress[ 4 ] 기본 IP 주소 구성

Note

기본적으로 IP 주소는 DHCP에 의해 획득됩니다. DHCP가 실패하거나 DHCP를사용하지 않으려는 경우 여기에 정의된고정 IP 주소가 사용됩니다.DHCP를 사용하지 않도록 설정하려면freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h를 설정하고ipconfigUSE_DHCP아래로 변경합니다.0를 선택합니다. 데모에대해서는ipconfigUSE_DHCP에서 정의한 경우freertos/vendors/vendor/boards/board/aws_demos/config_files/FreeRTOSIPConfig.h를 선택합니다.

uint8_t ucNetMask[ 4 ] 기본 넷 마스크 구성

uint8_t ucGatewayAddress[ 4 ] 기본 게이트웨이 주소 구성

uint8_t ucDNSServerAddress[ 4 ] 기본 DNS 서버 주소 구성

4. freertos/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h를 열고 ipconfigUSE_NETWORK_EVENT_HOOK 매크로를 1로 설정합니다.

5. freertos/vendors/vendor/boards/board/aws_tests/application_code/main.c를 열고vApplicationIPNetworkEventHook()에 대한 함수 정의의 시작 부분에 다음 코드를 추가합니다.

if (eNetworkEvent == eNetworkUp){ configPRINT("Network connection successful. \n\r");}

테스트 실행

FreeRTOS+TCP 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.

37

Page 42: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서lwIP 이식

2. UART 콘솔에서 테스트 결과를 확인합니다. Network connection successful이 나타나면 이더넷또는 Wi-Fi 드라이버가 네트워크에 성공적으로 연결되어 테스트가 완료된 것입니다.

Validation디바이스의 FreeRTOS를 공식적으로 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된 소스 코드를 검증해야 합니다. 의 지침을 따릅니다.FreeRTOS에 AWS IoT 디바이스 테스터 사용를 클릭하여포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Testerconfigs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

lwIP 이식lwIP는 오픈 소스 TCP/IP 스택의 대안입니다. 자세한 내용은 lwIP - A Lightweight TCP/IP Stack -Summary를 참조하십시오. 현재 FreeRTOS는 버전 2.1.3을 지원합니다.

PrerequisiteslwIP 스택을 이식하려면 다음이 필요합니다.

• 공급업체에서 제공하는 네트워크 드라이버가 포함된 IDE 프로젝트 또는 CMakeLists.txt 목록 파일• FreeRTOS 커널의 검증된 구성.

플랫폼에 맞는 FreeRTOS 커널 구성에 대한 정보는 FreeRTOS 커널 포트 구성 (p. 28) 단원을 참조하십시오.

PortinglwIP TCP/IP 스택을 디바이스에 포팅하기 전에 freertos/libraries/3rdparty/lwip/src/portable 디렉터리를 확인하여 플랫폼에 대한 포트가 이미 존재하는지 확인합니다.

1. 포트가 존재하지 않으면 다음을 수행하십시오.

Under freertos/libraries/3rdparty/lwip/src/portable에서 이라는 디렉터리를 생성합니다.vendor/board/netif에서 vendor 및board디렉터리가 플랫폼과 일치해야 합니다.

2. 스텁 파일의 주석에 따라 freertos/libraries/3rdparty/lwip/src/netif/ethernetif.c 스텁 파일을 포팅합니다.

3. 포트를 생성했거나 포트가 이미 있는 경우 테스트 프로젝트 main.c 파일에서 tcpip_init()에 대한호출을 추가합니다.

4. freertos/vendors/vendor/boards/board/aws_tests/config_files에서 lwipopts.h 구성 파일을 만듭니다. 이 파일에는 다음 행이 포함되어야 합니다.

#include "arch/lwipopts_freertos.h"

파일에는 플랫폼별 구성 옵션도 포함되어야 합니다.

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

Note

lwIP와 관련된 TCP/IP 이식 테스트는 없습니다.

38

Page 43: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서보안 소켓

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 lwIP 소스 파일을 설정하려면

1. lwip/src 및 해당 하위 디렉터리에 있는 모든 소스 및 헤더 파일을 aws_tests IDE 프로젝트에 추가합니다.

Note

.c 파일을 IDE 프로젝트에 추가하고 해당 .c 파일을 포트에 대해 편집한 경우, 원본 .c 파일을IDE 프로젝트의 편집본 파일로 바꿔야 합니다.

2. 컴파일러의 포함 경로에 다음 경로를 추가합니다.

• freertos/libraries/3rdparty/lwip/src/include

• freertos/libraries/3rdparty/lwip/src/portable

• freertos/libraries/3rdparty/lwip/src/portable/vendor/board/include

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

FreeRTOS+TCP TCP/IP 스택과 lwIP 스택에 대한 보안 소켓 라이브러리 구현이 이미 존재합니다.FreeRTOS+TCP 또는 lwIP를 사용하는 경우 보안 소켓 라이브러리를 이식할 필요가 없습니다. FreeRTOS+TCP 스택 또는 lwIP 스택을 디바이스로 이식한 후 코드KCS11 라이브러리 포팅하기 (p. 47) 단원을 시작할 수 있습니다. 보안 소켓 라이브러리의 포트를 만들 필요가 없는 경우에도 플랫폼은 보안 소켓 라이브러리의 검증을 위해 AWS IoT Device Tester 테스트를 통과해야 합니다.

보안 소켓 라이브러리 이식FreeRTOS 보안 소켓 라이브러리를 사용하여 TCP 소켓을 생성 및 구성하고, MQTT 브로커에 연결하고,TCP 데이터를 송수신할 수 있습니다. 또한 보안 소켓 라이브러리는 TLS 기능을 캡슐화합니다. TLS 보안 소켓을 만드는 데는 표준 TCP 소켓만 필요합니다. 자세한 내용은 단원을 참조하십시오.FreeRTOS 보안 소켓라이브러리FreeRTOS 사용 설명서를 참조하십시오.

FreeRTOS 에는 보안 소켓 구현이 포함되어 있습니다.FreeRTOS+TCP및경량 IP (LWIP)와 함께 사용되는TCP/IP 스택mbedTLS를 선택합니다. FreeRTOS+TCP 또는 lwIP TCP/IP 스택을 사용하는 경우 보안 소켓라이브러리를 이식할 필요가 없습니다.

Note

• 보안 소켓 라이브러리의 포트를 만들 필요가 없는 경우에도 플랫폼은 보안 소켓 라이브러리에 대한 검증 테스트를 통과해야 합니다. 자격은 AWS IoT Device Tester의 결과를 기반으로 합니다.

39

Page 44: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Prerequisites

• TLS 구현은AWS IoT 에서 지원하는 TLS 암호 그룹를 선택합니다.• 보안 소켓 라이브러리의 TLS 구성을 수정하면 에코 서버에 연결하려고 할 때 오류가 발생할 수

있습니다. 에코 서버에서 지원하는 모든 암호 제품군이 Secure Sockets 라이브러리에서 지원되는 것은 아니며, 라이브러리가 현재 지원하지 않는 암호 그룹 (예: SHA384) 을 사용하도록 설정하면 연결할 수 없습니다.

• 플랫폼이 TCP/IP 기능을 별도의 네트워크 칩으로 오프로드하는 경우 FreeRTOS 보안 소켓 라이브러리를 디바이스에 이식해야 합니다.

Prerequisites보안 소켓 라이브러리를 이식하려면 다음이 필요합니다.

• Wi-Fi 라이브러리의 포트(네트워크 연결을 위해 Wi-Fi를 사용하는 경우에만 필요).

Wi-Fi 라이브러리 이식에 대한 자세한 내용은 Wi-Fi 라이브러리 이식 (p. 29) 단원을 참조하십시오.• 보드에 셀룰러 연결이 있는 경우 셀룰러 모뎀을 전송으로 사용하는 Secure Sockets 라이브러리를 제공해

야 합니다. 보안 소켓 라이브러리는 다음 두 가지 방법으로 구현할 수 있습니다.• 모뎀의 AT 명령을 직접 사용 하 여 보안 소켓 API를 구현 합니다.• AT 명령을 숨기고 소켓과 같은 API를 제공하는 FreeRTOS 에서 제공하는 셀룰러 라이브러리를 사용하

십시오. 자세한 내용은 셀룰러 라이브러리 포팅 (p. 100) 단원을 참조하세요.• TCP/IP 스택의 포트.

TCP/IP 스택 이식에 대한 자세한 내용은 TCP/IP 스택 이식 (p. 35) 단원을 참조하십시오.• 에코 서버.

FreeRTOS 는 Go로 작성된 에코 서버를freertos/tools/echo_server디렉토리에 있습니다. 자세한내용은 에코 서버 설정 (p. 44) 단원을 참조하세요.

Porting플랫폼이 TCP/IP 기능을 별도의 네트워크 칩으로 오프로드하는 경우 freertos/vendors/vendor/boards/board/ports/secure_sockets/iot_secure_sockets.c에 스텁이 있는 모든 함수를 구현해야 합니다.

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 보안 소켓 라이브러리를 설정하려면

1. FreeRTOS+TCP TCP/IP 스택을 사용하는 경우 freertos/libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c를 aws_tests IDE 프로젝트에 추가합니다.

40

Page 45: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

lwIP TCP/IP 스택을 사용하는 경우 freertos/libraries/abstractions/secure_sockets/lwip/iot_secure_sockets.c를 aws_tests IDE 프로젝트에 추가합니다.

자체 TCP/IP 포트를 사용하는 경우 freertos/vendors/vendor/boards/board/ports/secure_sockets/iot_secure_sockets.c를 aws_tests IDE 프로젝트에 추가합니다.

2. secure_sockets/test/aws_test_tcp.c를 aws_tests IDE 프로젝트에 추가합니다.

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

보안 소켓 라이브러리의 이동식 계층 대상 정의에 대한 예제는 다음을 참조하십시오.

# Secure socketsafr_mcu_port(secure_sockets)# Link to AFR::secure_sockets_freertos_tcp if you want use default implementation based on# FreeRTOS-Plus-TCP.target_link_libraries(AFR::pkcs11::mcu_portINTERFACE AFR::secure_sockets_freertos_tcp)# Or provide your own implementation.target_sources(AFR::secure_sockets::mcu_portINTERFACE "$path/iot_secure_sockets.c")

로컬 테스트 환경 설정IDE 프로젝트에서 라이브러리를 설정한 후, 테스트용 기타 몇 가지 파일을 구성해야 합니다.

보안 소켓 테스트를 위한 소스 및 헤더 파일을 구성하려면

1. freertos/libraries/freertos_plus/standard/utils/src/iot_system_init.c를 열고SYSTEM_Init() 함수에서 SOCKETS_Init()를 호출하는 행이 주석 처리가 되지 않도록 확인합니다.

2. 에코 서버를 시작합니다.

플랫폼에 TLS 라이브러리를 포팅하지 않은 경우 보안되지 않은 에코 서버(freertos/tools/echo_server/echo_server.go)를 사용해야만 Secure Sockets 포트를 테스트할 수 있습니다. 보안되지 않은 에코 서버 설정 및 실행에 대한 자세한 내용은 에코 서버 설정 (p. 44) 단원을 참조하십시오.

3. aws_test_tcp.h에서 IP 주소를 해당 서버에 맞는 값으로 설정합니다. 예를 들어, 서버의 IP 주소가192.168.2.6인 경우 aws_test_tcp.h에서 다음 값을 설정합니다.

매크로 값

tcptestECHO_SERVER_ADDR0 192

41

Page 46: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

매크로 값

tcptestECHO_SERVER_ADDR1 168

tcptestECHO_SERVER_ADDR2 2

tcptestECHO_SERVER_ADDR3 6

4. TLS 없이 보안 소켓 테스트를 실행하려면 aws_test_tcp.h를 열고 tcptestSECURE_SERVER 매크로를 0으로 설정합니다.

5. freertos/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner.config.h를 열고 testrunnerFULL_TCP_ENABLED 매크로를 1로 설정하여 소켓 테스트를 활성화합니다.

6. freertos/vendors/vendor/boards/board/aws_tests/application_code/main.c를 열고vApplicationIPNetworkEventHook ( void ) 정의에서 #if 0 및 #endif 컴파일러 지시문을삭제하여 테스트 작업을 활성화합니다.

Note

이 변경은 나머지 라이브러리를 이식하는 데 필요합니다.

Important

검증을 위해서는 TLS와 함께 보안 소켓 테스트를 통과해야 합니다. TLS 라이브러리를 이식한 후TLS 지원 에코 서버를 사용하여 TLS 테스트가 활성화된 상태로 보안 소켓 테스트를 다시 실행하십시오.TLS 라이브러리를 이식하려면 TLS 라이브러리 이식 (p. 51) 단원을 참조하십시오.

TLS 라이브러리를 이식한 후 보안 소켓에 대한 테스트를 설정하려면

1. 보안 에코 서버를 시작합니다.

자세한 정보는 에코 서버 설정 (p. 44) 단원을 참조하십시오.2. freertos/tests/include/aws_test_tcp.h에서 IP 주소 및 포트를 해당 서버에 맞는 값으로 설정

합니다. 예를 들어, 서버의 IP 주소가 192.168.2.6이고 서버가 9000에서 수신하는 경우 freertos/tests/include/aws_test_tcp.h에서 다음 값을 설정합니다.

매크로 값

tcptestECHO_SERVER_TLS_ADDR0 192

tcptestECHO_SERVER_TLS_ADDR1 168

tcptestECHO_SERVER_TLS_ADDR2 2

tcptestECHO_SERVER_TLS_ADDR3 6

tcptestECHO_PORT_TLS 9000

3. freertos/tests/include/aws_test_tcp.h를 열고 tcptestSECURE_SERVER 매크로를 1로 설정하여 TLS 테스트를 활성화합니다.

4. 신뢰할 수 있는 루트 인증서를 다운로드합니다. 허용되는 루트 인증서 및 다운로드 링크에 대한 자세한내용은서버 인증AWS IoT 개발자 안내서의 단원을 참조하십시오. Amazon Trust Services 인증서를 사용하는 것이 좋습니다.

5. 브라우저 창에서 freertos/tools/certificate_configuration/PEMfileToCString.html을 엽니다.

6. PEM Certificate or Key(PEM 인증서 또는 키)에서 다운로드한 루트 CA 파일을 선택합니다.

42

Page 47: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

7. Display formatted PEM string to be copied intoaws_clientcredential_keys.h(aws_clientcredential_keys.h에 복사할 형식 PEM 문자열 표시)를 선택하고인증서 문자열을 복사합니다.

8. aws_test_tcp.h을 열고 형식이 지정된 인증서 문자열을 tcptestECHO_HOST_ROOT_CA 정의에 붙여넣습니다.

9. freertos/tools/echo_server/readme-gencert.txt에서 OpenSSL 명령의 두 번째 집합을 사용하여 인증 기관에서 서명한 클라이언트 인증서와 프라이빗 키를 생성합니다. 인증서 및 키를 사용하면 사용자 지정 에코 서버가 TLS 인증 중에 디바이스가 제공하는 클라이언트 인증서를 신뢰할 수 있습니다.

10. freertos/tools/certificate_configuration/PEMfileToCString.html 형식 지정 도구로인증서와 키의 형식을 지정합니다.

11. 디바이스에서 테스트 프로젝트를 빌드하고 실행하기 전에 aws_clientcredential_keys.h를열고 PEM 형식의 클라이언트 인증서 및 프라이빗 키를 keyCLIENT_CERTIFICATE_PEM 및keyCLIENT_PRIVATE_KEY_PEM에 대한 정의로 복사합니다.

테스트 실행보안 소켓 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다.

...

모든 테스트가 통과되면 테스트가 완료됩니다.

43

Page 48: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

Validation디바이스가 FreeRTOS os를 공식적으로 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된 소스 코드를 검증해야 합니다. 의 지침을 따릅니다.AWS IoT DeviFreeRTOS ester 사용를 클릭하여 포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Testerconfigs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

FreeRTOS 보안 소켓 라이브러리를 디바이스로 이식한 후 CorePkcs11 라이브러리 이식을 시작할 수 있습니다. 자세한 내용은 코드KCS11 라이브러리 포팅하기 (p. 47) 단원을 참조하십시오.

에코 서버 설정이freertos/tools/echo_server/디렉터리에는 FreeRTOS OS에서 TCP를 테스트하는 데 사용할 수 있는 GO 기반 에코 서버의 소스 코드가 있습니다. freertos/libraries/abstractions/secure_sockets/test/iot_test_tcp.c 파일에서 TCP 테스트를 찾을 수 있습니다. 이 섹션의 지침에따라 에코 서버를 설정하고 실행합니다.

PrerequisitesTLS 에코 서버를 실행하려면 다음을 설치해야 합니다.

• Go — 에서 최신 버전을 다운로드할 수 있습니다.golang.org를 선택합니다.• OpenSSL — Linux 소스 코드를 다운로드하려면 단원을 참조하십시오.분류: 오픈SSL.ORG를 선택합니다.

패키지 관리자를 사용하여 Linux 및 macOS용 OpenSSL을 설치할 수도 있습니다.

자격 증명 생성사전 조건을 완료한 후 다음 명령을 입력하여 자격 증명을 생성해야 합니다.

서버

다음 openssl 명령은 자체 서명된 서버 인증서를 생성합니다.RSA

openssl req -newkey rsa:2048 -nodes -x509 -sha256 -out certs/server.pem -keyout certs/server.key -days 365 -subj "/C=US/ST=WA/L=Place/O=YourCompany/OU=IT/CN=www.your-company-website.com/[email protected]"

EC

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout certs/server.key -out certs/server.pem -days 365 -subj "/C=US/ST=WA/L=Place/O=YourCompany/OU=IT/CN=www.your-company-website.com/[email protected]"

클라이언트

다음 openssl 명령은 클라이언트 인증서를 생성합니다.RSA

openssl genrsa -out certs/client.key 2048

44

Page 49: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서에코 서버 설정

openssl req -new -key certs/client.key -out certs/client.csr -subj "/C=US/ST=WA/L=Place/O=YourCompany/OU=IT/CN=www.your-company-website.com/[email protected]"openssl x509 -req -in certs/client.csr -CA certs/server.pem -CAkey certs/server.key -CAcreateserial -out certs/client.pem -days 365 -sha256

EC

ecparam -genkey -name prime256v1 -out certs/client.key openssl req -new -key certs/client.key -out certs/client.csr -subj "/C=US/ST=WA/L=Place/O=YourCompany/OU=IT/CN=www.your-company-website.com/[email protected]"openssl x509 -req -in certs/client.csr -CA certs/server.pem -CAkey certs/server.key -CAcreateserial -out certs/client.pem -days 365 -sha256

디렉터리 구조기본적으로 인증서와 키는 구성 파일 config.json에 지정된 상대 경로에 있는 certs 디렉터리에 저장됩니다. 자격 증명을 다른 디렉터리로 이동하려면 구성 파일에서 이 디렉터리 위치를 업데이트할 수 있습니다.

echo_server.go 파일에서 에코 서버의 소스 코드를 찾을 수 있습니다.

서버 구성에코 서버는 JSON 기반 구성 파일을 읽습니다. 이 JSON 파일의 기본 위치는 ./config.json입니다. 이를재정의하려면 -config 플래그를 사용하여 JSON의 위치를 지정합니다.

JSON 파일에는 다음과 같은 옵션이 포함되어 있습니다.

server-port

소켓을 열 포트를 지정합니다.server-certificate-location

자격 증명 생성 (p. 44)에서 생성된 서버 인증서의 상대 또는 절대 경로입니다.secure-connection

에코 서버가 TLS를 사용하도록 하려면 이 옵션을 활성화합니다. 먼저 자격 증명 생성 (p. 44) 단원의작업을 수행해야 합니다.

logging

수신된 모든 로그 메시지를 파일로 출력하려면 이 옵션을 활성화합니다.verbose

에코 서버로 전송된 메시지의 내용을 출력하려면 이 옵션을 활성화합니다.server-key-location

자격 증명 생성 (p. 44)에서 생성된 서버 키의 상대 또는 절대 경로입니다.

구성의 예제

{ "verbose": false, "logging": false, "secure-connection": false,

45

Page 50: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서에코 서버 설정

"server-port": "9000", "server-certificate-location": "./certs/server.pem", "server-key-location": "./certs/server.pem"}

명령줄에서 에코 서버 실행다음 명령을 입력하여 에코 서버를 실행합니다.

go run echo_server.go

사용자 지정 구성 위치로 실행하려면 다음 명령을 입력합니다.

go run echo_server.go -config=config_file_path

보안 및 비보안 TCP 테스트를 동시에 실행하려면 보안 및 비보안 에코 서버를 모두 시작해야 합니다. 이렇게하려면 두 번째 보안 구성 파일을 생성하고 -config 플래그를 사용하여 에코 서버의 두 번째 인스턴스에 해당 위치를 전달합니다. 또한 두 번째 구성 파일에서 다른 TCP 포트를 지정해야 합니다.

클라이언트 디바이스 구성디바이스에서 TCP 테스트를 실행하기 전에FreeRTOS 시작하기의FreeRTOS 사용 설명서를 선택합니다.

자격 증명 생성 (p. 44)의 단계를 완료한 후에는 다음 파일이 있어야 합니다.

• certs/server.pem

• certs/server.key

• certs/server.srl

• certs/client.pem

• certs/client.key

• certs/client.csr

이러한 파일을 다음과 같이 변경합니다.

freertos/tests/include/aws_clientcredential.h

• 브로커 엔드포인트를 정의합니다.• 사물 이름을 정의합니다.• Wi-Fi에 대한 액세스를 정의합니다(이더넷에 없는 경우).

freertos/tests/include/aws_clientcredential_keys.h

• keyCLIENT_CERTIFICATE_PEM을 certs/client.pem의 콘텐츠로 설정합니다.• 나가기keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM로NULL를 선택합니다.• keyCLIENT_PRIVATE_KEY_PEM을 certs/client.key의 콘텐츠로 설정합니다.• 자세한 내용은 FreeRTOS 데모 구성을 참조하십시오.

freertos/tests/include/aws_test_tcp.h

• tcptestECHO_HOST_ROOT_CA을 certs/server.pem의 콘텐츠로 설정합니다.• 에코 서버의 IP 주소와 포트를 설정합니다.

• tcptestECHO_SERVER_ADDR[0-3]

• tcptestECHO_PORT

• 보안 에코 서버의 IP 주소와 포트를 설정합니다.• tcptestECHO_SERVER_TLS_ADDR0[0-3]

46

Page 51: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서코드Ks11

• tcptestECHO_PORT_TLS

코드KCS11 라이브러리 포팅하기CorePKCS11 라이브러리에는 Mb TLS에서 제공하는 암호화 기능을 사용하는 PKCS #11 인터페이스 (API)의 소프트웨어 기반 모의 구현이 포함되어 있습니다. 범용 플래시 메모리에 프라이빗 키를 저장하면 평가 및신속한 프로토타입 생성 시나리오에서 편리할 수 있습니다. 프로덕션 시나리오에서는 데이터 도용 및 디바이스 복제의 위협을 줄이기 위해 전용 암호화 하드웨어를 사용하는 것이 좋습니다. 암호화 하드웨어에는 암호화 비밀 키의 내보내기를 방지하는 기능이 있는 구성 요소가 포함됩니다.

FreeRTOS 와 전용 암호화 하드웨어를 사용하려면 사용 중인 하드웨어에 PKCS #11 API를 이식합니다. 일반적으로 TPM (신뢰할 수 있는 플랫폼 모듈), HSM (하드웨어 보안 모듈), 보안 요소 또는 다른 유형의 보안하드웨어 영역과 같은 보안 암호화 프로세서용 공급업체는 하드웨어와 함께 PKCS #11 구현을 배포합니다.라이브러리를 CMake와 IDE 프로젝트에 추가하고 컴파일하고 PKCS #11 테스트 스위트를 실행할 수 있습니다.

이 섹션에서는 PKCS #11 API의 자체 포트를 기반으로 FreeRTOS CorePKCS11 라이브러리를 사용하는 방법에 대해 설명합니다. 비대칭 키, 난수 생성 및 해싱과 관련된 작업에 중점을 둔 PKCS #11 표준의 하위 집합만 구현됩니다. 동안 TLS 클라이언트 인증을 수행하기 위해 TLS 헬퍼 인터페이스에서 PKCS #11 API를호출합니다.SOCKETS_Connect를 선택합니다. 1회 개발자 프로비저닝 워크플로우에서 인증을 위한 프라이빗 키와 TLS 클라이언트 인증서를 AWS IoT MQTT 브로커로 가져오기 위해서도 PKCS #11 API를 호출합니다. 이 두 사용 사례 (프로비저닝 및 TLS 클라이언트 인증) 에서는 PKCS #11 인터페이스 표준의 작은 하위집합만 구현해야 합니다.

FreeRTOS Corekcs11 라이브러리에 대한 자세한 내용은 단원을 참조하십시오.FreeRTOS 코드KCS11 라이브러리의FreeRTOS 사용 설명서를 선택합니다.

PrerequisitesCorepKCS11 라이브러리를 이식하려면 다음이 필요합니다.

• 민감한 데이터에 적합한 공급업체 제공 드라이버가 포함된 IDE 프로젝트 또는 CMakeLists.txt 목록 파일.

테스트 프로젝트 설정에 대한 자세한 내용은 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 단원을 참조하십시오.

• FreeRTOS 커널의 검증된 구성.

플랫폼에 맞는 FreeRTOS 커널 구성에 대한 정보는 FreeRTOS 커널 포트 구성 (p. 28) 단원을 참조하십시오.

Porting코드KCS11 라이브러리를 이식하려면

1. PKCS 11에서 구현한 PKCS #11 API 함수를 이식합니다.

PKCS # 11 API는 SHA256 해싱 및 ECDSA(Elliptic Curve Digital Signature Algorithm) 서명과 같은 암호화 기본 요소의 구현에 따라 다릅니다.

PKCS #11 FreeRTOS 구현은 mbedTLS 라이브러리에 구현된 기본 암호화를 사용합니다. FreeRTOS에는 mbedTLS 용 포트가 포함되어 있습니다. 대상 하드웨어가 암호화를 별도의 모듈로 오프로드하거나 mbedTLS 이외의 기본 암호화 소프트웨어 구현을 사용하려면 기존 PKCS #11 구현을 수정해야 합니다.

47

Page 52: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Porting

2. 디바이스별 인증서 및 키 저장을 위해 COrepKCS11 PAL (플랫폼 추상화 계층) 을 이식합니다.

PKCS #11 FreeRTOS 구현을 사용하기로 결정한 경우 온보드 플래시 메모리와 같은 비휘발성 메모리(NVM) 에 암호화 객체를 읽고 쓰려면 약간의 사용자 지정이 필요합니다.

암호화 객체는 초기화되지 않고 디바이스 재프로그래밍 시에도 지워지지 않는 NVM 섹션에 저장해야 합니다. CorepKCS11 라이브러리 사용자는 디바이스에 자격 증명을 제공한 다음, Corepkcs11 인터페이스를 통해 이러한 자격 증명에 액세스하는 새 애플리케이션으로 디바이스를 다시 프로그래밍할 수 있어야합니다.

COrepKCS11 PAL 포트는 다음 항목의 저장 위치를 제공해야 합니다.

• 디바이스 클라이언트 인증서• 디바이스 클라이언트 프라이빗 키• 디바이스 클라이언트 퍼블릭 키• 신뢰할 수 있는 루트 CA• 보안 부트로더 및 무선(OTA) 업데이트를 위한 코드 검증 퍼블릭 키(또는 코드 검증 퍼블릭 키를 포함

하는 인증서)• JIT 프로비저닝 인증서

freertos/vendors/vendor/boards/board/ports/pkcs11/core_pkcs11_pal.c에는 PAL 함수에 대한 빈 정의가 포함되어 있습니다. 최소한 이 표에 나열된 함수를 위한 포트를 제공해야 합니다.

기능 설명

PKCS11_PAL_Initialize PAL 계층을 초기화합니다. 초기화 시퀀스의 시작부분에서 CorepKCS11 라이브러리에 의해 호출됩니다.

PKCS11_PAL_SaveObject 비휘발성 스토리지에 데이터를 씁니다.

PKCS11_PAL_FindObject PKCS #11 CKA_LABEL을 사용하여 비휘발성 스토리지에서 해당 PKCS #11 객체를 검색하고 해당 객체의 핸들이 있으면 반환합니다.

PKCS11_PAL_GetObjectValue 핸들이 지정된 객체의 값을 가져옵니다.

PKCS11_PAL_GetObjectValueCleanup PKCS11_PAL_GetObjectValue 호출을 위해 정리합니다. PKCS11_PAL_GetObjectValue 호출에 할당된 여유 메모리를 해제하는 데 사용할 수있습니다.

3. 암호화 방식의 임의 엔트로피 소스에 대한 지원을 포트에 추가합니다.

• 포트가 기본 암호화 및 TLS 지원을 위해 mbedTLS 라이브러리를 사용하고 디바이스에 실제 난수 생성기(TRNG)가 있는 경우:1. 구현하드웨어_폴링 ()함수를 사용하여 mbedTLS 가 암호화 임의 비트 스트림을 생성하는 데 사

용하는 결정론적 난수 생성기 (DRBG) 를 시드합니다. mbedtls_hardware_poll() 함수는freertos/vendors/vendor/boards/board/ports/pkcs11/core_pkcs11_pal.c에 있습니다.

• 포트가 기본 암호화 및 TLS 지원을 위해 mbedTLS 라이브러리를 사용하지만 디바이스에 TRNG가 없는 경우:

1. freertos/libraries/3rdparty/mbedtls/include/mbedtls/config.h 복사본을 만든 다음 해당 복사본에서 MBEDTLS_ENTROPY_NV_SEED의 주석 처리를 해제하고MBEDTLS_ENTROPY_HARDWARE_ALT를 주석 처리합니다.

48

Page 53: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

config.h의 수정된 버전을 freertos/vendors/vendor/boards/board/aws_tests/config_files/config.h에 저장합니다. 원본 파일을 덮어쓰지 마십시오.

2. 함수를 구현합니다.mbedtls_nv_seed_poll(),nv_seed_read_func(),및nv_seed_write_func()를 선택합니다.

이러한 함수를 구현하는 방법에 대한 자세한 내용은 mbedtls/include/mbedtls/entropy_poll.h 및mbedtls/include/mbedtls/config.h mbedTLS 헤더 파일의 주석을 참조하십시오.

Important

제조 시 NIST 승인 엔트로피 소스가 있는 시드 파일을 디바이스에 제공해야 합니다.

Note

FreeRTOS 검증 프로그램에 관심이 있는 경우RNG를 선택합니다.

NIST 승인 DRBG 및 엔트로피 소스에 대한 자세한 내용은 다음 NIST 간행물을 참조하십시오.

• 결정론적 난수 생성기를 사용한 난수 생성에 대한 권장 사항• 난수 생성기(RBG) 구성에 대한 권장 사항

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 Corekcs11 라이브러리를 설정하려면

1. 소스 파일 freertos/vendors/vendor/boards/board/ports/pkcs11/core_pkcs11_pal.c를 aws_tests IDE 프로젝트에 추가합니다.

2. freertos/libraries/abstractions/pkcs11 디렉터리 및 해당 하위 디렉터리에 있는 모든 파일을 aws_tests IDE 프로젝트에 추가합니다.

3. freertos/libraries/freertos_plus/standard/pkcs11 디렉터리 및 해당 하위 디렉터리에있는 모든 파일을 aws_tests IDE 프로젝트에 추가합니다. 이러한 파일은 공통적으로 그룹화된 PKCS#11 함수 집합에 대한 래퍼를 구현합니다.

4. 소스 파일 freertos/libraries/freertos_plus/standard/crypto/src/iot_crypto.c를aws_tests IDE 프로젝트에 추가합니다. 이 파일은 mbedTLS에 대한 CRYPTO 추상화 래퍼를 구현합니다.

5. freertos/libraries/3rdparty/mbedtls 및 해당 하위 디렉터리에 있는 모든 소스 및 헤더 파일을 aws_tests IDE 프로젝트에 추가합니다.

6. Addfreertos/libraries/3rdparty/mbedtls/include및freertos/libraries/abstractions/pkcs11를 컴파일러의 포함 경로에 추가합니다.

49

Page 54: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

PKCS #11 의 mbedTLS 기반 소프트웨어 구현을 사용하고 포트별 CorepKCS11 PAL 파일을 제공하는Corepkcs11 라이브러리에 대한 다음 이식 가능 계층 대상 정의 예제를 참조하십시오.

# PKCS11afr_mcu_port(pkcs11_implementation DEPENDS AFR::pkcs11_mbedtls)target_sources( AFR::pkcs11_implementation::mcu_port INTERFACE "${afr_ports_dir}/pkcs11/core_pkcs11_pal.c")

로컬 테스트 환경 설정IDE 프로젝트에서 라이브러리를 설정한 후, 테스트용 기타 몇 가지 파일을 구성해야 합니다.

PKCS #11 테스트를 위한 소스 및 헤더 파일을 구성하려면

1. Secure Sockets 라이브러리를 포팅한 경우 freertos/libraries/freertos_plus/standard/utils/src/iot_system_init.c를 열고 SYSTEM_Init() 함수에서 SOCKETS_Init()에 대한 호출의 주석 처리를 해제합니다.

2. freertos/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h를 열고 testrunnerFULL_PKCS11_ENABLED 매크로를 1로 설정하여 PKCS #11 테스트를 활성화합니다.

테스트 실행PKCS #11 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다.

...

50

Page 55: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

모든 테스트가 통과되면 테스트가 완료됩니다.

ValidationFreeRTOS 를 공식적으로 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된 소스 코드를검증해야 합니다. 의 지침을 따릅니다.AWS IoT Device Tester를 FreeRTOS 에 사용를 클릭하여 포트 유효성검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Tester configs폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

디바이스로 Corepkcs11 라이브러리를 이식한 후 TLS 라이브러리 이식을 시작할 수 있습니다. 자세한 내용은 TLS 라이브러리 이식 (p. 51) 단원을 참조하십시오.

TLS 라이브러리 이식전송 계층 보안 (TLS) 인증의 경우 는 일부 네트워크 코프로세서에 있는 것과 같은 오프칩 TLS 구현 또는mbedTLS TLS를 사용합니다. FreeRTOS 에는 mbedTLS 포트가 포함되어 있습니다. TLS에 mbedTLS를 사용하는 경우 TLS 이식이 필요하지 않습니다. 다양한 TLS 구현을 허용하기 위해 타사 TLS 라이브러리는 TLS추상화 계층을 통해 액세스됩니다.

Note

디바이스의 FreeRTOS 포트에서 어떤 TLS 구현을 사용하는지 관계없이 포트는 TLS에 대한 검증테스트를 통과해야 합니다. 자격은 AWS IoT Device Tester의 결과를 기반으로 합니다.또한 TLS 구현은AWS IoT 에서 지원하는 TLS 암호 그룹를 선택합니다.

TLS 테스트를 위해 플랫폼을 준비하려면 AWS 클라우드에서 디바이스를 구성해야 하며 디바이스에서 인증서 및 키를 프로비저닝해야 합니다.

PrerequisitesFreeRTOS TLS 라이브러리를 이식하려면 다음이 필요합니다.

• FreeRTOS 보안 소켓 라이브러리의 포트.

플랫폼에 보안 소켓 라이브러리를 이식하는 방법에 대한 자세한 내용은 보안 소켓 라이브러리 이식 (p. 39) 단원을 참조하십시오.

• CorePKCS11 라이브러리의 포트.

플랫폼에 CorePKCS11 라이브러리를 이식하는 방법에 대한 자세한 내용은 단원을 참조하십시오.코드KCS11 라이브러리 포팅하기 (p. 47)를 선택합니다.

• AWS 계정.

51

Page 56: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Porting

AWS 계정 설정에 대한 자세한 내용은 단원을 참조하십시오.새 Amazon Web Services 계정을 생성 및 활성화하려면 어떻게 해야 합니까?AWS KnoCenter에 있습니다.

• OpenSSL.

Shining Light에서 Windows용 OpenSSL 버전을 다운로드할 수 있습니다. Linux 소스 코드를 다운로드하려면 OpenSSL.org를 참조하십시오. 패키지 관리자를 사용하여 Linux 및 macOS용 OpenSSL을 설치할 수도있습니다.

Porting대상 하드웨어가 TLS 기능을 별도의 네트워크 칩으로 오프로드하는 경우 다음 표에서 TLS 추상화 계층 함수를 구현해야 합니다.

기능 설명

TLS_Init TLS 컨텍스트를 초기화합니다.

TLS_Connect TLS를 협상하고 서버에 연결합니다.

TLS_Recv 요청된 바이트 수를 TLS 연결에서 읽습니다.

TLS_Send 요청된 바이트 수를 TLS 연결에 씁니다.

TLS_Cleanup TLS 컨텍스트에서 사용하는 무료 리소스입니다.

iot_tls.h에는 이러한 함수를 구현하는 데 필요한 정보가 들어 있습니다. 함수를 구현하는 파일을iot_tls.c로 저장합니다.

AWS IoT 에 디바이스 연결AWS 클라우드와 통신하기 위해서는 디바이스가 AWS IoT 에 등록되어 있어야 합니다. AWS IoT 에 보드를등록하려면 다음이 필요합니다.

AWS IoT 정책

AWS IoT 리소스에 액세스할 수 있는 권한을 디바이스에 부여합니다. AWS 클라우드에서 저장됩니다.AWS IoT 사물

AWS IoT 사용하면 AWS IoT T에서 디바이스를 관리할 수 있습니다. AWS 클라우드에서 저장됩니다.프라이빗 키 및 X.509 인증서

프라이빗 키와 인증서를 사용하여 AWS IoT 로 인증할 수 있습니다.

다음 절차에 따라 정책, 사물, 키 및 인증서를 만듭니다.

AWS IoT 정책을 생성하려면 다음과 같이 하십시오.

1. 해당 항목으로 이동합니다.AWS IoT 콘솔를 선택합니다.2. 탐색 창에서 Secure(보안)를 선택하고 Policies(정책)를 선택한 다음 Create(생성)를 선택합니다.3. 정책을 식별할 이름을 입력합니다.4. Add statements(설명문 추가) 섹션에서 Advanced mode(고급 모드)를 선택합니다. 다음 JSON을 복사

하여 정책 편집기 창에 붙여넣습니다.

52

Page 57: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서AWS IoT 에 디바이스 연결

{ "Version": "2012-10-17", "Statement": [ {"Effect": "Allow","Action": "iot:*","Resource": "*"} ]}

Important

이 정책은 모든 AWS IoT 작업에 대한 액세스 권한을 모든 AWS IoT 리소스에 부여합니다. 이정책은 개발 및 테스트 용도로는 편리하지만 프로덕션 환경에서는 권장되지 않습니다.

5. Create를 선택합니다.

디바이스에 대한 IoT 사물, 프라이빗 키 및 인증서를 생성하려면

1. 해당 항목으로 이동합니다.AWS IoT 콘솔를 선택합니다.2. 탐색 창에서 Manage(관리)를 선택한 다음 Things(사물)를 선택합니다.3. 계정에 등록된 사물이 없는 경우 아직 사물이 없습니다 페이지가 표시됩니다. 이 페이지가 나타나면

Register a thing(사물 등록)을 선택합니다. 그렇지 않은 경우 [Create]를 선택합니다.4. [Creating AWS IoT things] 페이지에서 [Create a single thing]을 선택합니다.5. Add your device to the thing registry(디바이스를 사물 등록에 추가) 페이지에 사물의 이름을 입력하고

Next(다음)를 선택합니다.6. Add a certificate for your thing(사물에 대한 인증서 추가) 페이지의 One-click certificate creation(원클릭

인증서 생성)에서 Create certificate(인증서 생성)를 선택합니다.7. 각각에 대한 Download(다운로드) 링크를 선택하여 프라이빗 키와 인증서를 다운로드합니다.8. Activate(활성화)를 선택하여 인증서를 활성화합니다. 인증서는 사용 전에 활성화해야 합니다.9. 선택정책 연결AWS IoT 작업에 대한 액세스 권한을 디바이스에 부여하는 정책을 인증서에 연결합니다.10. 방금 생성한 정책을 선택하고 사물 등록을 선택합니다.

AWS IoT 콘솔에서 인증서와 키를 얻은 후에는freertos/tests/include/aws_clientcredential.h헤더 파일을 사용하여 디바이스가 AWS IoT 에 연결할 수 있도록 합니다.

freertos/tests/include/aws_clientcredential.h을 구성하려면

1. 해당 항목으로 이동합니다.AWS IoT 콘솔를 선택합니다.2. 탐색 창에서 [ Settings]을 선택합니다.

AWS IoT 엔드포인트가Endpoint를 선택합니다. URL은 123456789012-ats.iot.us-east-1.amazonaws.com와 같아야 합니다. 이 엔드포인트를 기록해 둡니다.

3. 탐색 창에서 Manage(관리)를 선택한 다음 Things(사물)를 선택합니다.

디바이스에 AWS IoT 사물 이름이 있어야 합니다. 이 이름을 기록해 둡니다.4. FreeRTOS 소스 코드를 빌드하는 컴퓨터에서freertos/test/include/

aws_clientcredential.hIDE에서 파일을 선택하고 다음 상수의 값을 지정합니다.

• static const char clientcredentialMQTT_BROKER_ENDPOINT[] = "Your AWS IoTendpoint";

53

Page 58: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서TLS 테스트용 인증서 및 키 설정

• #define clientcredentialIOT_THING_NAME "The AWS IoT thing name of yourboard"

TLS 테스트용 인증서 및 키 설정TLS_ConnectRSA()

이 단원에서는 TLS 포트를 테스트하기 위한 인증서 및 키 설정에 대한 지침을 제공합니다.

RSA 디바이스 인증의 경우 디바이스를 등록할 때 AWS IoT 콘솔에서 다운로드한 프라이빗 키와 인증서를사용할 수 있습니다.

Note

디바이스를 AWS IoT로 등록한 후 AWS IoT 콘솔에서 디바이스 인증서를 검색할 수 있지만 프라이빗 키는 검색할 수 없습니다.

FreeRTOS 는 C 언어 프로젝트입니다. 인증서 및 키를 freertos/tests/include/aws_clientcredential_keys.h 헤더 파일에 추가하려면 먼저 형식을 지정해야 합니다.

freertos/tests/include/aws_clientcredential_keys.h의 인증서 및 키 형식을 지정하려면

1. 브라우저 창에서 freertos/tools/certificate_configuration/CertificateConfigurator.html을 엽니다.

2. 언더인증서 PEM 파일를 선택한 다음ID-certificate.pem.crtAWS IoT 콘솔에서 다운로드한 파일입니다.

3. 언더개인 키 PEM 파일를 선택한 다음ID-private.pem.keyAWS IoT 콘솔에서 다운로드한 파일입니다.

4. aws_clientcredential_keys.h 생성 및 저장을 선택한 다음 파일을 freertos/tests/include에 저장합니다. 이 파일은 디렉터리의 기존 파일을 덮어씁니다.

Note

인증서와 프라이빗 키는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안 위치에 저장해야 합니다.

TLS_ConnectEC()

ECDSA(Elliptic Curve Digital Signature Algorithm) 인증의 경우 프라이빗 키, 인증서 서명 요청(CSR) 및 인증서를 생성해야 합니다. OpenSSL 사용하여 프라이빗 키와 CSR을 생성할 수 있으며 CSR을 사용하여 AWSIoT 콘솔에서 인증서를 생성할 수 있습니다.

프라이빗 키와 CSR을 생성하려면

1. 다음 명령을 사용하여 현재 작업 디렉터리에 p256_privatekey.pem 프라이빗 키 파일을 생성합니다.

openssl ecparam -name prime256v1 -genkey -noout -out p256_privatekey.pem

2. 다음 명령을 사용하여 현재 작업 디렉터리에 csr.csr CSR 파일을 생성합니다.

openssl req –new –key p256_privatekey.pem –out csr.csr

54

Page 59: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서TLS 테스트용 인증서 및 키 설정

CSR을 사용하여 AWS IoT 콘솔에서 인증서를 생성하려면

1. 열기AWS IoT 콘솔를 선택합니다.2. 탐색 창에서 보안, 인증서, 생성을 차례대로 선택합니다.3. CSR을 통한 생성을 선택한 다음 OpenSSL로 생성한 csr.csr 파일을 찾아서 업로드합니다.4. 활성화를 선택하여 인증서를 활성화한 다음 다운로드를 선택하여 인증서를 .cert.pem 파일로 다운로

드합니다.5. 선택정책 연결에서 생성하고 RSA 인증서에 연결한 AWS IoT 정책을 찾아서 선택합니다.AWS IoT 에 디

바이스 연결 (p. 52)지침을 클릭하고Done를 선택합니다.6. 디바이스를 등록할 때 생성한 AWS IoT 사물에 인증서를 연결합니다.7. 인증서 페이지에서 방금 만든 인증서를 찾아 선택합니다. 페이지의 오른쪽 위에서 작업을 선택한 다음

사물 연결을 선택합니다.8. 디바이스용으로 만든 사물을 찾아서 선택한 다음 연결을 선택합니다.

freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 헤더 파일에 추가하기 전에 디바이스에 맞게 인증서와 프라이빗 키의 형식을 지정해야 합니다.

freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h의 인증서및 키 형식을 지정하려면

1. 브라우저 창에서 freertos/tools/certificate_configuration/PEMfileToCString.html을 엽니다.

2. 언더PEM 인증서 또는 키를 선택한 다음ID-certificate.pem.crtAWS IoT 콘솔에서 다운로드한.3. Display formatted PEM string to be copied into

aws_clientcredential_keys.h(aws_clientcredential_keys.h에 복사할 형식 PEM 문자열 표시)를 선택하고인증서 문자열을 복사합니다.

4. freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h을 열고 형식이지정된 인증서 문자열을 tlstestCLIENT_CERTIFICATE_PEM_EC 정의에 붙여넣습니다.

Note

인증서와 프라이빗 키는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안 위치에 저장해야 합니다.

5. 동일한 단계에 따라 OpenSSL(p256_privatekey.pem)을 사용하여 생성한 프라이빗 키파일의 형식이 지정된 문자열을 가져옵니다. 형식이 지정된 프라이빗 키 문자열을 복사하여freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h에 있는tlstestCLIENT_PRIVATE_KEY_PEM_EC 정의에 붙여넣습니다.

Infreertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h를 정의하려면tlstestMQTT_BROKER_ENDPOINT_EC에서 사용한 것과 동일한 AWS IoT MQTT 브로커 엔드포인트 주소를 사용하여AWS IoT 에 디바이스 연결 (p. 52)를 선택합니다.

TLS_ConnectMalformedCert()

이 테스트는 형식이 잘못된 인증서를 사용하여 서버를 인증할 수 있는지 확인합니다. 연결 요청을 보내기 전에 X.509 인증서를 확인하여 인증서의 임의 수정을 거부할 수 있습니다. 형식이 잘못된 인증서를 설정하려면인증서 발행자를 수정하는 것이 좋습니다.

인증서 발행자를 수정하려면

1. 사용 중인 유효한 클라이언트 인증서 ID-certificate.pem.crt를 가져옵니다.

Windows 인증서 관리자에서 인증서 속성은 다음과 같이 나타납니다.

55

Page 60: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서TLS 테스트용 인증서 및 키 설정

2. 다음 명령을 사용하여 인증서를 PEM에서 DER로 변환합니다.

openssl x509 -outform der -in ID-certificate.pem.crt -out ID-certificate.der.crt

3. DER 인증서를 열고 다음 16진수 시퀀스를 검색합니다.

41 6d 61 7a 6f 6e 20 57 65 62 20 53 65 72 76 69 63 65 73

이 시퀀스는 "Amazon Web Services"라는 일반 텍스트로 변환됩니다.4. 53을 43으로 변경하여 시퀀스를 "Amazon Web Services"라는 일반 텍스트로 변환하고 파일을 저장합

니다.

Windows 인증서 관리자에서 인증서 속성은 이제 다음과 같이 나타납니다.

56

Page 61: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서TLS 테스트용 인증서 및 키 설정

5. 다음 명령을 사용하여 인증서를 다시 PEM으로 변환합니다.

openssl x509 -inform der -in ID-certificate.der.crt -out ID-cert-modified.pem.crt

freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 헤더 파일에 추가하기 전 형식이 잘못된 인증서의 형식을 디바이스에 맞게 지정해야 합니다.

freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h의 인증서형식을 지정하려면

1. 브라우저 창에서 freertos/tools/certificate_configuration/PEMfileToCString.html을 엽니다.

2. PEM 인증서 또는 키에서 생성한 다음 수정한 ID-certificate.pem.crt를 선택합니다.3. Display formatted PEM string to be copied into

aws_clientcredential_keys.h(aws_clientcredential_keys.h에 복사할 형식 PEM 문자열 표시)를 선택하고인증서 문자열을 복사합니다.

4. freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h을 열고 형식이지정된 인증서 문자열을 tlstestCLIENT_CERTIFICATE_PEM_MALFORMED 정의에 붙여넣습니다.

57

Page 62: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서TLS 테스트용 인증서 및 키 설정

Note

인증서는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안위치에 저장해야 합니다.

TLS_ConnectBYOCCredentials()

자체 인증서를 인증에 사용할 수 있습니다. 유효한 rootCA/CA 체인으로 인증서를 만들고 등록하려면 BYOC생성(ECDSA) (p. 59) 단원의 지침을 참조하십시오. 인증서를 만든 후에는 디바이스 인증서에 일부 정책을 연결한 다음 디바이스의 사물을 인증서에 연결해야 합니다.

디바이스 인증서에 정책을 연결하려면

1. 열기AWS IoT 콘솔를 선택합니다.2. 탐색 창에서 보안을 선택하고 인증서를 선택한 다음 BYOC 생성(ECDSA) (p. 59) 단원에서 생성하고

등록한 디바이스 인증서를 선택합니다.3. 작업을 선택한 후 정책 연결을 선택합니다.4. RSA 인증서를 생성하고 연결한 AWS IoT 정책을 찾아서 선택하려면AWS IoT 에 디바이스 연

결 (p. 52)지침을 클릭한 다음Attach를 선택합니다.

디바이스 인증서에 사물을 연결하려면

1. 인증서 페이지에서 동일한 디바이스 인증서를 찾아서 선택하고 작업을 선택한 다음 사물 연결을 선택합니다.

2. 디바이스용으로 만든 사물을 찾아서 선택한 다음 연결을 선택합니다.

freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h의 인증서형식을 지정하려면

1. 브라우저 창에서 freertos/tools/certificate_configuration/PEMfileToCString.html을 엽니다.

2. PEM 인증서 또는 키에서 생성한 다음 수정한 ID-certificate.pem.crt를 선택합니다.3. Display formatted PEM string to be copied into

aws_clientcredential_keys.h(aws_clientcredential_keys.h에 복사할 형식 PEM 문자열 표시)를 선택하고인증서 문자열을 복사합니다.

4. freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h을 열고 형식이지정된 인증서 문자열을 tlstestCLIENT_BYOC_CERTIFICATE_PEM 정의에 붙여넣습니다.

Note

인증서는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안위치에 저장해야 합니다.

5. 동일한 단계에 따라 직접 만든 프라이빗 키 파일의 형식이 지정된 문자열을 가져옵니다. 형식이 지정된프라이빗 키 문자열을 복사하여 freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h에 있는 tlstestCLIENT_BYOC_PRIVATE_KEY_PEM 정의에 붙여넣습니다.

TLS_ConnectUntrustedCert()

AWS IoT 에 인증서를 등록하지 않고도 자체 인증서를 인증에 사용할 수 있습니다. 유효한 rootCA/CA 체인이 있는 인증서를 만들려면BYOC 생성(ECDSA) (p. 59)AWS IoT 에 디바이스를 등록하는 마지막 지침은건너뛰십시오.

58

Page 63: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h의 인증서형식을 지정하려면

1. 브라우저 창에서 freertos/tools/certificate_configuration/PEMfileToCString.html을 엽니다.

2. PEM 인증서 또는 키에서 생성한 다음 수정한 ID-certificate.pem.crt를 선택합니다.3. Display formatted PEM string to be copied into

aws_clientcredential_keys.h(aws_clientcredential_keys.h에 복사할 형식 PEM 문자열 표시)를 선택하고인증서 문자열을 복사합니다.

4. freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h을 열고 형식이지정된 인증서 문자열을 tlstestCLIENT_UNTRUSTED_CERTIFICATE_PEM 정의에 붙여넣습니다.

Note

인증서는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안위치에 저장해야 합니다.

5. 동일한 단계에 따라 직접 만든 프라이빗 키 파일의 형식이 지정된 문자열을 가져옵니다. 형식이 지정된프라이빗 키 문자열을 복사하여 freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h에 있는 tlstestCLIENT_UNTRUSTED_PRIVATE_KEY_PEM 정의에 붙여넣습니다.

BYOC 생성(ECDSA)이 절차에서는 AWS IoT 콘솔, AWS 명령줄 인터페이스 및 OpenSSL 사용하여 AWS 클라우드의 디바이스에대한 인증서 및 키를 만들고 등록합니다. AWS CLI 명령을 실행하기 전에 시스템에 AWS CLI를 설치 및 구성했는지 확인합니다.

Note

CA 인증서를 만들 때 메시지가 나타나면 DN(고유 이름) 필드에 유효하고 일관된 값을 사용합니다.일반 이름 필드의 경우 별도의 지시가 없는 한 모든 값을 사용할 수 있습니다.

루트 CA를 생성하려면

1. 루트 CA 프라이빗 키를 생성하려면 다음 명령을 사용합니다.

openssl ecparam -name prime256v1 -genkey -noout -out rootCA.key

2. 루트 CA 인증서를 생성하려면 다음 명령을 사용합니다.

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

중간 CA를 생성하려면

1. 필수 파일을 만듭니다.

touch index.txt

echo 1000 > serial

2. 현재 작업 디렉터리에 ca.config (p. 61) 파일을 저장합니다.3. 중간 CA의 프라이빗 키를 생성하려면 다음 명령을 사용합니다.

openssl ecparam -name prime256v1 -genkey -noout -out intermediateCA.key

59

Page 64: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

4. 중간 CA의 CSR을 생성하려면 다음 명령을 사용합니다.

openssl req -new -sha256 -key intermediateCA.key -out intermediateCA.csr

5. 루트 CA를 사용하여 중간 CA의 CSR에 서명하려면 다음 명령을 사용합니다.

openssl ca -config ca.config -notext -cert rootCA.crt -keyfile rootCA.key -days 500 -in intermediateCA.csr -out intermediateCA.crt

디바이스 인증서를 생성하려면Note

여기서는 ECDSA 인증서가 예제로 사용됩니다.

1. 프라이빗 키를 생성하려면 다음 명령을 사용합니다.

openssl ecparam -name prime256v1 -genkey -noout -out deviceCert.key

2. 디바이스 인증서용 CSR을 생성하려면 다음 명령을 사용합니다.

openssl req -new -key deviceCert.key -out deviceCert.csr

3. 중간 CA를 사용하여 디바이스 인증서에 서명하려면 다음 명령을 사용합니다.

openssl x509 -req -in deviceCert.csr -CA intermediateCA.crt -CAkey intermediateCA.key -CAcreateserial -out deviceCert.crt -days 500 -sha256

두 CA 인증서를 등록하려면

1. 등록 코드를 얻으려면 다음 AWS CLI 명령을 사용합니다.

aws iot get-registration-code

2. 검증 인증서용 프라이빗 키를 생성하려면 다음 명령을 사용합니다.

openssl ecparam -name prime256v1 -genkey -noout -out verificationCert.key

3. 검증 인증서용 CSR을 생성하려면 다음 명령을 사용합니다.

openssl req -new -key verificationCert.key -out verificationCert.csr

메시지가 나타나면 Common Name에 대해 첫 번째 단계에서 얻은 등록 코드를 입력합니다.4. 루트 CA를 사용하여 검증 인증서에 서명하려면 다음 명령을 사용합니다.

openssl x509 -req -in verificationCert.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out rootCAverificationCert.crt -days 500 -sha256

5. 중간 CA를 사용하여 검증 인증서에 서명하려면 다음 명령을 사용합니다.

openssl x509 -req -in verificationCert.csr -CA intermediateCA.crt -CAkey intermediateCA.key -CAcreateserial -out intermediateCAverificationCert.crt -days 500 -sha256

6. AWS IoT에 두 CA 인증서를 등록하려면 다음 AWS CLI 명령을 사용합니다.

60

Page 65: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

aws iot register-ca-certificate --ca-certificate file://rootCA.crt --verification-cert file://rootCAverificationCert.crt

aws iot register-ca-certificate --ca-certificate file://intermediateCA.crt --verification-cert file://intermediateCAverificationCert.crt

7. 두 CA 인증서를 활성화하려면 다음 AWS CLI 명령을 사용합니다.

aws iot update-ca-certificate --certificate-id ID --new-status ACTIVE

여기서 각 ID 는 두 인증서 중 하나의 인증서 ID입니다.

디바이스 인증서를 등록하려면

1. AWS IoT에 디바이스 인증서를 등록하려면 다음 AWS CLI 명령을 사용합니다.

aws iot register-certificate --certificate-pem file://deviceCert.crt --ca-certificate-pem file://intermediateCA.crt

2. 디바이스 인증서를 활성화하려면 다음 AWS CLI 명령을 사용합니다.

aws iot update-certificate --certificate-id ID --new-status ACTIVE

여기서 각 ID 는 인증서의 인증서 ID입니다.

ca.config

현재 작업 디렉터리에서 ca.config 파일에 다음 텍스트를 저장합니다.

이 파일은 수정된 버전입니다. openssl.cnfOpenSSL 예제 구성 파일입니다.

## OpenSSL example configuration file.# This is mostly being used for generation of certificate requests.#

# This definition stops the following lines choking if HOME isn't# defined.HOME = .RANDFILE = $ENV::HOME/.rnd

# Extra OBJECT IDENTIFIER info:#oid_file = $ENV::HOME/.oidoid_section = new_oids

# To use this configuration file with the "-extfile" option of the# "openssl x509" utility, name here the section containing the# X.509v3 extensions to use:# extensions = # (Alternatively, use a configuration file that has only# X.509v3 extensions in its main [= default] section.)

[ new_oids ]

61

Page 66: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.# Add a simple OID like this:# testoid1=1.2.3.4# Or use config file substitution like this:# testoid2=${testoid1}.5.6

# Policies used by the TSA examples.tsa_policy1 = 1.2.3.4.1tsa_policy2 = 1.2.3.4.5.6tsa_policy3 = 1.2.3.4.5.7

####################################################################[ ca ]default_ca = CA_default # The default ca section

####################################################################[ CA_default ]

dir = . # Where everything is keptcerts = $dir # Where the issued certs are keptcrl_dir = $dir # Where the issued crl are keptdatabase = $dir/index.txt # database index file.#unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject.new_certs_dir = $dir # default place for new certs.

certificate = $dir/cacert.pem # The CA certificateserial = $dir/serial # The current serial numbercrlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRLcrl = $dir/crl.pem # The current CRLprivate_key = $dir/private/cakey.pem# The private keyRANDFILE = $dir/private/.rand # private random number file

x509_extensions = usr_cert # The extentions to add to the cert

# Comment out the following two lines for the "traditional"# (and highly broken) format.name_opt = ca_default # Subject Name optionscert_opt = ca_default # Certificate field options

# Extension copying option: use with caution.# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs# so this is commented out by default to leave a V1 CRL.# crlnumber must also be commented out to leave a V1 CRL.# crl_extensions = crl_ext

default_days = 365 # how long to certify fordefault_crl_days= 30 # how long before next CRLdefault_md = default # use public key default MDpreserve = no # keep passed DN ordering

# A few difference way of specifying how similar the request should look# For type CA, the listed attributes must be the same, and the optional# and supplied fields are just that :-)policy = policy_match

# For the CA policy[ policy_match ]countryName = matchstateOrProvinceName = matchorganizationName = matchorganizationalUnitName = optional

62

Page 67: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

commonName = suppliedemailAddress = optional

# For the 'anything' policy# At this point in time, you must list all acceptable 'object'# types.[ policy_anything ]countryName = optionalstateOrProvinceName = optionallocalityName = optionalorganizationName = optionalorganizationalUnitName = optionalcommonName = suppliedemailAddress = optional

####################################################################[ req ]default_bits = 2048default_keyfile = privkey.pemdistinguished_name = req_distinguished_nameattributes = req_attributesx509_extensions = v3_ca # The extentions to add to the self signed cert

# Passwords for private keys if not present they will be prompted for# input_password = secret# output_password = secret

# This sets a mask for permitted string types. There are several options. # default: PrintableString, T61String, BMPString.# pkix : PrintableString, BMPString (PKIX recommendation before 2004)# utf8only: only UTF8Strings (PKIX recommendation after 2004).# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).# MASK:XXXX a literal mask value.# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.string_mask = utf8only

# req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]countryName = Country Name (2 letter code)countryName_default = AUcountryName_min = 2countryName_max = 2

stateOrProvinceName = State or Province Name (full name)stateOrProvinceName_default = Some-State

localityName = Locality Name (eg, city)

0.organizationName = Organization Name (eg, company)0.organizationName_default = Internet Widgits Pty Ltd

# we can do this but it is not needed normally :-)#1.organizationName = Second Organization Name (eg, company)#1.organizationName_default = World Wide Web Pty Ltd

organizationalUnitName = Organizational Unit Name (eg, section)#organizationalUnitName_default =

commonName = Common Name (e.g. server FQDN or YOUR name)commonName_max = 64

emailAddress = Email AddressemailAddress_max = 64

# SET-ex3 = SET extension number 3

63

Page 68: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

[ req_attributes ]challengePassword = A challenge passwordchallengePassword_min = 4challengePassword_max = 20

unstructuredName = An optional company name

[ usr_cert ]

# These extensions are added when 'ca' signs a request.

# This goes against PKIX guidelines but some CAs do it and some software# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:TRUE

# Here are some examples of the usage of nsCertType. If it is omitted# the certificate can be used for anything *except* object signing.

# This is OK for an SSL server.# nsCertType = server

# For an object signing certificate this would be used.# nsCertType = objsign

# For normal client use this is typical# nsCertType = client, email

# and for everything including object signing:# nsCertType = client, email, objsign

# This is typical in keyUsage for a client certificate.# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# This will be displayed in Netscape's comment listbox.nsComment = "OpenSSL Generated Certificate"

# PKIX recommendations harmless if included in all certificates.subjectKeyIdentifier=hashauthorityKeyIdentifier=keyid,issuer

# This stuff is for subjectAltName and issuerAltname.# Import the email address.# subjectAltName=email:copy# An alternative to produce certificates that aren't# deprecated according to PKIX.# subjectAltName=email:move

# Copy subject details# issuerAltName=issuer:copy

#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem#nsBaseUrl#nsRevocationUrl#nsRenewalUrl#nsCaPolicyUrl#nsSslServerName

# This is required for TSA certificates.# extendedKeyUsage = critical,timeStamping

[ v3_req ]

# Extensions to add to a certificate request

64

Page 69: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

basicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]

# Extensions for a typical CA

# PKIX recommendation.

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer

# This is what PKIX recommends but some broken software chokes on critical# extensions.

#basicConstraints = critical,CA:true# So we do this instead.basicConstraints = CA:true

# Key usage: this is typical for a CA certificate. However since it will# prevent it being used as a test self-signed certificate it is best# left out by default.# keyUsage = cRLSign, keyCertSign

# Some might want this also# nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation# subjectAltName=email:copy# Copy issuer details# issuerAltName=issuer:copy

# DER hex encoding of an extension: beware experts only!# obj=DER:02:03# Where 'obj' is a standard or added object# You can even override a supported extension:# basicConstraints= critical, DER:30:03:01:01:FF

[ crl_ext ]

# CRL extensions.# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

# issuerAltName=issuer:copyauthorityKeyIdentifier=keyid:always

[ proxy_cert_ext ]# These extensions should be added when creating a proxy certificate

# This goes against PKIX guidelines but some CAs do it and some software# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# Here are some examples of the usage of nsCertType. If it is omitted# the certificate can be used for anything *except* object signing.

# This is OK for an SSL server.# nsCertType = server

65

Page 70: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서BYOC 생성(ECDSA)

# For an object signing certificate this would be used.# nsCertType = objsign

# For normal client use this is typical# nsCertType = client, email

# and for everything including object signing:# nsCertType = client, email, objsign

# This is typical in keyUsage for a client certificate.# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# This will be displayed in Netscape's comment listbox.nsComment = "OpenSSL Generated Certificate"

# PKIX recommendations harmless if included in all certificates.subjectKeyIdentifier=hashauthorityKeyIdentifier=keyid,issuer

# This stuff is for subjectAltName and issuerAltname.# Import the email address.# subjectAltName=email:copy# An alternative to produce certificates that aren't# deprecated according to PKIX.# subjectAltName=email:move

# Copy subject details# issuerAltName=issuer:copy

#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem#nsBaseUrl#nsRevocationUrl#nsRenewalUrl#nsCaPolicyUrl#nsSslServerName

# This really needs to be in place for it to be a proxy certificate.proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

####################################################################[ tsa ]

default_tsa = tsa_config1 # the default TSA section

[ tsa_config1 ]

# These are used by the TSA reply generation only.dir = ./demoCA # TSA root directoryserial = $dir/tsaserial # The current serial number (mandatory)crypto_device = builtin # OpenSSL engine to use for signingsigner_cert = $dir/tsacert.pem # The TSA signing certificate # (optional)certs = $dir/cacert.pem # Certificate chain to include in reply # (optional)signer_key = $dir/private/tsakey.pem # The TSA private key (optional)

default_policy = tsa_policy1 # Policy if request did not specify it # (optional)other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)digests = md5, sha1 # Acceptable message digests (mandatory)accuracy = secs:1, millisecs:500, microsecs:100 # (optional)clock_precision_digits = 0 # number of digits after dot. (optional)ordering = yes # Is ordering defined for timestamps? # (optional, default: no)

66

Page 71: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

tsa_name = yes # Must the TSA name be included in the reply? # (optional, default: no)ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no)

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 TLS 라이브러리를 설정하려면

1. iot_tls.c를 aws_tests IDE 프로젝트에 추가합니다.2. 소스 파일 iot_test_tls.c를 가상 폴더 aws_tests/application_code/common_tests/tls에

추가합니다. 이 파일에는 TLS 테스트가 포함되어 있습니다.

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

로컬 테스트 환경 설정TLS 포트에 대해서는 FreeRTOS TLS 라이브러리에서 지원하는 각 인증 유형마다 하나씩 5개의 개별 테스트가 있습니다.

• TLS_ConnectRSA()

• TLS_ConnectEC()

• TLS_ConnectMalformedCert()

• TLS_ConnectBYOCCredentials()

• TLS_ConnectUntrustedCert()

이러한 테스트를 실행하려면 MQTT 프로토콜을 사용하여 AWS 클라우드와 통신해야 합니다. AWS IoT 엣지에 있는 연결된 디바이스와 메시지를 주고 받는 MQTT 브로커를 호스팅합니다. AWS IoT MQTT 브로커는 상호 인증된 TLS 연결만 허용합니다.

의 지침을 따릅니다.AWS IoT 에 디바이스 연결 (p. 52)를 사용하여 디바이스를 AWS IoT 에 연결할 수 있습니다.

67

Page 72: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

각 TLS 테스트에는 freertos/tests/include/aws_clientcredential_keys.h 또는 freertos/libraries/freertos_plus/standard/tls/test/iot_test_tls.h에서 형식이 지정되고 정의된다른 인증서/키 조합이 필요합니다.

테스트에 필요한 인증서 및 키를 얻으려면 TLS 테스트용 인증서 및 키 설정 (p. 54) 단원의 지침을 따르십시오.

IDE 프로젝트에서 라이브러리를 설정한 후, 테스트용 기타 몇 가지 파일을 구성해야 합니다.

TLS 테스트를 위한 소스 및 헤더 파일을 구성하려면

1. TLS 테스트를 활성화하려면 freertos/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h를 열고 testrunnerFULL_TLS_ENABLED 매크로를1로 설정합니다.

2. freertos/libraries/freertos_plus/standard/utils/src/iot_system_init.c를 열고SYSTEM_Init() 함수에서 SOCKETS_Init()를 호출하는 행의 주석 처리가 해제되었는지 확인합니다.

테스트 실행TLS 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다.

모든 테스트가 통과되면 테스트가 완료됩니다.

Important

TLS 라이브러리를 이식하고 포트를 테스트한 후에는 TLS 기능에 의존하는 보안 소켓 테스트를 실행해야 합니다. 자세한 내용은 보안 소켓 이식 설명서의 Testing (p. 40) 단원을 참조하십시오.

Validation디바이스에서 FreeRTOS S를 사용할 수 있는 자격을 공식적으로 확인하려면 AWS IoT 디바이스 테스터를 사용하여 디바이스의 이식된 소스 코드를 검증해야 합니다. 의 지침을 따릅니다.AWS IoT 디바이스 테

68

Page 73: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서코렘큐트

FreeRTOS를 클릭하여 포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Tester configs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

FreeRTOS TLS 라이브러리를 디바이스로 이식한 후 테스트를 위해 Coremqtt 라이브러리 설정을 시작할 수있습니다. 자세한 내용은 테스트용 CoreMQTT 라이브러리 구성 (p. 69) 단원을 참조하십시오.

테스트용 CoreMQTT 라이브러리 구성엣지에 있는 디바이스는 MQTT 프로토콜을 사용하여 AWS 클라우드와 통신할 수 있습니다. AWS IoT 엣지에 있는 연결된 디바이스와 메시지를 주고 받는 MQTT 브로커를 호스팅합니다.

CoreMQTT 라이브러리는 FreeRTOS 를 실행하는 디바이스에 대해 MQTT 프로토콜을 구현합니다.CoreMQTT 라이브러리를 이식할 필요는 없지만, 검증을 위해서는 디바이스의 테스트 프로젝트가 모든MQTT 테스트를 통과해야 합니다. 자세한 내용은 단원을 참조하십시오.코어QTT 라이브러리의FreeRTOS사용 설명서.

PrerequisitesCoreMQTT 라이브러리 테스트를 설정하려면 다음이 필요합니다.

• TLS 라이브러리의 포트.

플랫폼에 TLS 라이브러리를 이식하는 방법에 대한 자세한 내용은 TLS 라이브러리 이식 (p. 51) 단원을참조하십시오.

IDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정IDE 프로젝트에서 CoreMQTT 라이브러리를 설정하려면

1. 모든 라이브러리 소스 파일을freertos/libraries/coreMQTT/source디렉토리와 해당 하위 디렉토리를aws_testsIDE 프로젝트.

2. 네트워크 계층에 대한 모든 소스 파일 (테스트에서 사용) 을freertos/libraries/abstractions/transport디렉토리와secure_sockets하위 디렉토리에aws_testsIDE 프로젝트.

3. 추가core_mqtt_config.h파일, CoremQTT 라이브러리를 빌드하는 데 필요한 구성 파일 디렉토리freertos/vendors/vendor/boards/board/aws_tests/config_files를 선택합니다.

4. 다음에서 테스트 소스 파일을 추가합니다.freertos/tests/integration_test/core_mqtt_system.c을aws_testsIDE 프로젝트.

로컬 테스트 환경 설정IDE 프로젝트에서 라이브러리를 설정한 후 테스트용 기타 파일을 구성해야 합니다.

MQTT 테스트를 위한 소스 및 헤더 파일을 구성하려면

• MQTT 테스트를 활성화하려면 freertos/vendors/vendor-name/boards/board-name/aws_tests/config_files/aws_test_runner_config.h를 열고testrunnerFULL_CORE_MQTT_AWS_IOT_ENABLED 매크로를 1로 설정합니다.

69

Page 74: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서테스트 실행

테스트 실행MQTT 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다. 모든 테스트가 통과되면 테스트가 완료됩니다.

ValidationFreeRTOS 디바이스를 공식적으로 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된 소스 코드를 검증해야 합니다. 의 지침을 따릅니다.FreeRTOS 용 AWS IoT Device Tester사용를 클릭하여 포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Testerconfigs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

디바이스용 CoreMQTT 라이브러리를 설정한 후 OTA 에이전트 라이브러리 이식을 시작할 수 있습니다. 자세한 내용은 OTA 라이브러리 이식 (p. 71) 단원을 참조하십시오.

디바이스가 OTA 기능을 지원하지 않으면 Bluetooth Low Energy 라이브러리 이식을 시작할 수 있습니다. 자세한 내용은 Bluetooth Low Energy 라이브러리 이식 (p. 78) 단원을 참조하십시오.

디바이스가 OTA 및 Bluetooth Low Energy 기능을 지원하지 않으면 이식이 완료되고 FreeRTOS 검증 프로세스를 시작할 수 있습니다. 단원을 참조하십시오.FreeRTOS 검증 안내서자세한 내용은 단원을 참조하십시오.

테스트용 CoreHTTP 라이브러리 구성에지의 디바이스는 HTTP 프로토콜을 사용하여 AWS 클라우드와 통신할 수 있습니다. AWS IoT 서비스는 엣지에 있는 연결된 디바이스와 메시지를 주고 받는 HTTP 서버를 호스팅합니다.

PrerequisitesCoreHTTP 라이브러리 테스트를 설정하려면 다음이 필요합니다.

• TLS 라이브러리의 포트.

플랫폼에 TLS 라이브러리를 이식하는 방법에 대한 자세한 내용은 TLS 라이브러리 이식 (p. 51) 단원을참조하십시오.

IDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정IDE 프로젝트에서 CoreHTTP 라이브러리를 설정하려면

1. 테스트 소스 파일을 모두freertos/libraries/coreHTTP/source디렉토리와 해당 하위 디렉토리를aws_testsIDE 프로젝트 만들기

2. 네트워크 계층에 대한 모든 소스 파일 (테스트에서 사용) 을freertos/libraries/abstractions/transport디렉터리에 있는secure_sockets하위 디렉토리에aws_testsIDE 프로젝트 만들기

3. 추가core_http_config.h파일을 설정 파일 디렉토리에freertos/vendors/vendor/boards/board/aws_tests/config_files를 선택합니다. 이 파일은 CoreHTTP 라이브러리를 빌드하는 데필요합니다.

70

Page 75: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서로컬 테스트 환경 설정

4. 테스트 소스 파일을 다음에서 추가합니다.freertos/tests/integration_test/core_http_system.c을aws_testsIDE 프로젝트 만들기

로컬 테스트 환경 설정IDE 프로젝트에서 라이브러리를 설정한 후, 테스트용 기타 기타 파일을 구성해야 합니다.

HTTP 테스트를 위한 소스 및 헤더 파일을 구성하려면

• HTTP 테스트를 사용하도록 설정하려면freertos/vendors/vendor-name/boards/board-name/aws_tests/config_files/aws_test_runner_config.h파일을 열고testrunnerFULL_CORE_HTTP_AWS_IOT_ENABLED매크로를1를 선택합니다.

테스트 실행HTTP 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행할 수 있도록 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다. 모든 테스트가 통과되면 테스트가 완료됩니다.

OTA 라이브러리 이식무선 (OTA) 업데이트를 통해 다음을 수행할 수 있습니다.

• 새 펌웨어 이미지를 단일 디바이스, 디바이스 그룹 또는 전체 플릿에 배포합니다.• 그룹에 추가되거나, 재설정되거나, 다시 프로비저닝되는 디바이스에 펌웨어를 배포합니다.• 디바이스에 배포된 이후에 새 펌웨어의 신뢰성과 무결성을 확인합니다.• 배포 진행 상황을 모니터링합니다.• 실패한 배포를 디버깅합니다.• AWS IoT 용 코드 서명을 사용하여 펌웨어에 디지털 방식으로 서명합니다.

자세한 내용은 단원을 참조하십시오.무선 (OFreeRTOS the-Air) 업데이트의FreeRTOS 사용 설명서를 선택합니다.

OTA 에이전트 라이브러리를 사용하여 OTA 기능을 FreeRTOS 애플리케이션에 통합할 수 있습니다. 자세한내용은 단원을 참조하십시오.FreeRTOS OTA 에이전트 라이브러리의FreeRTOS 사용 설명서를 선택합니다.

FreeRTOS 디바이스는 수신한 OTA 펌웨어 이미지에 대해 암호화 코드 서명 확인을 수행해야 합니다. 다음알고리즘이 권장됩니다.

• ECDSA(Elliptic-Curve Digital Signature Algorithm)• NIST P256 곡선• SHA-256 해시

Note

현재 FreeRTOS OTA 업데이트 라이브러리의 포트는 검증에 필요하지 않습니다.

71

Page 76: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Prerequisites

PrerequisitesOTA 에이전트 라이브러리를 이식하려면 다음이 필요합니다.

• TLS 라이브러리의 포트.

자세한 정보는 TLS 라이브러리 이식 (p. 51) 단원을 참조하십시오.• OTA 업데이트를 지원할 수 있는 부트로더입니다.

부트로더 데모 애플리케이션을 이식하는 방법에 대한 자세한 내용은 부트로더 데모 이식 (p. 73) 단원을참조하십시오.

Portingfreertos/vendors/vendor/boards/board/ports/ota/aws_ota_pal.c에는 플랫폼 추상화 계층(PAL) 함수 세트에 대한 빈 정의가 포함되어 있습니다. 적어도 이 표에 나열된 함수 세트를 구현하십시오.

기능 설명

prvPAL_Abort OTA 업데이트를 중단합니다.

prvPAL_CreateFileForRx 데이터 청크가 수신되면 저장할 파일을 만듭니다.

prvPAL_CloseFile 지정된 파일을 닫습니다. 암호화 보호를 구현하는스토리지를 사용 중인 경우 파일을 인증할 수 있습니다.

prvPAL_WriteBlock 지정된 파일의 지정된 오프셋에 데이터 블록을 씁니다. 성공 시, 기록된 바이트 수를 반환합니다. 그렇지않은 경우 부정적인 오류 코드를 반환합니다.

prvPAL_ActivateNewImage 새 펌웨어 이미지를 활성화하거나 실행합니다. 일부포트의 경우 디바이스가 프로그래밍 방식으로 동기적으로 재설정되면 이 함수가 반환되지 않을 수 있습니다.

prvPAL_SetPlatformImageState 플랫폼이 최신 OTA 펌웨어 이미지(또는 번들)를 수락하거나 거부하는 데 필요한 작업을 수행합니다.이 함수를 구현하는 방법을 결정하려면 보드(플랫폼) 세부 사항 및 아키텍처 설명서를 참조하십시오.

prvPAL_GetPlatformImageState OTA 업데이트 이미지의 상태를 가져옵니다.

디바이스에 내장된 지원 기능이 있는 경우 이 표에 있는 함수를 구현하십시오.

기능 설명

prvPAL_CheckFileSignature 지정된 파일의 서명을 검증합니다.

prvPAL_ReadAndAssumeCertificate 파일 시스템에서 지정된 서명자 인증서를 읽고 호출자에게 반환합니다.

72

Page 77: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서IoT 디바이스 부트로더

OTA 업데이트를 지원할 수 있는 부트로더가 있는지 확인합니다. FreeRTOS 와 함께 제공되는 부트로더 데모 애플리케이션을 이식하는 방법 또는 IoT 디바이스 부트로더를 생성하는 방법에 대한 지침은 단원을 참조하십시오.IoT 디바이스 부트로더 (p. 73)를 선택합니다.

IoT 디바이스 부트로더부트로더 데모 이식FreeRTOS 에는 Microchip Curiosity PIC32MZEF 플랫폼용 데모 부트로더 애플리케이션이 포함되어 있습니다. 자세한 내용은 단원을 참조하십시오.Microchip Curiosity PIC32MZEF용 데모 부트로더의FreeRTOS 사용설명서를 선택합니다. 이 데모를 다른 플랫폼에 이식할 수 있습니다.

데모를 플랫폼으로 이식하지 않도록 선택하는 경우 고유의 부트로더 애플리케이션을 사용할 수 있습니다.IoT 디바이스 부트로더에 대한 위협 모델링 (p. 73)에서는 고유의 보안 부트로더 애플리케이션을 작성하는 데 도움이 되는 위협 모델링에 대해 설명합니다.

IoT 디바이스 부트로더에 대한 위협 모델링

Background

작업 정의에 따르면, 이 위협 모델에서 참조되는 임베디드 IoT 디바이스는 클라우드 서비스와 상호 작용하는마이크로컨트롤러 기반 제품입니다. 소비자, 상업용 또는 산업용 환경에서 이러한 디바이스를 배포할 수 있습니다. IoT 디바이스는 사용자, 환자, 기계 또는 환경에 대한 데이터를 수집할 수 있으며 공장 기계의 조명전구 및 도어 잠금 기능을 제어할 수 있습니다.

위협 모델링은 가상 악의적 사용자의 시점에서 보안에 대한 접근 방식입니다. 악의적 사용자의 목표와 방법을 고려하여 위협 목록이 생성됩니다. 위협은 악의적 사용자가 수행하는 리소스 또는 자산에 대한 공격입니다. 이 목록을 우선 순위 지정하고 사용하여 완화 방법을 식별하거나 생성합니다. 완화 방법을 선택할 때 해당 완화를 구현하고 유지 관리하는 비용은 해당 완화가 제공하는 보안 가치와 균형을 이루어야 합니다. 여러가지 위협 모델 방법론이 있습니다. 각 방법론은 안전하고 성공적인 IoT 제품의 개발을 지원할 수 있습니다.

는 IoT 디바이스에 대한 OTA (“Over-the-Air”) 소프트웨어 업데이트를 제공합니다. 시설 업데이트는 클라우드서비스를 온디바이스 소프트웨어 라이브러리 및 파트너가 제공하는 부트로더와 결합합니다. 이 위협 모델은특히 부트로더에 대한 위협에 중점을 둡니다.

부트로더 사용 사례

• 배포하기 전에 펌웨어를 디지털 방식으로 서명하고 암호화합니다.• 새 펌웨어 이미지를 단일 디바이스, 디바이스 그룹 또는 전체 플릿에 배포합니다.• 디바이스에 배포된 이후에 새 펌웨어의 신뢰성과 무결성을 확인합니다.• 디바이스는 신뢰할 수 있는 소스의 수정되지 않은 소프트웨어만 실행합니다.• 디바이스는 OTA를 통해 수신된 오류 소프트웨어에 대해 복원력이 있습니다.

데이터 흐름 다이어그램

73

Page 78: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서IoT 디바이스 부트로더

Threats

일부 공격에는 여러 가지 완화가 있습니다. 예를 들어, 악성 펌웨어 이미지를 전달하는 네트워크 중간자 공격은 TLS가 제공하는 인증서와 새 펌웨어 이미지의 코드 서명자 인증서 모두에 대한 신뢰를 검증하여 완화됩니다. 부트로더 보안을 최대화하기 위해 부트로더가 아닌 모든 완화는 신뢰할 수 없는 것으로 간주됩니다. 부트로더에는 각 공격에 대한 내장 완화가 있어야 합니다. 계층적 완화를 갖추는 것은 심층적 방어라고 알려져있습니다.

위협:

• 공격자는 서버에 대한 디바이스의 연결을 하이재킹하여 악성 펌웨어 이미지를 전달합니다.

완화 예

• 부팅 시 부트로더가 알려진 인증서를 사용하여 이미지의 암호화 서명을 검증합니다. 검증이 실패하면 부트로더가 이전의 이미지로 롤백됩니다.

• 공격자는 버퍼 오버플로를 이용하여 플래시에 저장된 기존 펌웨어 이미지에 악성 동작을 도입합니다.

완화 예

• 앞의 설명과 같이, 부팅 시 부트로더가 검증합니다. 사용 가능한 이전 이미지가 없는 상태에서 검증이 실패하면 부트로더가 중지됩니다.

• 앞의 설명과 같이, 부팅 시 부트로더가 검증합니다. 사용 가능한 이전 이미지가 없는 상태에서 검증이 실패하면 부트로더가 유사 시 대기 OTA 전용 모드로 전환됩니다.

• 공격자는 이전에 저장된 악용 가능한 이미지로 디바이스를 부팅합니다.

완화 예

• 새 이미지를 성공적으로 설치하고 테스트하면 마지막 이미지를 저장하는 플래시 섹터가 지워집니다.• 성공적으로 업그레이드할 때마다 퓨즈가 버닝되고, 정확한 수의 퓨즈가 버닝되지 않으면 각 이미지가 실

행을 거부합니다.• OTA 업데이트가 디바이스를 구성하는 잘못된 이미지 또는 악성 이미지를 전달합니다.

완화 예

• 부트로더가 이전 이미지로 롤백을 트리거하는 하드웨어 watchdog 타이머를 시작합니다.• 공격자는 디바이스가 서명되지 않은 이미지를 수락하도록 부트로더를 패치하여 이미지 검증을 우회합니

다.

74

Page 79: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서IoT 디바이스 부트로더

완화 예

• 부트로더가 ROM(읽기 전용 메모리)에 있으며 부트로더를 수정할 수 없습니다.• 부트로더가 OTP(일회성 프로그래밍 가능한 메모리)에 있으며 부트로더를 수정할 수 없습니다.• 부트로더가 ARM TrustZone의 보안 영역에 있으며 부트로더를 수정할 수 업습니다.

• 공격자는 디바이스가 악성 이미지를 수락하도록 검증 인증서를 교체합니다.

완화 예

• 인증서가 암호화 보조 프로세서에 있으며 인증서를 수정할 수 없습니다.• 인증서가 ROM(또는 OTP 또는 보안 영역)에 있으며 인증서를 수정할 수 없습니다.

추가 위협 모델링

이 위협 모델은 부트로더만 고려합니다. 추가 위협 모델링을 통해 전체 보안을 개선할 수 있습니다. 권장 방법은 악의적 사용자의 목표, 이러한 목표가 대상으로 하는 자산, 자산에 대한 진입점을 나열하는 것입니다.자산을 제어하기 위해 진입점에 있는 공격자를 고려하여 위협 목록을 만들 수 있습니다. 다음은 IoT 디바이스에 대한 목표, 자산 및 진입점의 사례 목록입니다. 이러한 목록은 완전하지 않으며 더 많은 생각을 유도하기위한 것입니다.

악의적 사용자의 목표

• 현금 갈취• 평판 손상• 데이터 위조• 리소스 전용• 대상에 대한 원격 염탐• 사이트에 대한 물리적 액세스 획득• 막대한 피해 초래• 공포심 주입

핵심 자산

• 프라이빗 키• 클라이언트 인증서• CA 루트 인증서• 보안 자격 증명 및 토큰• 고객의 개인 식별 정보• 기업 비밀 구현• 센서 데이터• 클라우드 분석 데이터 스토어• 클라우드 인프라

진입점

• DHCP 응답• DNS 응답• MQTT over TLS• HTTPS 응답

75

Page 80: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

• OTA 소프트웨어 이미지• 애플리케이션에 따라 결정되는 기타 항목(예: USB)• 버스에 대한 물리적 액세스• 캡슐화 해제된 IC

TestingIDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 OTA 라이브러리를 설정하려면

1. 소스 파일 freertos/vendors/vendor/boards/board/ports/ota/aws_ota_pal.c를aws_tests IDE 프로젝트에 추가합니다.

2. 다음 테스트 소스 파일을 aws_tests IDE 프로젝트에 추가합니다.

• freertos/libraries/freertos_plus/aws/ota/test/aws_test_ota_cbor.c

• freertos/libraries/freertos_plus/aws/ota/test/aws_test_ota_agent.c

• freertos/libraries/freertos_plus/aws/ota/test/aws_test_ota_pal.c

• freertos/demos/ota/aws_iot_ota_update_demo.c

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

다음은 OTA 라이브러리의 이식 가능 계층 대상 정의에 대한 예제입니다.

# OTAafr_mcu_port(ota)target_sources( AFR::ota::mcu_port INTERFACE "path/aws_ota_pal.c")

OTA 라이브러리 포트에 대한 테스트는 OTA 에이전트 및 OTA PAL 테스트 (p. 77) 및 OTA 종단 간 테스트 (p. 78) 두 가지가 있습니다.

76

Page 81: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

OTA 에이전트 및 OTA PAL 테스트

로컬 테스트 환경 설정

OTA 에이전트 및 OTA PAL 테스트를 위한 소스 및 헤더 파일을 구성하려면

1. freertos/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h를 열고 testrunnerFULL_OTA_AGENT_ENABLED 및testrunnerFULL_OTA_PAL_ENABLED 매크로를 1로 설정하여 에이전트 및 PAL 테스트를 활성화합니다.

2. ota/test에서 디바이스의 서명 인증서를 선택합니다. 인증서는 검증을 위해 OTA 테스트에 사용됩니다.

테스트 코드에는 세 가지 유형의 서명 인증서를 사용할 수 있습니다.

• RSA/SHA1• RSA/SHA256• ECDSA/SHA256

RSA/SHA1 및 RSA/SHA256은 기존 플랫폼에서만 사용할 수 있습니다. ECDSA/SHA256은 OTA 업데이트에 권장됩니다. 다른 체계가 있는 경우FreeRTOS 엔지니어링 팀에 문의하십시오를 선택합니다.

테스트 실행

OTA 에이전트 및 OTA PAL 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다.

...

77

Page 82: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

OTA 종단 간 테스트종단 간 OTA 테스트를 설정 및 실행하려면

1. README 파일(freertos/tools/ota_e2e_test/README.md)의 설정 지침을 따릅니다.2. 에이전트 및 PAL 테스트 실행으로 인해 aws_clientcredential.h,

aws_clientcredential_keys.h, aws_application_version.h 또는aws_ota_codesigner_certificate.h 헤더 파일이 수정되지 않았는지 확인합니다.

3. OTA 엔드 투 엔드 테스트 스크립트를 실행하려면 README 파일(freertos/tools/ota_e2e_test/README.md)의 예제를 따르십시오.

Validation디바이스를 공식적으로 FreeRTOS 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된 소스 코드를 검증해야 합니다. 의 지침을 따릅니다.AWS IoT Device Tester를 FreeRTOS 사용를 클릭하여 포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Testerconfigs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

FreeRTOS OTA 라이브러리와 부트로더 데모를 이식한 후에는 Bluetooth Low Energy 라이브러리 이식을 시작할 수 있습니다. 지침은 Bluetooth Low Energy 라이브러리 이식 (p. 78)을 참조하십시오.

디바이스가 Bluetooth Low Energy 기능을 지원하지 않으면 완료 후 FreeRTOS 검증 프로세스를 시작할 수있습니다. 자세한 내용은 단원을 참조하십시오.FreeRTOS 검증 안내서를 선택합니다.

Bluetooth Low Energy 라이브러리 이식Bluetooth Low Energy 라이브러리를 사용하여 Wi-Fi를 프로비저닝하고 Bluetooth Low Energy를 통해MQTT 메시지를 보낼 수 있습니다. 또한 Bluetooth Low Energy 라이브러리에는 Bluetooth Low Energy 스택과 직접 통신하는 데 사용할 수 있는 상위 수준의 API가 포함되어 있습니다. 자세한 내용은 단원을 참조하십시오.Bluetooth FreeRTOS Energy 라이브러리FreeRTOS 사용 설명서를 참조하십시오.

Note

현재 FreeRTOS Bluetooth Low Energy 라이브러리의 포트는 검증에 필요하지 않습니다.

PrerequisitesBluetooth Low Energy 라이브러리를 이식하려면 다음이 필요합니다.

78

Page 83: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Porting

• 공급업체가 제공한 Bluetooth Low Energy 드라이버가 포함된 IDE 프로젝트 또는 CMakeLists.txt 목록파일.

테스트 프로젝트 설정에 대한 자세한 내용은 이식을 위해 FreeRTOS 소스 코드 설정 (p. 8) 단원을 참조하십시오.

• FreeRTOS 커널의 검증된 구성.

플랫폼에 맞는 FreeRTOS 커널 구성에 대한 정보는 FreeRTOS 커널 포트 구성 (p. 28) 단원을 참조하십시오.

• 메모리 카드가 있는 Raspberry Pi 3 Model B+

Porting에 있는 세 개의 파일freertos/libraries/abstractions/ble_hal/include폴더는 FreeRTOSBluetooth Low Energy API를 정의합니다.

• bt_hal_manager.h

• bt_hal_manager_adapter_ble.h

• bt_hal_gatt_server.h

각 파일에는 API를 설명하는 설명이 들어 있습니다. 다음 API를 구현해야 합니다.

bt_hal_manager.h

• pxBtManagerInit

• pxEnable

• pxDisable

• pxGetDeviceProperty

• pxSetDeviceProperty(eBTpropertyRemoteRssi와 eBTpropertyRemoteVersionInfo를 제외한 모든 옵션은 필수임)

• pxPair

• pxRemoveBond

• pxGetConnectionState

• pxPinReply

• pxSspReply

• pxGetTxpower

• pxGetLeAdapter

• pxDeviceStateChangedCb

• pxAdapterPropertiesCb

• pxSspRequestCb

• pxPairingStateChangedCb

• pxTxPowerCb

bt_hal_manager_adapter_ble.h

• pxRegisterBleApp

• pxUnregisterBleApp

• pxBleAdapterInit

• pxStartAdv

79

Page 84: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

• pxStopAdv

• pxSetAdvData

• pxConnParameterUpdateRequest

• pxRegisterBleAdapterCb

• pxAdvStartCb

• pxSetAdvDataCb

• pxConnParameterUpdateRequestCb

• pxCongestionCb

bt_hal_gatt_server.h

• pxRegisterServer

• pxUnregisterServer

• pxGattServerInit

• pxAddService

• pxAddIncludedService

• pxAddCharacteristic

• pxSetVal

• pxAddDescriptor

• pxStartService

• pxStopService

• pxDeleteService

• pxSendIndication

• pxSendResponse

• pxMtuChangedCb

• pxCongestionCb

• pxIndicationSentCb

• pxRequestExecWriteCb

• pxRequestWriteCb

• pxRequestReadCb

• pxServiceDeletedCb

• pxServiceStoppedCb

• pxServiceStartedCb

• pxDescriptorAddedCb

• pxSetValCallbackCb

• pxCharacteristicAddedCb

• pxIncludedServiceAddedCb

• pxServiceAddedCb

• pxConnectionCb

• pxUnregisterServerCb

• pxRegisterServerCb

Testing이 다이어그램은 Bluetooth Low Energy 테스트 프레임워크를 보여줍니다.

80

Page 85: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

Bluetooth Low Energy 포트를 테스트하기 위해 컴퓨터는 SSH를 통해 외부 Bluetooth 지원 디바이스(Raspberry Pi 3 Model B+)와 통신하고 Bluetooth Low Energy를 통해 사용 중인 디바이스와 통신합니다.

Bluetooth Low Energy 이식 및 검증 테스트는 FreeRTOS Bluetooth Low Energy 아키텍처의 제조업체 하드웨어 스택 바로 위에 있는 하위 수준 래퍼 계층을 대상으로 합니다.

IDE를 사용하여 테스트 프로젝트를 빌드하는 경우 IDE 프로젝트에서 라이브러리 포트를 설정해야 합니다.

IDE 테스트 프로젝트 설정이식 및 테스트에 IDE를 사용하는 경우 이식된 코드를 테스트하려면 먼저 몇 가지 소스 파일을 IDE 테스트프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 디스크 프로젝트 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의 중복 사본을 만들지 마십시오.

IDE 프로젝트에서 Bluetooth Low Energy 라이브러리를 설정하려면

1. freertos/vendors/vendor/boards/board/ports/ble의 모든 파일을 aws_tests IDE 프로젝트에 추가합니다.

2. freertos/libraries/abstractions/ble_hal/include의 모든 파일을 aws_tests IDE 프로젝트에 추가합니다.

3. freertos/libraries/c_sdk/standard/ble의 모든 파일을 aws_tests IDE 프로젝트에 추가합니다.

4. freertos/vendors/vendor/boards/board/aws_tests/application_code/main.c를 열고필요한 Bluetooth Low Energy 드라이버를 활성화합니다.

CMakeLists.txt 파일 구성CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 이식 가능 계층대상을 정의해야 합니다.

CMakeLists.txt에서 라이브러리의 이식 가능 계층 대상을 정의하려면 FreeRTOS 이동식 계층 (p. 15)의지침을 따릅니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의 예제가 포함되어 있습니다. 이식하는 라이브러리 정의의 주석 처리를 해제하고 플랫폼에 맞게 수정할 수 있습니다.

81

Page 86: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

로컬 테스트 환경 설정테스트를 위해 Raspberry Pi를 설정하려면

1. Setting up your Raspberry Pi의 지침에 따라 Raspberry Pi와 Raspbian OS를 설정합니다.2. kernel.org repository에서 bluez 5.50을 다운로드합니다.3. kernel.org 리포지토리의 README에 있는 지침에 따라 Raspberry Pi에 bluez 5.50을 설치합니다.4. Raspberry Pi에서 SSH를 활성화합니다. 지침은 Raspberry Pi 설명서를 참조하십시오.5. 컴퓨터에서 freertos/libraries/abstractions/ble_hal/test/ble_test_scripts/

runPI.sh 스크립트를 열고 처음 두 줄의 IP 주소를 Raspberry Pi의 IP 주소로 변경합니다.

#!/bin/sh

scp * [email protected]: ssh -t -t 192.168.1.4 -l root << 'ENDSSH'rm -rf "/var/lib/bluetooth/*"hciconfig hci0 resetpython test1.pysleep 1ENDSSH

테스트 실행Bluetooth Low Energy 테스트를 실행하려면

1. runPI.sh 스크립트를 실행합니다.2. 장치에 저장된 기존 BLE 결합을 지웁니다.3. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.4. UART 콘솔에서 테스트 결과를 확인합니다.

ValidationFreeRTOS 용 디바이스를 공식적으로 검증하려면 AWS IoT Device Tester를 사용하여 디바이스의 이식된소스 코드를 검증해야 합니다. 의 안내를 따릅니다.FreeRTOS 에 AWS IoT Device 테스터 사용를 클릭하여포트 유효성 검사를 위해 장치 테스터를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 Device Testerconfigs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.

Bluetooth Low Energy 라이브러리를 이식한 후에는 FreeRTOS 검증 프로세스를 시작할 수 있습니다. 자세한 내용은 단원을 참조하십시오.FreeRTOS 검증 안내서를 선택합니다.

장치가 Over of Air 업데이트를 지원하는 경우 동반자 장치를 사용하여 Bluetooth 저에너지를 통해 무선 업데이트를 통해 확인해야 합니다. 자세한 내용은 다음 단원을 참조하십시오.Bluetooth 저에너지를 사용하여 무선 업데이트 수행 (p. 82)를 선택합니다.

Bluetooth 저에너지를 사용하여 무선 업데이트 수행IntroductionFreeRTOS 블루투스 저에너지 (BLE) 및 Over the Air 업데이트 (OTA) 라이브러리를 사용하여 보조 장치에서실행되는 MQTT 프록시를 통해 Bluetooth 저에너지를 통해 마이크로 컨트롤러 장치에 대한 펌웨어 업데이트

82

Page 87: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Prerequisites

를 수행할 수 있습니다. 업데이트는 AWS IoT OTA 작업을 사용하여 수행됩니다. 동반 디바이스는 데모 앱에입력한 Amazon Cognito 자격 증명을 사용하여 AWS IoT 에 연결합니다. 공인 운영자가 클라우드에서 OTA업데이트를 시작합니다. 데모 앱을 통해 장치가 연결되면 OTA 업데이트가 시작되고 장치에서 펌웨어가 업데이트됩니다.

Prerequisites1. 포트 오버 더 에어 업데이트 에이전트 각 마이크로 컨트롤러 장치:

• 단원의 단계를 따르십시오.Porting (p. 72)및IoT 디바이스 부트로더 (p. 73)를 선택합니다.• 포팅 후 다음 단계를 따릅니다.Testing (p. 76)을 클릭하여 OTA PAL 테스트를 통과했는지 확인합니

다.2. Bluetooth Low Energy 라이브러리를 각 마이크로 컨트롤러에 이식하려면

• Bluetooth Low Energy 라이브러리 이식 (p. 78) 단원의 단계를 따르십시오.3. AWS 계정이 아직 없는 경우 설정합니다 (프리 티어이면 충분합니다).4. 당신은 안드로이드 v 6.0 이상 및 블루투스 버전 4.2 이상과 동반자 장치로 안드로이드 폰에 액세스 할 수

있어야합니다.5. 개발 플랫폼을 설정하려면 다음을 수행합니다.

• Android Studio를 선택합니다.• AWS CLI가 설치되었습니다.• Python3이 설치되었습니다.• 파이썬용 boto3 AWS 소프트웨어 개발자 키트 (SDK).

Setup다음은 설치에 필요한 단계에 대한 개요입니다. WiFi 또는 이더넷을 통한 Over the Air 업데이트를 테스트하기 위해 이미 수행한 경우 1단계와 2단계를 건너뛸 수 있습니다.

1. 스토리지 구성 — S3 버킷 및 정책을 생성하고 업데이트를 수행할 수 있는 IAM 사용자를 구성합니다.2. 코드 서명 인증서 생성 — 서명 인증서를 생성하고 IAM 사용자가 펌웨어 업데이트에 서명하도록 허용합니

다.3. Amazon Cognito 인증 구성 — 자격 증명 공급자, 사용자 풀 및 사용자 풀에 대한 애플리케이션 액세스를

생성합니다.4. Amazon Freertos 구성 — Bluetooth 저에너지, 클라이언트 자격 증명 및 코드 서명 공개 인증서를 설정합

니다.5. Android 앱 구성— 자격 증명 공급자 및 사용자 풀을 설정한 다음 애플리케이션을 Android 디바이스에 배

포합니다.

단계 1: 스토리지 구성을 구성합니다.시작 하 여 이러한 단계를 건너뛸 수 있는AWS CloudFormation 템플릿를 선택합니다.

1. S3 버킷 생성펌웨어 이미지를 저장할 수 있도록 버전 관리가 활성화되어 있습니다.2. OTA 업데이트 서비스 역할 생성를 역할에 추가하려면 다음과 같은 관리형 정책을 추가합니다.

• AWSIotLogging• AWSIoTRuleActions• AWSIoThingsRegistration• AWS프리어토소타업데이트

3. 인라인 정책 추가를 역할에 추가하여 AWS IoT 작업을 수행하고 생성한 S3 버킷에 대한 액세스를 허용하도록 허용합니다.

83

Page 88: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Setup

4. IAM 사용자 생성OTA 업데이트를 수행할 수 있습니다. 이 사용자는 계정의 AWS IoT 디바이스에 펌웨어업데이트를 서명하고 배포할 수 있으며 모든 디바이스에서 OTA 업데이트를 수행할 수 있습니다. 액세스는 신뢰할 수 있는 엔터티로 제한되어야 합니다.

5. OTA 사용자 정책을 사용하여 권한 연결를 선택합니다.6. 인라인 정책 생성에서 생성한 IAM 사용자가 펌웨어에 서명할 수 있도록 합니다.

단계 2: 코드 서명 인증서 생성코드 서명 인증서 생성펌웨어에 서명하는 데 사용할 수 있습니다. 인증서를 가져올 때 인증서 ARN 확인합니다.

aws acm import-certificate --profile=ota-update-user --certificate file://ecdsasigner.crt --private-key file://ecdsasigner.key{"CertificateArn": "arn:aws:acm:region:account:certificate/certid"}

ARN 은 나중에 서명 프로필을 만드는 데 사용됩니다. 원하는 경우 이 시점에서 다음 명령을 사용하여 프로파일을 작성할 수 있습니다.

aws signer put-signing-profile --profile=ota-update-user --profile-name myOTAProfile --signing-material certificateArn=arn:aws:acm:region:account:certificate/certid --platform AmazonFreeRTOS-Default --signing-parameters certname=/cert.pem{"arn": "arn:aws:signer::account:/signing-profiles/myOTAProfile"}

단계 3: Amazon Cognito 인증 구성AWS IoT 구성

먼저 AWS IoT 사물 및 정책을 설정합니다. Amazon Cognito 를 사용하여 인증될 Android 휴대폰에서 MQTT프록시를 사용하고 있으므로 디바이스에는 AWS IoT 인증서가 필요하지 않습니다.

AWS IoT 정책을 생성하려면 AWS 리전 및 AWS 계정 번호를 알아야 합니다.

단계 3a: AWS IoT 정책 생성

1. 에 로그인합니다.AWS IoT 콘솔를 선택합니다.2. 오른쪽 상단 모서리에서 계정을 선택하고내 계정12자리 계정 ID를 적어 두십시오.3. 왼쪽 탐색 창에서 설정을 선택합니다. 아래에 있음사용자 지정 엔드포인트에서 엔드포인트 값을 기록해

둡니다. 엔드 포인트는”xxxxxxxxxxxxxx.iot입니다.us-west-2.amazonaws.com 을 참조하십시오. 이예에서 AWS 리전은 “us-west-2"입니다.

4. 왼쪽 탐색 창에서 []Secure를 선택하고정책를 선택한 다음생성를 선택합니다.5. 계정에 정책을 생성하지 않은 경우 “아직 정책이 없습니다.” 라는 메시지가 표시되며정책 생성를 선택합

니다.6. 정책의 이름을 입력합니다 (예: “mqtt_proxy_iot_policy”).7. Add statements(설명문 추가) 섹션에서 Advanced mode(고급 모드)를 선택합니다. 다음 JSON을 복사

하여 정책 편집기 창에 붙여 넣습니다. “aws-계정 ID”를 계정 ID로 바꿉니다 (2단계). “us-west-2" (3단계)와 같이 “aws-region을 리전”으로 바꿉니다.

84

Page 89: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Setup

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "arn:aws:iot:region:account-id:*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:region:account-id:*" } ]}

8. Create를 선택합니다.

단계 3b: AWS IoT 만들기

1. 에 로그인합니다.AWS IoT 콘솔를 선택합니다.2. 왼쪽 탐색 창에서 []관리를 선택한 다음사물를 선택합니다. 오른쪽 상단 모서리에서 [] 를 선택합니다.생

성를 선택합니다.3. 계정에 등록된 IoT 사물이 없는 경우 “아직 사물이 없습니다”라는 메시지가 표시되고사물 등록를 선택합

니다.4. [Creating AWS IoT things] 페이지에서 [Create a single thing]을 선택합니다.5. 에디바이스를 사물 레지스트리에 추가페이지에서 사물 이름 (예: “my_thing”) 을 입력합니다. 영숫자, 하

이픈 (“-”) 및 밑줄 (“_”) 만 사용할 수 있습니다. [Next]를 선택합니다.6. 에항목에 인증서를 추가하십시오페이지의인증서를 건너 뛰고 물건을 만듭니다.를 선택하고인증서없이

물건 만들기를 선택합니다.

인증 및 권한 부여에 Amazon Cognito 자격 증명을 사용하는 BLE 프록시 모바일 앱을 사용하고 있으므로 디바이스 인증서가 필요하지 않습니다.

Amazon Cognito 구성

Amazon Cognito 는 MQTT 프록시 모바일 앱의 인증에 필요합니다. 보안 주체가 AWS IoT 정책을 자격 증명에 연결할 수 있도록 인증된 자격 증명에 IAM 정책이 연결됩니다.

3c 단계: Amazon Cognito 사용자 풀 설정

1. 에 로그인합니다.Amazon Cognito 콘솔를 선택합니다.2. 오른쪽 상단 탐색 영역에서사용자 풀 생성를 선택합니다.3. 풀 이름을 입력합니다 (예: “mqtt_프록시_사용자_풀”).4. [Review defaults]를 선택합니다.

85

Page 90: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Setup

5. 다음앱 클라이언트를 선택한 다음앱 클라이언트 추가...를 선택한 다음앱 클라이언트 추가를 선택합니다.

6. 앱 클라이언트 이름을 입력합니다 (예: “mqtt_app_client”).7. 다음을 확인하십시오.클라이언트 암호 생성가 선택되어 있습니다.8. [Create app client]를 선택합니다.9. 풀 세부 정보로 돌아가기를 선택합니다.10. 에검토사용자 풀의 [] 페이지에서 [] 를 선택합니다.풀 생성를 선택합니다.11. “사용자 풀이 성공적으로 만들어졌습니다.” 라는 메시지가 표시되어야 합니다.12. “풀 ID”를 적어 두십시오.13. 왼쪽 탐색 창에서 []앱 클라이언트를 선택합니다.14. 다시 시도하려면세부 정보 표시를 선택합니다.15. “앱 클라이언트 ID”와 “앱 클라이언트 암호”를 기록해 둡니다.

3 차원 단계: Amazon Cognito 자격 증명 풀

1. 에 로그인합니다.Amazon Cognito 콘솔를 선택합니다.2. [Create new identity pool]을 선택합니다.3. ID 풀의 이름을 입력합니다 (예: “mqtt_프록시_ID 풀”).4. 확장인증 공급자를 선택합니다.5. 다음을 선택합니다.Cognito탭을 선택합니다.6. 다음을 입력합니다.사용자 풀 ID및앱 클라이언트 ID에서 저장 한 “3c 단계: Amazon Cognito 사용자 풀

설정”.7. [Create Pool]을 선택합니다.8. 다음 페이지에서 [] 를 선택합니다.허용를 선택하여 인증된 자격 증명과 인증되지 않은 자격 증명에 대한

새 역할을 생성합니다.9. 기록해 둡니다.자격 증명 풀 ID형식은 “us-east-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx입니다.” 입니

다.

그런 다음 자격 증명이 IoT 정책을 연결할 수 있도록 인증된 자격 증명에 IAM 정책을 연결합니다.

3e 단계: 인증된 자격 증명에 IAM 정책을 연결합니다.

1. 열기Amazon Cognito 콘솔를 선택합니다.2. 방금 생성한 ID 풀을 선택합니다 (예: “mqtt_프록시_ID 풀”).3. 자격 증명 풀 편집을 선택합니다.4. 인증된 역할에 할당된 IAM 역할 (예: “Cognito_MQTT_프록시_ID_poolauth_역할”) 을 기록해 둡니다.5. IAM 콘솔을 엽니다.6. 탐색 창에서 역할을 선택합니다.7. 역할 (예: “Cognito _mqtt_프록시_자격 증명_역할”) 을 검색한 후 선택합니다.8. 선택인라인 정책 추가를 선택한 다음JSON를 선택합니다.9. 다음 정책을 입력합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow",

86

Page 91: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Setup

"Action": [ "iot:AttachPolicy", "iot:AttachPrincipalPolicy", "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive" ], "Resource": "*" } ]}

10. Review policy(정책 검토)를 선택합니다.11. 정책 이름을 입력합니다 (예: “MQttProxyCognito 정책”).12. [Create policy]를 선택합니다.

단계 4: FreeRTOS 구성OTA 업데이트 데모를 다음과 같이 활성화합니다.

Note

데모 러너에서는 한 번에 하나의 데모만 활성화할 수 있습니다.

1. Open vendors/vendor/boards/board/aws_demos/config_files/aws_demo_config.h.

• 정의CONFIG_OTA_UPDATE_DEMO_ENABLED를 선택합니다.• 변경 사항democonfigNETWORK_TYPES아래로 변경합니다.AWSIOT_NETWORK_TYPE_BLE를 선택

합니다.2. Open demos/include/aws_clientcredential.h:

• 에서 끝점 URL 변경clientcredentialMQTT_BROKER_ENDPOINT[]를 선택합니다.• 사물 이름을 사물의 이름 (예: “my_thing”) 으로 변경하십시

오.clientcredentialIOT_THING_NAME를 선택합니다.

Note

Amazon Cognito 자격 증명을 사용할 때는 인증서를 추가할 필요가 없습니다.3. Open vendors/vendor/boards/board/aws_demos/common/config_files/

aws_iot_network_config.h.

• 변경 사항configSUPPORTED_NETWORKS및configENABLED_NETWORKS만 포함하도록AWSIOT_NETWORK_TYPE_BLE를 선택합니다.

4. Open demos/include/aws_ota_codesigner_certificate.h:

• 변경 사항signingcredentialSIGNING_CERTIFICATE_PEM를 클릭하여 펌웨어 바이너리 파일에서명하는 데 사용할 인증서를 참조합니다.

응용 프로그램을 시작하고 데모 버전을 인쇄해야합니다.

11 13498 [iot_thread] [INFO ][DEMO][134980] Successfully initialized the demo. Network type for the demo: 212 13498 [iot_thread] [INFO ][MQTT][134980] MQTT library successfully initialized.13 13498 [iot_thread] OTA demo version 0.9.20

87

Page 92: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Setup

14 13498 [iot_thread] Creating MQTT Client...

단계 5: Android 앱 구성안드로이드 블루투스 저에너지 SDK와 샘플 앱을 다운로드아마존의 프리어토스 - 블 - 안드로이드SDKGitHub Repo를 사용합니다.

다음과 같이 변경합니다.

1. 파일을 수정합니다.app/src/main/res/raw/awsconfiguration.json:

다음 샘플 JSON의 지침을 사용하여 “Poolid”, “지역”, “AppClientID” 및 “AppClientSecret” 필드를 채웁니다.

{ "UserAgent": "MobileHub/1.0", "Version": "1.0", "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "Cognito->Manage Identity Pools->Federated Identities->mqtt_proxy_identity_pool->Edit Identity Pool->Identity Pool ID", "Region": "Your region (for example us-east-1)" } } },

"IdentityManager": { "Default": {} },

"CognitoUserPool": { "Default": { "PoolId": "Cognito-> Manage User Pools -> mqtt_proxy_user_pool -> General Settings -> PoolId", "AppClientId": "Cognito-> Manage User Pools -> mqtt_proxy_user_pool -> General Settings -> App clients ->Show Details", "AppClientSecret": "Cognito-> Manage User Pools -> mqtt_proxy_user_pool -> General Settings -> App clients ->Show Details", "Region": "Your region (for example us-east-1)" } }}

2. 파일을 수정합니다.app/src/main/java/software/amazon/freertos/DemoConstants.java:

• 앞에서 생성한 정책 이름 (예: “mqtt_proxy_iot_policy”) 을 지정합니다.• 리전 (예: “us-east-1") 을 설정합니다.

3. 데모 앱 빌드 및 설치:

a. Android Studio에서빌드,앱 만들기를 선택합니다.b. 선택실행,앱 실행를 선택합니다. Android Studio의 logcat 창 창으로 이동하여 로그 메시지를 모니터

링 할 수 있습니다.c. Android 기기의 로그인 화면에서 계정을 만듭니다.d. 사용자를 생성합니다. 사용자가 이미 있는 경우 사용자의 자격 증명을 입력합니다.e. FreeRTOS 데모가 장치의 위치에 액세스할 수 있도록 허용합니다.f. Bluetooth Low Energy 디바이스를 검색합니다.

88

Page 93: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

g. 찾은 장치의 슬라이더를 다음으로 이동합니다.:를 선택합니다.h. 언론'y'직렬 포트 디버그 콘솔에서.i. 선택Connect 및 연결를 선택합니다.

이추가 정보...링크가 연결 후 활성화됩니다. 연결 상태가 다음으로 변경됩니다.블레 커넥티드연결이 완료되면 안드로이드 장치 logcat에서:

2019-06-06 20:11:32.160 23484-23497/software.amazon.freertos.demo I/FRD: BLE connection state changed: 0; new state: BLE_CONNECTED

메시지를 전송하기 전에 FreeRTOS 장치와 Android 장치가 MTU를 협상해야 합니다. logcat에서 다음 인쇄물이 표시됩니다.

2019-06-06 20:11:46.720 23484-23497/software.amazon.freertos.demo I/FRD: onMTUChanged : 512 status: Success

장치가 앱에 연결되고 MQTT 프록시를 사용하여 MQTT 메시지 전송을 시작합니다. 장치가 통신할 수 있는지확인하려면 MQTT_CONTROL 특성 데이터 값이 01로 변경되는지 확인하십시오.

2019-06-06 20:12:28.752 23484-23496/software.amazon.freertos.demo D/FRD: <-<-<- Writing to characteristic: MQTT_CONTROL with data: 012019-06-06 20:12:28.839 23484-23496/software.amazon.freertos.demo D/FRD: onCharacteristicWrite for:

마이크로 컨트롤러 콘솔에서의 완벽한 페어링기기가 Android 기기와 페어링되면 본체에서 'y'를 누르라는 메시지가 표시됩니다. 이 단계가 수행될 때까지데모가 작동하지 않습니다.

E (135538) BT_GATT: GATT_INSUF_AUTHENTICATION: MITM RequiredW (135638) BT_L2CAP: l2cble_start_conn_update, the last connection update command still pending.E (135908) BT_SMP: Value for numeric comparison = 39184015 13588 [InputTask] Numeric comparison:39184016 13589 [InputTask] Press 'y' to confirm17 14078 [InputTask] Key acceptedW (146348) BT_SMP: FOR LE SC LTK IS USED INSTEAD OF STK18 16298 [iot_thread] Connecting to broker...19 16298 [iot_thread] [INFO ][MQTT][162980] Establishing new MQTT connection.20 16298 [iot_thread] [INFO ][MQTT][162980] (MQTT connection 0x3ffd5754, CONNECT operation 0x3ffd586c) Waiting for operation completion.21 16446 [iot_thread] [INFO ][MQTT][164450] (MQTT connection 0x3ffd5754, CONNECT operation 0x3ffd586c) Wait complete with result SUCCESS.22 16446 [iot_thread] [INFO ][MQTT][164460] New MQTT connection 0x3ffc0ccc established.23 16446 [iot_thread] Connected to broker.

Testing1. 필수 구성 요소를 설치하려면 다음 명령을 실행합니다.

pip3 install boto3pip3 install pathlib

89

Page 94: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Validation

2. 다운로드python스크립트를 생성합니다.3. FreeRTOS 응용 프로그램 버전을demos/include/aws_application_version.h새 바이너리 파일

을 빌드하십시오.4. 도움말을 보려면 터미널 창에서 다음 명령을 실행합니다.

python3 start_ota.py -h

usage: start_ota.py [-h] --profile PROFILE [--region REGION] [--account ACCOUNT] [--devicetype DEVICETYPE] --name NAME --role ROLE --s3bucket S3BUCKET --otasigningprofile OTASIGNINGPROFILE --signingcertificateid SIGNINGCERTIFICATEID [--codelocation CODELOCATION]Script to start OTA updateoptional arguments:-h, --help show this help message and exit--profile PROFILE Profile name created using aws configure--region REGION Region--account ACCOUNT Account ID--devicetype DEVICETYPE thing|group--name NAME Name of thing/group--role ROLE Role for OTA updates--s3bucket S3BUCKET S3 bucket to store firmware updates--otasigningprofile OTASIGNINGPROFILE Signing profile to be created or used--signingcertificateid SIGNINGCERTIFICATEID certificate id (not arn) to be used--codelocation CODELOCATION base folder location (can be relative)

5. 제공된 AWS CloudFormation 템플릿을 사용하여 리소스를 생성한 경우 다음은 실행 예제입니다.

python3 start_ota_stream.py --profile otausercf --name my_thing --role ota_ble_iot_role-sample --s3bucket afr-ble-ota-update-bucket-sample --otasigningprofile abcd --signingcertificateid certificateid

Validation1. 콘솔에서 OTA 업데이트가 시작되었고 파일 차단 다운로드가 진행 중임을 로그에 표시합니다.

38 2462 [OTA Task] [prvParseJobDoc] Job was accepted. Attempting to start transfer.---49 2867 [OTA Task] [prvIngestDataBlock] Received file block 1, size 102450 2867 [OTA Task] [prvIngestDataBlock] Remaining: 129051 2894 [OTA Task] [prvIngestDataBlock] Received file block 2, size 102452 2894 [OTA Task] [prvIngestDataBlock] Remaining: 128953 2921 [OTA Task] [prvIngestDataBlock] Received file block 3, size 102454 2921 [OTA Task] [prvIngestDataBlock] Remaining: 128855 2952 [OTA Task] [prvIngestDataBlock] Received file block 4, size 102456 2953 [OTA Task] [prvIngestDataBlock] Remaining: 128757 2959 [iot_thread] State: Active Received: 5 Queued: 5 Processed: 5 Dropped: 0

2. OTA 업데이트가 완료되면 업데이트된 펌웨어로 기기가 다시 시작되고 Android 앱에 다시 연결한 다음자체 테스트를 수행합니다.

3. 자체 테스트에 성공하면 업데이트된 펌웨어가 활성 상태로 표시되고 콘솔에 업데이트된 버전이 표시됩니다.

90

Page 95: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서References

13 13498 [iot_thread] OTA demo version 0.9.21

References1. Bluetooth 저에너지 관련 OTA 업데이트 관련 AWS 블로그를 선택합니다.

공통 I/O 라이브러리 포팅일반적으로 디바이스 드라이버는 기본 운영 체제와 독립적이며 지정된 하드웨어 구성에 따라 다릅니다.HAL(하드웨어 추상화 계층)은 드라이버와 상위 수준 애플리케이션 코드 간에 공통 인터페이스를 제공하는래퍼입니다. HAL은 특정 드라이버의 작동 방식에 대한 세부 정보를 추상화하고 유사한 디바이스를 제어하는일관된 API를 제공합니다. 이러한 방식으로 동일한 API를 사용하여 여러 마이크로컨트롤러(MCU) 기반 참조보드에서 다양한 디바이스를 제어할 수 있습니다.

FreeRTOS 공통 I/O는 하드웨어 추상화 계층 역할을 수행합니다. 지원되는 참조 보드에서 공통 직렬 디바이스에 액세스하기 위한 표준 API 세트를 제공합니다. 이러한 API를 사용하면 일부 공통 주변 장치와 통신하고상호 작용하며 애플리케이션 코드가 플랫폼 간에 작동하도록 활성화됩니다. 공통 I/O가 없는 경우 저수준 디바이스로 작업하는 데 필요한 코드는 실리콘 공급업체에 따라 다릅니다.

지원되는 주변 장치

• UART• SPI• I2C

지원되는 기능

• 동기식 읽기/쓰기 — 요청된 양의 데이터가 전송될 때까지 함수가 반환되지 않습니다.• 비동기식 읽기/쓰기 — 함수가 즉시 반환되고 데이터 전송은 비동기적으로 발생합니다. 함수 실행이 완료

되면 등록된 사용자 콜백이 호출됩니다.

주변 장치별

• I2C — 하나의 트랜잭션에서 쓰기 후 읽기 작업을 수행하기 위해 여러 작업을 하나의 트랜잭션으로 결합합니다.

• SPI — 기본 및 보조 간에 데이터를 전송합니다. 즉, 쓰기 및 읽기 작업이 동시에 수행됩니다.

이식

단원을 참조하십시오.FreeRTOS 이식 안내서를 선택합니다.

주제• Prerequisites (p. 92)• Testing (p. 92)• I2C 라이브러리 포팅 (p. 94)• UART 라이브러리 포팅 (p. 96)• SPI 라이브러리 포팅 (p. 98)

91

Page 96: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Prerequisites

Prerequisites공통 I/O 라이브러리를 포팅하려면 다음이 필요합니다.

• 공급업체에서 제공하는 I/O 드라이버가 포함된 IDE 프로젝트 또는 CMakeLists.txt 목록 파일• FreeRTOS 커널의 검증된 구성.

Testing먼저 IDE 프로젝트를 설정하거나 CMake를 구성합니다.

로컬 테스트 환경 설정

테스트 파일 freertos/libraries/abstractions/common_io/test/test_iot_peripheral.c에는 변경이 필요하지 않습니다.

디바이스별 코드는 다음 파일에 있습니다.

• freertos/vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h

• freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c

로컬 테스트 환경을 설정하려면

1. freertos/vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h 테스트 구성 헤더 파일을 생성합니다. 내용은 각 주변 장치의 "Test Setup" 단원을 참조하십시오.

2. freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c 테스트 설정 파일을 생성합니다. 내용은 각 주변 장치의 "설정 테스트" 단원을 참조하십시오.

3. 공통 I/O 테스트를 활성화하려면freertos/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h를 선택합니다.

4. testrunnerFULL_COMMON_IO_ENABLED를 1로 설정합니다.

IDE 테스트 프로젝트 설정

포팅 및 테스트에 IDE를 사용하는 경우 포팅된 코드를 테스트하려면 먼저 소스 파일을 IDE 테스트 프로젝트에 추가해야 합니다.

Important

다음 단계에서는 소스 파일을 현재 온디스크 위치에서 IDE 프로젝트로 추가하십시오. 소스 파일의중복 복사본을 생성하지 마십시오.

IDE 프로젝트에서 공통 I/O 라이브러리를 설정하려면

1. 모든 구현 소스 파일 freertos/vendors/vendor/boards/board/ports/common_io/iot_peripheral.c를 aws_tests IDE 프로젝트에 추가합니다(주변 장치당 한 파일).

2. 모든 테스트 소스 파일 freertos/libraries/abstractions/common_io/test/test_iot_peripheral.c를 aws_tests IDE 프로젝트에 추가합니다(주변 장치당 한 파일).

3. 테스트 구성 파일 freertos/vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h를 aws_tests IDE 프로젝트에 추가합니다(주변 장치당 한 파일).

4. 테스트 설정 파일 freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c를 aws_tests IDE 프로젝트에 추가합니다(주변 장치당 한 파일).

92

Page 97: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Testing

CMakeLists.txt 파일 구성

CMake를 사용하여 테스트 프로젝트를 빌드하는 경우 CMake 목록 파일에서 라이브러리의 포팅 가능 계층대상을 정의해야 합니다.

freertos/vendors/vendor/boards/board/CMakeLists.txt의 CMakeLists.txt 템플릿 목록 파일에는 포팅 가능 계층 대상 정의의 예제가 포함되어 있습니다. 포팅하는 각 라이브러리의 정의를 주석 처리하고 플랫폼에 맞게 수정하십시오.

Example

다음은 공통 I/O 라이브러리의 포팅 가능 계층 대상 정의입니다.

# Common I/Oafr_mcu_port(common_io)target_sources( AFR::common_io::mcu_port INTERFACE # peripheral implementations freertos/vendors/vendor/boards/board/ports/common_io/iot_peripheral_1.c freertos/vendors/vendor/boards/board/ports/common_io/iot_peripheral_2.c freertos/vendors/vendor/boards/board/ports/common_io/iot_peripheral_3.c ... # test configuration and pre-steps freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c)

# -------------------------------------------------------------------------------------------------# FreeRTOS demos and tests# -------------------------------------------------------------------------------------------------

...

if(AFR_IS_TESTING) set(exe_target aws_tests)else() set(exe_target aws_demos)endif()

...

# link common io library along with otherstarget_link_libraries( ${exe_target} PRIVATE AFR::wifi AFR::utils AFR::common_io)

테스트 실행

공통 I/O 테스트를 실행하려면

1. 테스트 프로젝트를 빌드한 다음 실행을 위해 디바이스에 플래시합니다.2. UART 콘솔에서 테스트 결과를 확인합니다.

93

Page 98: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서I2C 라이브러리 포팅

I2C 라이브러리 포팅I2C 라이브러리는 공급업체 제공 I2C 드라이버와 인터페이스됩니다. 디바이스에 I2C 주변 장치가 없으면I2C 인터페이스 포팅을 건너뛸 수 있습니다. I2C 라이브러리는 디바이스에 있는 I2C 주변 장치만 기본으로사용할 수 있습니다.

사전 조건

I2C 라이브러리를 포팅하려면 I2C 보조 디바이스가 필요합니다. 다음 중 하나가 될 수 있습니다.

• 온보드 I2C 센서• Raspberry PI와 같은 외부 디바이스

이식

공급업체에서 제공하는 I2C 드라이버 라이브러리를 사용하면 freertos/libraries/abstractions/common_io/include/iot_i2c.h에 있는 모든 함수를 구현할 수 있습니다. 헤더 파일은 필요한 API 동작정보를 제공합니다. 구현 소스 파일을 생성하고 이름을 freertos/vendors/vendor/boards/board/ports/common_io/iot_i2c.c로 지정해야 합니다.

대상 디바이스에서 I2C 기능이 지원되지 않는 경우 해당 기능이 IOT_I2C_FUNCTION_NOT_SUPPORTED를반환하도록 설정합니다. IOT_I2C_FUNCTION_NOT_SUPPORTED를 반환할 수 있는 함수 목록은freertos/libraries/abstractions/common_io/include/iot_i2c.h에 설명된 API를 참조하십시오.

익명 핸들 "struct IotI2CDescriptor"

일반적으로 드라이버의 핸들과 다양한 상태를 캡슐화합니다. 다음 예를 참조하십시오.

/* Suppose the data type of driver handle for I2C is Driver_I2C_Handle */struct IotI2CDescriptor{ Driver_I2C_Handle xHandle; /* Driver Handle. */ IotI2CConfig_t xConfig; /* Bus Configuration. */ IotI2CCallback_t xCallback; /* Callback function. */ void * pvUserContext; /* User context passed in callback. */ uint16_t usSlaveAddr; /* Slave Address. */ uint16_t usTransmittedTxBytes; /* Number of Transmitted Bytes */ uint16_t usReceivedRxBytes; /* Number of Received Bytes */ SemaphoreHandle_t xSemphr; /* Optional, useful when there is a synchronization situation. */ /* State: if already opened. */ /* State: if send no stop. */};

설정 테스트하드웨어 설정

온보드 센서를 슬레이브 디바이스로 사용하는 경우 이 단계를 건너뛸 수 있습니다.

외부 디바이스를 사용하는 경우 두 디바이스의 SDA(데이터) 라인과 SCL(클럭) 라인을 연결해야 합니다.

I2C 테스트 파일은 freertos/libraries/abstractions/common_io/test/test_iot_i2c.c 디렉터리에서 찾을 수 있습니다.

설정 구성을 테스트하려면

1. freertos/vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h에 I2C 구성을 추가합니다.

94

Page 99: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서I2C 라이브러리 포팅

IOT_TEST_COMMON_IO_I2C_SUPPORTED

이 디바이스에 I2C 주변 장치가 있는 경우 1로 설정합니다. 그렇지 않으면 0으로 설정합니다.IOT_TEST_COMMON_IO_I2C_SUPPORTED_SEND_NO_STOP

I2C가 전송 중지 조건을 명시적으로 지원하지 않으면 1로 설정합니다. 그렇지 않으면 0(으)로 설정합니다.

IOT_TEST_COMMON_IO_I2C_SUPPORTED_CANCEL

I2C가 인터럽트 또는 DMA를 사용하여 비동기 트랜잭션 취소를 지원하는 경우 1로 설정합니다. 그렇지 않으면 0(으)로 설정합니다.

I2C_TEST_SET

테스트할 I2C 인스턴스 수를 지정합니다.2. freertos/vendors/vendor/boards/board/aws_tests/config_files/

test_iot_config.h 파일에서 테스트 데이터를 정의합니다.

i2cTestInstanceIdx

I2C 인스턴스 ID입니다.i2cTestInstanceNum

I2C 인스턴스의 총 수입니다.i2cTestSlaveAddr

디바이스 주소입니다.i2cTestDeviceRegister

테스트 디바이스에 주소를 등록합니다.i2cTestWriteVal

테스트 디바이스에 쓸 바이트 값입니다.gIotI2cHandle

사용하지 않음 컴파일할 null 배열로 정의합니다.

Example

/* I2C includes */#include "iot_i2c.h"

#define IOT_TEST_COMMON_IO_I2C_SUPPORTED 1

#if ( IOT_TEST_COMMON_IO_I2C_SUPPORTED == 1 ) #define IOT_TEST_COMMON_IO_I2C_SUPPORTED_SEND_NO_STOP 1 #define IOT_TEST_COMMON_IO_I2C_SUPPORTED_CANCEL 1#endif

#define I2C_TEST_SET 1

/* Slave address. */const uint8_t i2cTestSlaveAddr[ I2C_TEST_SET ] = { 0xD4 };/* Register address. */const uint8_t i2cTestDeviceRegister[ I2C_TEST_SET ] = { 0x73 };/* A value that is written to slave device during test. */const uint8_t i2cTestWriteVal[ I2C_TEST_SET ] = { 0b01101010 };/* I2C instance ID. */

95

Page 100: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서UART 라이브러리 포팅

const uint8_t i2cTestInstanceIdx[ I2C_TEST_SET ] = { 1 };/* Total number of I2C instances. */const uint8_t i2cTestInstanceNum[ I2C_TEST_SET ] = { 3 };

/* Unused, but this needs to be defined. */IotI2CHandle_t gIotI2cHandle[ 4 ] = { NULL, NULL, NULL, NULL };

3. I2C 테스트 설정 코드를 freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c 파일에 추가합니다.

#include "test_iot_internal.h"

/* These global variables are defined in test_iot_i2c.c. */extern uint8_t uctestIotI2CSlaveAddr;extern uint8_t xtestIotI2CDeviceRegister;extern uint8_t uctestIotI2CWriteVal;extern uint8_t uctestIotI2CInstanceIdx;extern uint8_t uctestIotI2CInstanceNum;

void SET_TEST_IOT_I2C_CONFIG(int testSet){ uctestIotI2CSlaveAddr = i2cTestSlaveAddr[testSet]; xtestIotI2CDeviceRegister = i2cTestDeviceRegister[testSet]; uctestIotI2CWriteVal = i2cTestWriteVal[testSet]; uctestIotI2CInstanceIdx = i2cTestInstanceIdx[testSet]; uctestIotI2CInstanceNum = i2cTestInstanceNum[testSet];}

UART 라이브러리 포팅UART 라이브러리는 공급업체에서 제공하는 UART 드라이버와 상호 작용합니다. 디바이스에 UART 주변 장치가 없으면 UART 인터페이스 포팅을 건너뛸 수 있습니다.

Prerequisites

• 점프 와이어를 사용하여 루프백 테스트를 위해 UART의 RX와 TX를 연결하십시오.

이식

공급업체에서 제공하는 UART 드라이버 라이브러리를 사용하면 freertos/libraries/abstractions/common_io/include/iot_uart.h에 있는 모든 함수를 구현할 수 있습니다. 헤더 파일은 필요한 API동작에 대한 정보를 제공합니다. 구현 소스 파일을 생성하고 이름을 freertos/vendors/vendor/boards/board/ports/common_io/iot_uart.c로 지정해야 합니다.

대상 디바이스가 UART 기능을 지원하지 않으면 해당 함수가 IOT_UART_FUNCTION_NOT_SUPPORTED를반환하도록 설정합니다. IOT_UART_FUNCTION_NOT_SUPPORTED를 반환할 수 있는 함수 목록은freertos/libraries/abstractions/common_io/include/iot_uart.h에 설명된 API를 참조하십시오.

익명 핸들 "struct IotUARTDescriptor"

일반적으로 드라이버의 핸들과 다양한 상태를 캡슐화합니다. 다음 예를 참조하십시오.

/* Suppose the data type of the driver handle for UART is UART_Handle */struct IotUARTDescriptor{ IotUARTCallback_t xUartCallback; /* Application Specified callback. */ UART_Handle * pxUartContext; /* UART handle to be passed to driver functions. */

96

Page 101: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서UART 라이브러리 포팅

void * pvUserCallbackContext; / uint8_t sOpened;};

설정 테스트하드웨어 설정

테스트할 UART 포트에서 점프 와이어를 사용하여 루프백을 위한 TX와 RX를 연결합니다.

UART 테스트 파일은 freertos/libraries/abstractions/common_io/test/test_iot_uart.c디렉터리에서 찾을 수 있습니다.

설치 구성을 테스트하려면

1. UART 구성을 freertos/vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h 파일에 추가합니다.

IOT_TEST_COMMON_IO_UART_SUPPORTED

이 디바이스에 UART 주변 장치가 있는 경우 1로 설정합니다. 그렇지 않으면 0으로 설정합니다.UART_TEST_SET

테스트할 UART 인스턴스의 수입니다.2. freertos/vendors/vendor/boards/board/aws_tests/config_files/

test_iot_config.h 파일에서 테스트 데이터를 정의합니다.

uartTestPort

UART 인스턴스 ID입니다.uartIotUartFlowControl

UART 흐름 제어 구성입니다.uartIotUartParity

UART 패리티 비트 구성입니다.uartIotUartWordLength

UART 단어 길이 구성입니다.uartIotUartStopBits

UART 정지 비트 구성입니다.

Example

/* UART */#define UART_TEST_SET 1const uint8_t uartTestPort[ UART_TEST_SET ] = { 1 };const uint32_t uartIotUartFlowControl[ UART_TEST_SET ] = { UART_FLOW_CONTROL };const uint32_t uartIotUartParity[ UART_TEST_SET ] = { UART_PARITY };const uint32_t uartIotUartWordLength[ UART_TEST_SET ] = { UART_WORD_LENGTH };const uint32_t uartIotUartStopBits[ UART_TEST_SET ] = { UART_STOP_BITS };

3. UART 테스트 설정 코드를 freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c 파일에 추가합니다.

#include "test_iot_internal.h"

97

Page 102: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서SPI 라이브러리 포팅

/* UART */extern uint8_t ustestIotUartPort;extern uint32_t ultestIotUartFlowControl;extern uint32_t ultestIotUartParity;extern uint32_t ultestIotUartWordLength;extern uint32_t ultestIotUartStopBits;

void SET_TEST_IOT_UART_CONFIG( int testSet ){ ustestIotUartPort = uartTestPort[ testSet ]; ultestIotUartFlowControl = uartIotUartFlowControl[ testSet ]; ultestIotUartParity = uartIotUartParity[ testSet ]; ultestIotUartWordLength = uartIotUartWordLength[ testSet ]; ultestIotUartStopBits = uartIotUartStopBits[ testSet ];}

SPI 라이브러리 포팅SPI 라이브러리는 공급업체 제공 SPI 드라이버와 인터페이스됩니다. 디바이스에 SPI 주변 장치가 없으면SPI 인터페이스 포팅을 건너뛸 수 있습니다. SPI 라이브러리는 장치의 SPI 주변 장치만 컨트롤러로 사용할수 있습니다.

이식

공급업체에서 제공하는 SPI 드라이버 라이브러리를 사용하면 freertos/libraries/abstractions/common_io/include/iot_spi.h에 있는 모든 함수를 구현할 수 있습니다. 헤더 파일은 필요한 API동작 정보를 제공합니다. 구현 소스 파일을 freertos/vendors/vendor/boards/board/ports/common_io/iot_spi.c로 생성해야 합니다.

대상 디바이스가 일부 SPI 기능을 지원하지 않을 수 있습니다. 이 경우 해당함수가 IOT_SPI_FUNCTION_NOT_SUPPORTED를 반환하도록 설정합니다.IOT_SPI_FUNCTION_NOT_SUPPORTED를 반환할 수 있는 함수 목록은 freertos/libraries/abstractions/common_io/include/iot_spi.h에 설명된 API를 참조하십시오.

익명 핸들 "struct IotSPIDescriptor"

일반적으로 드라이버의 핸들과 다양한 상태를 캡슐화합니다. 다음 예를 참조하십시오.

/* Suppose the data type of driver handle for SPI is Driver_SPI_Handle */struct IotSPIDescriptor{ Driver_SPI_Handle xHandle; /* Driver Handle. */ IotSPIConfig_t xConfig; /* Bus Configuration. */ IotSPICallback_t xCallback; /* Callback function. */ void * pvUserContext; /* User context passed in callback. */ /* State: if already opened. */};

설정 테스트SPI 테스트 파일은 freertos/libraries/abstractions/common_io/test/test_iot_spi.c 디렉터리에서 찾을 수 있습니다.

설치 구성을 테스트하려면

1. SPI 구성을 freertos/vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h 파일에 추가합니다.

98

Page 103: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서SPI 라이브러리 포팅

IOT_TEST_COMMON_IO_SPI_SUPPORTED

디바이스에 SPI 주변 장치가 있는 경우 1로 설정합니다. 그렇지 않으면 0(으)로 설정합니다.SPI_TEST_SET

테스트할 SPI 인스턴스의 수입니다.2. freertos/vendors/vendor/boards/board/aws_tests/config_files/

test_iot_config.h 파일에서 테스트 데이터를 정의합니다.

spiTestPort

SPI 인스턴스 ID입니다.spiIotMode

SPI 모드입니다.spiIotSpitBitOrder

SPI 비트 순서입니다.spiIotFrequency

SPI 주파수입니다.spiIotDummyValue

더미 값입니다.

Example

/* SPI includes */#include "iot_spi.h"

#define IOT_TEST_COMMON_IO_SPI_SUPPORTED 1#define I2C_TEST_SET 1

const uint8_t spiTestPort[ SPI_TEST_SET ] = { 1 };const uint32_t spiIotMode[ SPI_TEST_SET ] = { eSPIMode0 };const uint32_t spiIotSpitBitOrder[ SPI_TEST_SET ] = { eSPIMSBFirst };const uint32_t spiIotFrequency[ SPI_TEST_SET ] = { 500000U };const uint32_t spiIotDummyValue[ SPI_TEST_SET ] = { 0 };

3. freertos/vendors/vendor/boards/board/ports/common_io/test_iot_internal.c 파일에 SPI 테스트 설정 코드를 추가합니다.

#include "test_iot_internal.h"

/* SPI */extern uint8_t ultestIotSpiInstance;extern IotSPIMode_t xtestIotSPIDefaultConfigMode;extern IotSPIBitOrder_t xtestIotSPIDefaultconfigBitOrder;extern uint32_t ultestIotSPIFrequency;extern uint32_t ultestIotSPIDummyValue;

void SET_TEST_IOT_SPI_CONFIG(int testSet){ ultestIotSpiInstance = spiTestPort[ testSet ] ; xtestIotSPIDefaultConfigMode = spiIotMode[ testSet ]; xtestIotSPIDefaultconfigBitOrder = spiIotSpitBitOrder[ testSet ]; ultestIotSPIFrequency = spiIotFrequency[ testSet ]; ultestIotSPIDummyValue = spiIotDummyValue[ testSet ];

99

Page 104: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서셀룰러

}

셀룰러 라이브러리 포팅FreeRTOS Labs는 이제 AT 명령, TCP 오프로드 셀룰러 추상화 계층을 지원합니다. 자세한 내용은 단원을참조하십시오.FreeRTOS 랩 - 셀룰러 라이브러리및이식 안내서자세한 내용은 를 참조하십시오.

Note

셀룰러 라이브러리는 FreeRTOS 연구소에 있습니다. FreeRTOS Labs 다운로드의 라이브러리는 완벽하게 작동하지만 구현, 문서 및 코딩 스타일이 개선되었습니다.

Prerequisites셀룰러 라이브러리에 대한 직접적인 의존성은 없지만 FreeRTOS 네트워크 스택에서는 이더넷, Wi-Fi 및 셀룰러가 공존 할 수 없으므로 개발자는보안 소켓 라이브러리를 선택합니다.

Note

셀룰러 모듈이 TLS 오프로드를 지원할 수 있거나 AT 명령을 지원하지 않는 경우 개발자는 자체 셀룰러 추상화를 구현하여보안 소켓 라이브러리를 선택합니다.

100

Page 105: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서애플리케이션 마이그레이션

버전 1.4.x에서 버전 201906.00(및 이후 버전)으로 마이그레이션

FreeRTOS 릴리스 목록은 단원을 참조하십시오.https://github.com/aws/amazon-freertos/releases를 선택합니다.

애플리케이션 마이그레이션FreeRTOS 버전 201906.00에서는 이전 버전의 FreeRTOS 에서 빌드된 프로젝트 파일을 손상시키는FreeRTOS 디렉터리 구조가 일부 변경되었습니다. 이전 버전의 FreeRTOS 에서 빌드된 애플리케이션이FreeRTOS 버전 201906.00에서 작동하게 하려면 애플리케이션 코드를 새 프로젝트로 이동하고 애플리케이션에 201906.00 헤더 파일을 포함시켜야 합니다.

버전 201906.00에서는 MQTT, Device Shadow 및 Device Defender 라이브러리에 대한 새로운 API가 도입되었습니다. 이러한 라이브러리의 이전 버전용 API는 해당 라이브러리에 있는 201906.00 구현의 헤더 파일을통해 액세스할 수 있으므로 FreeRTOS 버전 201906.00은 이전 버전과 호환됩니다.

Note

이전 버전에서 버전 201906.00 이상으로 마이그레이션하는 경우 새 라이브러리 구현을 수용하기위해 iot_config.h 및 FreeRTOSConfig.h 파일을 재구성해야 할 수 있습니다. 전역 구성 설정에 대한 자세한 내용은 전역 구성 파일 참조를 참조하십시오.

이식 마이그레이션201906.00 릴리스 이전에 릴리스된 FreeRTOS 버전을 이식한 경우 버전 201906.00 이상과 호환되도록 이식된 코드를 마이그레이션해야 합니다. 포팅에 대한 자세한 내용은FreeRTOS 포팅 안내서를 선택합니다.

FreeRTOS 코드 디렉터리 구조201906.00 이전에 릴리스된 버전에서는 freertos/lib/third_party/mcu_vendor/vendor 폴더에공급업체가 포팅한 코드가 포함되어 있었습니다. 동일한 vendor 폴더에 있는 코드를 컴파일했습니다. 버전 201906.00 이상에서는 공급업체 코드가 freertos/vendors/vendor 폴더에 있고 프로젝트 파일은freertos/projects/vendor 폴더에 있습니다.

Note

이식용 코드는 버전 201906.00에서 변경되지 않았습니다. 코드의 위치만 변경되었습니다. 기존 포트를 새 폴더 구조로 이동하십시오.

CMake 빌드 시스템버전 201906.00에서는 CMake를 사용하여 프로젝트 파일을 생성하는 작업에 대한 지원이 도입되었습니다. FreeRTOS 와 함께 CMake를 사용하는 방법에 대한 자세한 내용은CMake를 사용하여 FreeRTOS 빌드 (p. 19)를 선택합니다.

검증을 위해서는 CMake 목록 파일이 필요합니다. CMake 목록 파일 생성에 대한 자세한 내용은 CMake 목록 파일 생성 (p. 11) 단원을 참조하십시오.

101

Page 106: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서Wi-Fi 라이브러리 이식 마이그레이션

Wi-Fi 라이브러리 이식 마이그레이션FreeRTOS Wi-Fi 라이브러리에는 Wi-Fi 네트워크를 추가, 제거 및 검색하고 Wi-Fi 네트워크 상태 변경에 대한 알림을 수신하는 네 가지 새로운 API가 있습니다. 이러한 새 API는 모두 선택 사항이며 Bluetooth LowEnergy를 통한 Wi-Fi 자격 증명 프로비저닝을 지원하기 위한 것입니다. 디바이스가 Bluetooth Low Energy를지원하지 않는 경우 이러한 API를 구현할 필요가 없습니다.

• WIFI_NetworkAdd

WIFIReturnCode_t WIFI_NetworkAdd( const WIFINetworkProfile_t * const pxNetworkProfile, uint16_t * pusIndex );

• WIFI_NetworkGet

WIFIReturnCode_t WIFI_NetworkGet( WIFINetworkProfile_t * pxNetworkProfile, uint16_t usIndex );

• WIFI_NetworkDelete

WIFIReturnCode_t WIFI_NetworkDelete( uint16_t usIndex );

• WIFI_RegisterNetworkStateChangeEventCallback

WIFIReturnCode_t WIFI_RegisterNetworkStateChangeEventCallback( IotNetworkStateChangeEventCallback_t xCallback );

다음 typedef 문의 경우:

typedef void ( *IotNetworkStateChangeEventCallback_t ) ( uint32_t ulNetworkType, AwsIotNetworkState_t xState );

typedef enum AwsIotNetworkState{ eNetworkStateUnknown = 0, eNetworkStateDisabled, eNetworkStateEnabled} AwsIotNetworkState_t;

Wi-Fi 라이브러리 이식에 대한 자세한 내용은 단원을 참조하십시오.Wi-Fi 라이브러리 이식FreeRTOS 포팅안내서를 참조하십시오.

102

Page 107: FreeRTOS - 이식 안내서 · 2020. 10. 24. · FreeRTOS 이식 안내서 시스템 요구 사항 2. 이식을 위해 FreeRTOS 소스 코드 설정 (p. 7)의 지침에 따라 이식

FreeRTOS 이식 안내서

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

ciii