101
FreeRTOS 移植ガイド

FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

  • Upload
    others

  • View
    50

  • Download
    4

Embed Size (px)

Citation preview

Page 1: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS移植ガイド

Page 2: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド

FreeRTOS: 移植ガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド

Table of ContentsFreeRTOS 移植 .................................................................................................................................. 1

FreeRTOS とは? ........................................................................................................................ 1FreeRTOS の移植 ....................................................................................................................... 2

システム要件 ..................................................................................................................... 2古いバージョンの FreeRTOS の移植 ..................................................................................... 2移植のよくある質問 ............................................................................................................ 5

移植対象の FreeRTOS のダウンロード .................................................................................................. 7移植用の FreeRTOS ソースコードのセットアップ ................................................................................... 8

FreeRTOS ダウンロードの設定 .................................................................................................... 8ベンダー提供の、ボード固有のライブラリ用のディレクトリの設定 ............................................ 8プロジェクトファイルのディレクトリの設定 .......................................................................... 9設定 FreeRTOSConfig.h ................................................................................................... 9

テスト用の FreeRTOS ソースコードのセットアップ ...................................................................... 10IDE プロジェクトを作成する .............................................................................................. 10作成 CMake リストファイル .............................................................................................. 12

FreeRTOS ライブラリの移植 .............................................................................................................. 25移植フローチャート .................................................................................................................. 26configPRINT_STRING() ......................................................................................................... 28

前提条件 .......................................................................................................................... 28実装 ................................................................................................................................ 28テスト ............................................................................................................................. 28

FreeRTOS カーネル .................................................................................................................. 29前提条件 .......................................................................................................................... 29FreeRTOS カーネルの設定 ................................................................................................. 29テスト ............................................................................................................................. 30

Wi-Fi ....................................................................................................................................... 30前提条件 .......................................................................................................................... 30移植 ................................................................................................................................ 31テスト ............................................................................................................................. 31検証 ................................................................................................................................ 35

TCP/IP .................................................................................................................................... 36ポーティング FreeRTOS+TCP(TCP) .................................................................................... 36ポーティング lwIP ............................................................................................................. 39

セキュアソケット ...................................................................................................................... 41Prerequisites .................................................................................................................... 41Porting ............................................................................................................................ 41Testing ............................................................................................................................ 41Validation ......................................................................................................................... 45エコーサーバーのセットアップ ........................................................................................... 45

PKCS #11 ............................................................................................................................... 48Prerequisites .................................................................................................................... 48Porting ............................................................................................................................ 49Testing ............................................................................................................................ 51Validation ......................................................................................................................... 52

TLS ........................................................................................................................................ 53Prerequisites .................................................................................................................... 53Porting ............................................................................................................................ 53デバイスを AWS IoT に接続する ......................................................................................... 54TLS テスト用の証明書とキーの設定 .................................................................................... 55BYOC (ECDSA) の作成 ..................................................................................................... 61Testing ............................................................................................................................ 69Validation ......................................................................................................................... 71

MQTT ..................................................................................................................................... 71Prerequisites .................................................................................................................... 71

iii

Page 4: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド

IDE テストプロジェクトのセットアップ ............................................................................... 71CMakeLists.txt ファイルの設定 ...................................................................................... 71ローカルテスト環境のセットアップ ..................................................................................... 72テストの実行 .................................................................................................................... 72Validation ......................................................................................................................... 72

HTTPS .................................................................................................................................... 72前提条件 .......................................................................................................................... 72IDE テストプロジェクトのセットアップ ............................................................................... 73CMakeLists.txt ファイルの設定 ...................................................................................... 73ローカルテスト環境のセットアップ ..................................................................................... 73テストの実行 .................................................................................................................... 73

Over-the-Air (OTA) の更新 .......................................................................................................... 73Prerequisites .................................................................................................................... 74Porting ............................................................................................................................ 74IoT デバイスブートローダー ............................................................................................... 75Testing ............................................................................................................................ 78Validation ......................................................................................................................... 80

Bluetooth Low Energy ............................................................................................................... 81Prerequisites .................................................................................................................... 81Porting ............................................................................................................................ 81Testing ............................................................................................................................ 83Validation ......................................................................................................................... 85

共通 I/O ................................................................................................................................... 85Prerequisites .................................................................................................................... 86Testing ............................................................................................................................ 86I2C ライブラリの移植 ........................................................................................................ 88UART ライブラリの移植 .................................................................................................... 90SPI ライブラリの移植 ....................................................................................................... 92

バージョン 1.4.x からバージョン 201906.00 (以降) への移行 ................................................................... 95アプリケーションの移行 ............................................................................................................ 95ポートの移行 ............................................................................................................................ 95

FreeRTOS コードディレクトリ構造 .................................................................................... 95CMake ビルドシステム ...................................................................................................... 95Wi-Fi ライブラリポートの移行 ............................................................................................ 96

.................................................................................................................................................... xcvii

iv

Page 5: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドFreeRTOS とは?

FreeRTOS 移植

FreeRTOS とは?世界をリードするチップ企業との 15 年間にわたる提携によって開発され、現在 175 秒ごとにダウンロードされる FreeRTOS は、マイクロコントローラーおよび小型マイクロプロセッサ向けの市場をリードするリアルタイムオペレーティングシステム (RTOS) です。MIT オープンソースライセンスで無料配布されるFreeRTOS には、すべての業種での使用に適したカーネルと増え続けるライブラリのセットが含まれています。FreeRTOS は、信頼性と使いやすさに重点を置いて構築されています。

FreeRTOS には、接続、セキュリティ、および無線 (OTA) 更新用のライブラリが含まれています。FreeRTOS には、認定ボードで FreeRTOS の機能を実演するデモアプリケーションも含まれています。

FreeRTOS はオープンソースプロジェクトです。 https://github.com/aws/amazon-freertos の GitHub サイトで、ソースコードのダウンロード、変更や機能強化の投稿、問題の報告を行うことができます。MITオープンソースライセンスのもとで FreeRTOS コードをリリースしているため、商用および個人用のプロジェクトで使用できます。

また、FreeRTOS ドキュメント (FreeRTOS ユーザーガイド、FreeRTOS 移植ガイド、FreeRTOS 認定ガイド) への投稿も歓迎します。ドキュメントのマークダウンソースは、https://github.com/awsdocs/aws-freertos-docs で入手できます。これは、クリエイティブコモンズ (CC BY-ND) ライセンスのもとでリリースされています。

FreeRTOS のカーネルとコンポーネントは、個別にリリースされ、セマンティックバージョニングを使用します。統合 FreeRTOS 定期的にリリースされます。 すべてのリリースでは、YYYYMM.NN 形式の日付ベースのバージョニングを使用します。

• Y は年を表します。• M は月を表します。• N は、指定された月内のリリース順を表します (00 が最初のリリースです)。• 「メジャー」とある場合は、複数のライブラリに新機能や大きな更新があったことを示します。

たとえば、2021年6月の第2リリースは2021年6月1日になります。

以前の FreeRTOS リリースでは、セマンティックバージョニングをメジャーリリースに使用していました。日付ベースのバージョニング(FreeRTOS 1.4.8 を に更新 FreeRTOS AWS Reference Integrations201906.00)、FreeRTOSカーネル、および各個人 FreeRTOS ライブラリはセマンティック バージョンを保持しています。セマンティック バージョン管理では、バージョン番号自体(X.Y.Z)が、リリースがメジャーリリースか、マイナー リリースか、ポイント リリースかを示します。 セマンティックバージョンのライブラリを使用して、アプリケーションの新しいリリースの範囲と影響を評価できます。

LTS リリースは、他のリリースタイプとは異なる方法で維持されます。メジャーリリースとマイナーリリースは、不具合の解決に加えて、新機能で頻繁に更新されます。LTS リリースは、重大な欠陥やセキュリティの脆弱性に対処するための変更のみで更新されます。起動後、特定の LTS リリースで導入された新機能はありません。これらは、リリース後 3 年以上維持されており、デバイスメーカーは、メジャーリリースとマイナーリリースで表されるより動的なベースラインではなく、安定したベースラインを使用するオプションを提供します。

1

Page 6: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドFreeRTOS の移植

IoT デバイスへの FreeRTOS の移植マイクロコントローラーボードで FreeRTOS を実行するには、いくつかの FreeRTOS コードをデバイスのハードウェアに移植する必要があります。基本カーネル ポートは、 FreeRTOS 移植ガイド オンwww.freertos.org. セキュリティや接続などの FreeRTOS ライブラリを移植に含める場合は、カーネルの移植上で次の手順を実行します。

デバイスに FreeRTOS を移植するには

1. 移植対象の FreeRTOS のダウンロード (p. 7) の手順に従って、移植対象の FreeRTOS の最新バージョン をダウンロードします。

2. 移植用の FreeRTOS ソースコードのセットアップ (p. 8)の手順に従って、 移植およびテスト対象の FreeRTOS ダウンロード内のファイルとフォルダを設定します。

3. FreeRTOS ライブラリの移植 (p. 25) の手順に従い、FreeRTOS ライブラリをデバイスに移植します。各移植トピックに、ポートをテストする手順が含まれています。

システム要件FreeRTOS に移植するデバイスは、以下の最小要件を満たすマイクロコントローラーボードである必要があります。

• 25 MHz の処理速度• 64 KB の RAM• MCU に保存されている実行可能イメージあたり 128KB のプログラムメモリ• (OTA ライブラリの移植 (p. 73) の場合) MCU に保存されている 2 つの実行可能イメージ

古いバージョンの FreeRTOS の移植の古いバージョンを移植する場合 FreeRTOSから、 FreeRTOS AWS Reference Integrations リポジトリ、および のバージョンをチェックアウトしてください FreeRTOS バージョン タグで移植していることを示します。認定とテストのドキュメントは PDF 形式で tests フォルダにあります。資格とテストのドキュメントについては、以下の表を参照してください。

FreeRTOS 移植と資格ドキュメントの改訂履歴

日 移植および資格認定ガイドの文書バージョン

変更履歴 FreeRTOS バージョン:

2020年7月 202007.00 (移植ガイド)

202007.00 (認定ガイド)

• リリース 202007.00 202007年00月

2020 年 2 月 18 日 202002.00 (移植ガイド)

202002.00 (認定ガイド)

• リリース 202002.00• アマゾン FreeRTOS

は今 FreeRTOS

202002.00

2019 年 12 月 17 日 201912.00 (移植ガイド)

201912.00 (認定ガイド)

• リリース 201912.00• 「共通 I/O ライブラリ

の移植 (p. 85)」が追加されました。

201912.00

2019 年 10 月 29 日 201910.00 (移植ガイド) • リリース 201910.00 201910.00

2

Page 7: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド古いバージョンの FreeRTOS の移植

日 移植および資格認定ガイドの文書バージョン

変更履歴 FreeRTOS バージョン:

201910.00 (認定ガイド) • 乱数生成器移植の最新情報。

2019 年 8 月 26 日 201908.00 (移植ガイド)

201908.00 (認定ガイド)

• リリース 201908.00• 「テスト用の

HTTPS クライアントライブラリの設定 (p. 72)」を追加

「PKCS #11 ライブラリの移植 (p. 48)」を更新

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 DeviceTester を追加

• FreeRTOS コンソールの付録でリスト化に関する情報へのCMake リンクを追加(85 ページ)

1.4.4

3

Page 8: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド古いバージョンの FreeRTOS の移植

日 移植および資格認定ガイドの文書バージョン

変更履歴 FreeRTOS バージョン:

2018 年 11 月 7 日 1.1.2 • PKCS#11 移植の付録で PKCS#11 PALインターフェイスの移植手順を更新 (38ページ)

• CertificateConfigurator.htmlへのパスを更新 (76ページ)

• 入門ガイドのテンプレートの付録を更新(80 ページ)

1.4.3

2018 年 10 月 8 日 1.1.1 • Required for AFQP 列をaws_test_runner_config.hテスト設定テーブルに新たに追加 (16ページ)

• 「Create the TestProject」セクションの Unity モジュールディレクトリパスを更新 (14 ページ)

• 「推奨される移植順」表を更新 (22ページ)

• TLS 付録、Test Setupのクライアント証明書とキー変数名を更新 (40 ページ)

• Secure Sockets の移植の付録、Test Setup(34 ページ)、TLS の移植の付録、TestSetup (40 ページ)、および TLS ServerSetup の付録 (57 ページ) のファイルパスを変更

1.4.2

2018 年 8 月 27 日 1.1.0 • OTA 更新の移植の付録を追加 (47 ページ)

• ブートローダー移植の付録を追加 (51ページ)

1.4.0

1.4.1

4

Page 9: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド移植のよくある質問

日 移植および資格認定ガイドの文書バージョン

変更履歴 FreeRTOS バージョン:

2018 年 8 月 9 日 1.0.1 • 「推奨される移植順」表を更新 (22ページ)

• PKCS#11 の移植の付録を更新 (36 ページ)

• TLS の移植の付録、Test Setup (40ページ)、および TLSServer Setup の付録、ステップ 9 (51ページ) のファイルパスを変更

• MQTT の移植の付録、前提条件のハイパーリンクを修正 (45ページ)

• BYOC の作成手順の付録にある例に AWSCLI 設定手順を追加(57 ページ)

1.3.1

1.3.2

2018 年 7 月 31 日 1.0.0 FreeRTOS 認定プログラムガイドの当初のバージョン

1.3.0

移植のよくある質問とは FreeRTOS ポート?

FreeRTOS 移植とは、プラットフォームがサポートする必須の FreeRTOS ライブラリおよびFreeRTOS 用のボード固有の API 実装です。移植により、API がボード上で動作するようになり、デバイスドライバーとプラットフォームベンダーにより提供される BSP との、必要な統合を実装します。移植には、ボードにより必要とされる設定の調整 (例: クロック率、スタックサイズ、ヒープサイズ) も含まれます。

私のデバイスは、Wi-Fi、Bluetooth Low Energy、または無線 (OTA) アップデートをサポートしていません。ポートに必要なすべてのライブラリ FreeRTOS?

FreeRTOS の接続ライブラリを移植するための主な要件は、デバイスがクラウドに接続できることです。たとえば安全なイーサネット接続でクラウドに接続できる場合、FreeRTOS では Wi-Fi ライブラリは必須条件ではありません。一部のテストおよびデモアプリケーションは、すべてのライブラリを移植しないと機能しないことに注意してください。

"まで到達できますかechoサーバー"は、2 つの異なるネットワーク(たとえば、2 つの異なるアクセス・ポイント上の 2 つのサブネット)からのものですか?

エコーサーバーは、TCP/IP および TLS ポートテストに合格する必要があります。エコーサーバーは、ボードが接続されているネットワークから到達可能である必要があります。単一のエコーサーバーと通信するために異なるサブネット上のデバイスが必要な場合は、サブネット間のルーティングを有効にするために IT サポートにご連絡ください。

を動作させるために、どのネットワーク・ポートをオープンにする必要があるか FreeRTOS ポート・テスト

FreeRTOS ポートテストを実行するには、次のネットワーク接続が必要です。

5

Page 10: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド移植のよくある質問

ポート プロトコル。

443、8883 MQTT

8443 Greengrass Discovery

このページや FreeRTOS 移植ガイドの残りの部分で回答されてない質問がある場合は、FreeRTOS エンジニアリングチームにご連絡ください。

6

Page 11: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド

移植対象の FreeRTOS のダウンロード

プラットフォームに FreeRTOS を移植する前に、GitHub から FreeRTOS をダウンロードするか、FreeRTOS リポジトリを複製します。手順については、README.md ファイルを参照してください。

Note

リポジトリを複製することをお勧めします。複製することで、マスターブランチの更新がリポジトリにプッシュされたときに更新をピックアップすることが容易になります。

FreeRTOS をダウンロードまたは複製したら、プラットフォームへの FreeRTOS コードの移植を開始できます。手順については、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」を参照してから、「FreeRTOS ライブラリの移植 (p. 25)」を参照してください。

Note

FreeRTOS ドキュメント全体で、FreeRTOS ダウンロードは と呼ばれています。

7

Page 12: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドFreeRTOS ダウンロードの設定

移植用の FreeRTOS ソースコードのセットアップ

FreeRTOS をダウンロードした後、移植を始める前に FreeRTOS ダウンロードのファイルおよびフォルダのいくつかを設定する必要があります。

FreeRTOS ダウンロードを移植用に準備するには、FreeRTOS ダウンロードの設定 (p. 8) の手順に従って FreeRTOS ダウンロードのディレクトリ構造をデバイスに合わせて設定する必要があります。

デバッグ目的でそれらを実装するときに移植ライブラリをテストすることを計画している場合、移植を始める前にいくつかのファイルをテスト用に設定する必要があります。テストのセットアップの手順については、「テスト用の FreeRTOS ソースコードのセットアップ (p. 10)」を参照してください。

Note

認定のために正式にポートを検証するには、FreeRTOS 用 AWS IoT Device Tester を使用する必要があります。AWS IoT Device Tester for FreeRTOS の詳細については、FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOS を使用する」を参照してください。FreeRTOS 用デバイスの認定については、「FreeRTOS 認定ガイド」を参照してください。

FreeRTOS ダウンロードを設定し、テスト環境を設定したら、FreeRTOS の移植を開始できます。移植とテストの説明については、「FreeRTOS ライブラリの移植 (p. 25)」を参照してください。

FreeRTOS ダウンロードの設定以下の手順に従って、FreeRTOS コードをデバイスに移植するための 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 フォルダの構造は次のとおりです。

8

Page 13: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドプロジェクトファイルのディレクトリの設定

vendors/vendor/boards/board/aws_tests+ - 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 フォルダ

MCU ファミリーに共通のベンダーが提供するライブラリ用のディレクトリをセットアップするには

1. ターゲットボードの MCU ファミリーに共通の、ベンダー提供の必要なライブラリをすべてdriver_library_version フォルダに保存します。

2. vendor フォルダの名前をベンダーの名前に変更し、driver_library フォルダとdriver_library_version フォルダの名前をドライバーライブラリとそのバージョンの名前に変更します。

Important

ターゲットボードの MCU ファミリーに共通する、ベンダー提供のライブラリは、/test または/demos のサブディレクトリに保存しないでください。

プロジェクトファイルのディレクトリの設定で、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. /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSConfig.h を開きます。

2. 行 #define configPLATFORM_NAME "Unknown"、変更 Unknown ボード名と一致させます。

9

Page 14: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドテスト用の FreeRTOS ソースコードのセットアップ

テスト用の FreeRTOS ソースコードのセットアップ

FreeRTOS には各移植ライブラリのテストが含まれています。aws_test_runner.c ファイルはaws_test_runner_config.h ヘッダーファイルで指定した各テストを実行する RunTests 関数を定義します。各 FreeRTOS ライブラリを移植したら、移植した FreeRTOS ソースコードを構築し、コンパイルしたコードをボードにフラッシュして、ボード上で実行することで、ポートをテストできます。

テスト用に FreeRTOS ソースコードをビルドするには、以下のいずれかを使用できます。

• サポートされている IDE。

IDE を使用して FreeRTOS ソースコードをビルドする場合、IDE テストプロジェクトをセットアップする必要があります。IDE プロジェクトを作成する (p. 10) の手順に従い、IDE にテストプロジェクトを作成します。FreeRTOS ライブラリの移植 (p. 25) の各ライブラリ固有の移植セクションに、IDEテストプロジェクトでライブラリの移植されたソースファイルをセットアップするための追加手順が含まれています。

• CMake ビルドシステム。

CMake を使用している場合は、CMakeLists.txt CMake リストファイルを作成する必要があります。CMakeLists.txt CMake リストファイルを作成するには、「作成 CMake リストファイル (p. 12)」の手順に従います。

Important

CMakeLists.txt ファイルは、使用するテスト方法に関係なく、FreeRTOS コンソールで認定されたデバイスをリストするために必要です。

コードをビルドしたら、プラットフォームのフラッシュユーティリティを使用してコンパイル済みコードをデバイスにフラッシュします。

Note

Device Tester 用の userdata.json ファイルでビルドツールとフラッシュツールを指定するので、Device Tester でポートを検証している場合はコードを手動でフラッシュする必要はありません。

IDE プロジェクトを作成するFreeRTOS ダウンロードを設定したら、IDE プロジェクトを作成してそのプロジェクトにコードをインポートできます。

テストに必要な IDE プロジェクト構造で IDE プロジェクトを作成するには、以下の手順に従ってください。

Important

Eclipse ベースの IDE を使用している場合は、任意のいずれかのフォルダにすべてのファイルを構築するようにプロジェクトを設定しないでください。各ソースファイルを個別にリンクすることでプロジェクトにソースファイルを追加します。

1. IDE を開き、/projects/vendor/board/ide ディレクトリに aws_tests という名前のプロジェクトを作成します。

2. IDE で、aws_tests プロジェクトの下に 2 つの仮想フォルダを作成します。

• application_code

• config_files

10

Page 15: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドIDE プロジェクトを作成する

aws_tests の下の、IDE プロジェクトに 2 つの仮想フォルダ (application_code とconfig_files) があるはずです。

Note

Eclipse により追加の includes フォルダが生成されます。このフォルダは、必要な構造の一部ではありません。

3. /vendors/vendor/boards/board/aws_tests/application_code とそのサブディレクトリにあるすべてのファイルを IDE の aws_tests/application_code 仮想フォルダにインポートします。

4. /tests とそのサブディレクトリにあるすべてのファイルを IDE の aws_tests/application_code 仮想ディレクトリにインポートします。

5. /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. 必要なライブラリを /libraries、そのサブディレクトリを aws_tests IDE プロジェクトにインポートします。これには、必要なサードパーティライブラリも含まれます。必要なライブラリについては、FreeRTOS 移植フローチャートを参照してください。テストプロジェクトに加えて含める必要があるサードパーティのライブラリに依存する FreeRTOS ライブラリに関する情報は、特定のライブラリの移植セクションに記載されています。

最後に、次のディレクトリからプロジェクトに unity ファイルをインポートします。

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

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

Note

特定のライブラリを移植していない場合は、そのライブラリのファイルをプロジェクトにインポートする必要はありません。

7. /freertos_kernel ディレクトリと /freertos_kernel/include ディレクトリ内のすべてのソースファイルを aws_tests IDE プロジェクトにインポートします。

8. コンパイラーおよびプラットフォームアーキテクチャに対応する /freertos_kernel/portable のサブディレクトリを aws_tests IDE プロジェクトにインポートします。

9. デバイスに使用している FreeRTOS メモリ管理実装を aws_tests IDE プロジェクトにインポートします。

/freertos_kernel/portable/MemMang ディレクトリには FreeRTOS メモリ管理の実装が含まれています。heap_4.c または heap_5.c を使用することを強くお勧めします。

FreeRTOS のメモリ管理の詳細については、「メモリ管理」を参照してください。10. プロジェクトの IDE プロパティを開き、コンパイラのインクルードパスに次のパスを追加します。

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

• /freertos_kernel/include

• /freertos_kernel/portable/compiler/architecture

11

Page 16: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

• ベンダー提供のドライバーライブラリに必要なパス11. プロジェクトプロパティで、UNITY_INCLUDE_CONFIG_H と

AMAZON_FREERTOS_ENABLE_UNIT_TESTS をプロジェクトレベルのマクロとして定義します。

IDE プロジェクトの設定が完了したら、FreeRTOS ライブラリをデバイスに移植する準備が整いました。手順については、「FreeRTOS ライブラリの移植 (p. 25)」を参照してください。

作成 CMake リストファイル設定後、 FreeRTOS 移植用にダウンロードすると、 CMake プロジェクトとプラットフォームのリストファイル。

トピック• Prerequisites (p. 12)• からプラットフォームのリストファイルの作成 CMakeLists.txtテンプレート (p. 13)• 建物 FreeRTOS と CMake (p. 19)

Prerequisites続行する前に、ホストマシンが次の前提条件を満たしていることを確認してください。

• デバイスのコンパイル ツール チェーンは、マシンのオペレーティング システムをサポートしている必要があります。 CMake は、すべてのバージョンの Windows、 macOS、および Linux。

Windows Subsystem for Linux (WSL) はサポートされていません。ネイティブを使用 CMake Windowsマシンで。

• 以下が必要です。 CMake バージョン3.13以降がインストールされていること。

のバイナリ配信をダウンロードできます。 CMake から CMake.org(Cメーカー.org).

Note

のバイナリ配信をダウンロードした場合、 CMakeで、 CMake PATH環境変数に実行され、CMake コマンド ラインから。

また、 CMake パッケージマネージャーを使用する 自家製ビール の macOS、および スコップ 又はチョコリー Windows で。

Note

[ CMake 多くの Linux ディストリビューションのパッケージマネージャのパッケージバージョンが古くなっている。ディストリビューションのパッケージマネージャに最新バージョンのCMakeさん、試してください linuxbrew 又は nix.

• 互換性のあるネイティブビルドシステムが必要です。

CMake は GNU Make や Ninja を含む多くのネイティブビルドシステムをターゲットにすることができます。Make と Ninja は、Linux 上のパッケージ・マネージャーでインストールできます。 macOS、および Windows。Make on Windowsを使用している場合は、スタンドアロンバージョンを 式または をインストールできます。 MinGWをバンドルします。

Note

[実行可能ファイルの作成] MinGW は、 mingw32-make.exeの代わりに、 make.exe.

Make よりも高速で、すべてのデスクトップオペレーティングシステムにネイティブサポートを提供するため、Ninja を使用することをお勧めします。

12

Page 17: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

からプラットフォームのリストファイルの作成 CMakeLists.txtテンプレートCMakeLists.txt テンプレートファイルは、FreeRTOS の /vendors/vendor/boards/board/CMakeLists.txt にあります。

CMakeLists.txtテンプレートファイルは 4 つのセクションで構成されています。

• FreeRTOS コンソールメタデータ (p. 13)• コンパイラ設定 (p. 14)• FreeRTOS ポータブルレイヤー (p. 15)• FreeRTOS デモとテスト (p. 19)

指示に従って、リストファイルのこれらの 4 つのセクションをプラットフォームに合わせて編集します。例として /vendors で他の認定ベンダーボードの CMakeLists.txt ファイルを参照できます。

ファイル全体で 2 つの主要な関数が呼び出されます。

afr_set_board_metadata(name value)

この関数は、FreeRTOS コンソールのメタデータを定義します。この関数は /tools/cmake/afr_metadata.cmake に定義されています。

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

この関数は、FreeRTOS モジュール (つまり、ライブラリ) に関連付けられているポータブルレイヤーターゲットを定義します。これは、 CMake GLOBAL INTERFACE IMPORTED フォームの名前を持つターゲット AFR:module_name::mcu_port. 次の場合: DEPENDS 追加ターゲットはtarget_link_libraries. 関数は、 /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」を使用します。

13

Page 18: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

フィールド名 値の説明

CODE_SIGNER OTA 更新に使用されるコード署名プラットフォーム。使用 AmazonFreeRTOS-SHA256ハッシュ アルゴリズムおよびECDSA暗号化アルゴリズムのデフォルト。別のコード署名プラットフォームを使用する場合は、お問い合わせください。

SUPPORTED_IDE セミコロンで区切られた IDs 対象 IDEs ボードが支えるものです。

IDE_ID_NAME サポートされている IDE の名前。置換 ID のIDEのIDがリストされます。 SUPPORTED_IDE フィールド。

IDE_ID_COMPILER サポートされている IDEのサポートされているコンパイラの名前のセミコロン区切りリスト。置換 ID のIDEのIDがリストされます。SUPPORTED_IDE フィールド。

KEY_IMPORT_PROVISIONING ボード デモ プロジェクトが事前プロビジョニングされた aws_clientcredential_keys.h ヘッダファイル。この場合は、 クイックコネクト は、FreeRTOS コンソール。

目的のボードプロビジョニングメカニズムがJITR/JITPまたはマルチアカウント登録の場合は、FALSEに設定します。この場合、 クイックコネクト は FreeRTOS コンソール。

コンパイラ設定

テンプレートファイルの 2 番目のセクションはボードのコンパイラ設定を定義します。コンパイラ設定を保持するターゲットを作成するには、 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 を使用して linker-search ディレクトリを提供します。• target_link_libraries を使用してリンク先のライブラリを提供します。

Note

他の場所でコンパイラ設定を定義する場合は、ファイルのこのセクションにある情報を複製する必要はありません。代わりに、DEPENDS を使用して afr_mcu_port を呼び出して、別の場所からターゲット定義を取り込みます。以下に例を示します。

# your_target is defined somewhere else. It does not have to be in the same file.

14

Page 19: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

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 変数を使用してコンパイラ設定を動的に選択できます。この変数は、使用しているコンパイラの名前に設定されます。コンパイラ名は、/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 ジェネレータ式。

以下に例を示します。

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 ポータブルレイヤーテンプレートファイルの 3 番目のセクションでは、FreeRTOS のすべてのポータブルレイヤーターゲット(つまり、ライブラリ) を定義します。

実装を計画している各 FreeRTOS モジュールに対してポータブルレイヤーターゲットを定義するには、afr_mcu_port(module_name) 関数を使用する必要があります。

任意の CMake 任意の関数を afr_mcu_port コールは、対応する FreeRTOS モジュール。

[ afr_mcu_port 関数は、 グローバルインターフェースインポート済みライブラリターゲット フォームの名前と AFR::module_name::mcu_port. 1つの GLOBAL ターゲットで参照できます。 CMakeファイルをリストします。INTERFACE ターゲットとしては、スタンドアロンのターゲットまたはライブラリとしては構築されていませんが、対応する FreeRTOS モジュールにコンパイルされています。IMPORTED ターゲットとして、その名前にはターゲット名に名前空間 (::) が含まれます (たとえば、AFR::kernel::mcu_port)。

15

Page 20: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

対応するポータブルレイヤーターゲットのないモジュールは、デフォルトで無効になっています。以下を実行する場合 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 モジュールを構築することもできます。例えば、MQTT ライブラリが使用可能になっている場合、その唯一の依存関係は MQTT ライブラリであるため、Device Shadow ライブラリも使用可能になります。

Note

[ FreeRTOS カーネル依存性は最小要件です。[ CMake 構成が失敗した場合、 FreeRTOS カーネルの依存関係が満たされていません。

カーネル移植ターゲットの設定

カーネル ポーティング ターゲット(AFR::kernel::mcu_port)、電話 afr_mcu_port モジュール名とkernel. お電話で afr_mcu_port、 FreeRTOS ポータブル・レイヤーとドライバ・コードです。ターゲットを作成した後、依存関係情報および FreeRTOS ポータブル レイヤーとドライバ コードの情報を使用して、ターゲットが使用できるようにします。

次の手順に従って、カーネル ポーティング ターゲットを設定します。

カーネル移植ターゲットを設定するには

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})

16

Page 21: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

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

また、 FreeRTOS ポータブル・レイヤーを、これらのソース・ファイルとそのインクルード・ディレクトリを AFR::kernel::mcu_port ターゲット。

3. カーネルポータブルレイヤーターゲットを作成します。

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

# 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 カーネルポートを使用する簡単なアプリケーションを書くことができます。開発と構築の詳細については、 FreeRTOS アプリケーションCMake、参照 建物 FreeRTOS と CMake (p. 19).

5. デモを作成したら、リストファイルに add_executable と target_link_libraries の呼び出しを追加し、カーネルを静的ライブラリとしてコンパイルして、カーネルのポータブルレイヤーが正しく設定されていることを確認します。

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

17

Page 22: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

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 モジュールのポータブルレイヤーには、ドライバーコードに基づく実装ファイルが 1 つだけあります。

FreeRTOS Secure Socket モジュール用の移植可能なレイヤーを追加する場合、モジュールは TLS に依存します。このため、ポータブル・レイヤー・ターゲットは Wi-Fi モジュールよりもやや複雑になります。FreeRTOS は、 に基づいてデフォルトの TLS 実装を提供します。 mbedTLS リンク先:

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 Secure Sockets ポータブル・レイヤーは、AFR::tls.

すべての FreeRTOS モジュールをターゲット名を使用して AFR::module_name. たとえば、同じ構文を使用して、 FreeRTOS-Plus-TCP:

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

Note

プラットフォームが単独で TLS を処理する場合は、ドライバーコードを直接使用できます。ドライバーコードを TLS に直接使用する場合は、すべての FreeRTOS モジュールがドライバーコードを含むカーネルに暗黙的に依存しているため、target_link_libraries を呼び出す必要はありません。カーネル以外のすべての 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".

18

Page 23: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

# 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」を参照してください。2 番目の署名を使用します。以下に例を示します。

# This should run an external command "command --arg1 --arg2".add_custom_command( TARGET ${exe_target} POST_BUILD COMMAND "command" "--arg1" "--arg2")

Note

CMake は、ディレクトリの作成、ファイルのコピーなどのための、プラットフォームに依存しない多くの一般的なオペレーションをサポートしています。詳細情報については、 CMake コマンド ライン操作については、を参照してください。 Cコマンドラインツール参照の作成. _を参照できます。 CMake コマンド ライン ツール、 CMake 組み込み変数を含むリスト ファイル${CMAKE_COMMAND}.

建物 FreeRTOS と CMakeCMake はデフォルトであなたのホストオペレーティングシステムをターゲットシステムとしてターゲットにします。使用するには CMake クロスコンパイルでは、使用するコンパイラを指定するツールチェーンファイルを提供する必要があります。 FreeRTOS には、デフォルトのツールチェーンファイルがあります。 /tools/cmake/toolchains. ツールチェーンファイルの使用方法は、 CMake コマンド・ライン・

19

Page 24: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

インタフェースまたはGUI。 ビルドファイルの生成 (CMake コマンドラインツール) (p. 20) に詳細があります。クロスコンパイルの詳細については、 CMake、 クロスコンパイル 公式の CMake ウィキ。

構築するには、 CMake- ベース・プロジェクト

1. 実行 CMake Make や Ninja などのネイティブビルドシステムのビルドファイルを生成します。

次のいずれかの Cコマンドラインツールの作成 または CMake GUI(GUI) ネイティブビルドシステムのビルドファイルを生成します。

FreeRTOS ビルドファイルの生成については、「ビルドファイルの生成 (CMake コマンドラインツール) (p. 20)」および「ビルドファイルの生成 (CMake GUI) (p. 21)」を参照してください。

2. プロジェクトを実行可能ファイルにするには、ネイティブビルドシステムを起動します。

FreeRTOS ビルドファイルの作成については、「生成されたビルドファイルから FreeRTOS をビルドする (p. 23)」を参照してください。

ビルドファイルの生成 (CMake コマンドラインツール)

[ CMake コマンド・ライン・ツール(cmake) を使用して、次のビルドファイルを生成します。 FreeRTOSコマンド ラインからクリックします。

ビルドファイルを生成するには、ターゲットボード、コンパイラ、およびソースコードの場所を指定してディレクトリを構築する必要があります。ターゲット ボードを -DVENDOR オプション。-DCOMPILER オプションを使用してコンパイラを指定します。-S スイッチを使用してソースコードの場所を指定し、-Bスイッチを使用して生成したビルドファイルの場所を指定します。

Note

コンパイラはシステムの PATH 変数内にあるか、あるいはコンパイラの場所を指定する必要があります。

たとえば、ベンダーが Texas Instruments、ボードが CC3220 Launchpad、コンパイラが GCC for ARM の場合、次のコマンドを発行して、現在のディレクトリにあるソースファイルから build-directory という名前のディレクトリに構築することができます。

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

Note

Windows を使用している場合は、ネイティブ ビルド システムを指定する必要があります。CMake はデフォルトで Visual Studio を使用します。以下に例を示します。

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

または:

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

正規表現 ${VENDOR}.* と ${BOARD}.* は、一致するボードを検索するために使用されるので、VENDORと BOARD のオプションにベンダーとボードのフルネームを使用する必要はありません。部分一致は、単一の一致がある場合に限り機能します。たとえば、次のコマンドは同じソースから同じビルドファイルを生成します。

20

Page 25: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

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_TOOLCHAIN_FILE オプションで、デフォルトのディレクトリにないツールチェーンファイルを使用します。 cmake/toolchains. 例:

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(GUI)

1. コマンドラインから cmake-gui を発行して GUI を起動します。2. [Browse Source (ソースの参照)] を選択してソース入力を指定してから、[Browse Build (ビルドの参

照)] を選択してビルド出力を指定します。

3. [設定] を選択し、[Specify the build generator for this project (このプロジェクトのビルドジェネレータを指定)] で、生成されたビルドファイルの構築に使用するビルドシステムを見つけて選択します。

21

Page 26: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

Note

ポップアップウィンドウが表示されない場合は、既存のビルドディレクトリを再利用している可能性があります。この場合、 CMake クリックすると、最初にキャッシュされます。[ファイル] -> [削除] [キャッシュ] を選択します。

4. [Specify toolchain file for cross-compiling (クロスコンパイル用にツールチェーンファイルを指定)] を選択してから、[次へ] を選択します。

5. ツールチェーンファイル (/tools/cmake/toolchains/arm-ti.cmake など) を選択し、[Finish(完了)] を選択します。

FreeRTOS のデフォルト設定はテンプレートボードです。これはポータブルレイヤーターゲットを提供しません。そのため、[Error in configuration process (設定プロセスのエラー)] メッセージを示すウィンドウが表示されます。

Note

以下のエラーメッセージが表示される場合。

CMake Error at tools/cmake/toolchains/find_compiler.cmake:23 (message):Compiler not found, you can specify search path with "AFR_TOOLCHAIN_PATH".

コンパイラが環境変数 PATH にないことを示しています。GUI で AFR_TOOLCHAIN_PATH変数を設定して、 CMake コンパイラをインストールしました。AFR_TOOLCHAIN_PATH 変数が見つからない場合、ポップアップウィンドウで [Add Entry (エントリの追加)] ボタンをクリックして、[name (名前)] に AFR_TOOLCHAIN_PATH を入力、[type (タイプ)] に PATH を選択し、[value (値)] にコンパイラパス (「C:/toolchains/arm-none-eabi-gcc」など) を入力します。

6. GUI は次のようになります。

22

Page 27: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド作成 CMake リストファイル

[AFR_BOARD] を選択し、ボードを選択してから、もう一度 [設定] を選択します。7. 選択 生成. CMake はビルドシステムファイル(makefiles や ninja ファイルなど)を作成し、これらの

ファイルは最初のステップで指定したビルドディレクトリに表示されます。次のセクションの手順に従って、バイナリイメージを生成します。

生成されたビルドファイルから FreeRTOS をビルドする

出力バイナリディレクトリからビルドシステムコマンドを呼び出すことで、ネイティブビルドシステムでFreeRTOS を構築できます。たとえば、ビルドファイルの出力ディレクトリが build-directory で、ネイティブビルドシステムとして Make を使用している場合は、次のコマンドを実行します。

cd build-directory make -j4

また、 CMake コマンド・ライン・ツールで FreeRTOS. CMake は、ネイティブビルドシステムを呼び出すための抽象化レイヤーを提供します。以下に例を示します。

23

Page 28: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

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 ビルドモード、 C文書を作成する.

24

Page 29: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド

FreeRTOS ライブラリの移植移植を開始する前に、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」の手順に従います。

FreeRTOS をデバイスに移植するには、次のトピックの指示に従います。

1. configPRINT_STRING() マクロの実装 (p. 28)2. FreeRTOS カーネルの移植の設定 (p. 29)3. Wi-Fi ライブラリの移植 (p. 30)

Note

デバイスで Wi-Fi がサポートされていない場合は、イーサネット接続を使用して AWS Cloudに接続できます。FreeRTOS Wi-Fi ライブラリの移植は必ずしも必須とは限りません。

4. TCP/IP スタックの移植 (p. 36)5. セキュアソケットライブラリの移植 (p. 41)6. PKCS #11 ライブラリの移植 (p. 48)7. TLS ライブラリの移植 (p. 53)8. テスト用の MQTT ライブラリの設定 (p. 71)9. テスト用の HTTPS クライアントライブラリの設定 (p. 72)

Note

現在、FreeRTOS HTTPS ライブラリの移植は、認定には必要ありません。10.OTA ライブラリの移植 (p. 73)

Note

現在、FreeRTOS OTA 更新ライブラリの移植は、認定には必要ありません。11.Bluetooth Low Energy Library の移植 (p. 81)

Note

現在、FreeRTOS Bluetooth Low Energy ライブラリの移植は、認定には必要ありません。12.共通 I/O ライブラリの移植 (p. 85)

Note

現在、FreeRTOS 共通 I/O ライブラリの移植は、認定には必要ありません。

FreeRTOS をボードに移植した後で、AWS IoT Device Tester for FreeRTOS を使用して、FreeRTOS認定のために移植を公式に検証できます。AWS IoT Device Tester for FreeRTOS の詳細については、FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOS を使用する」を参照してください。

Note

FreeRTOS の AWS IoT Device Tester を使用して FreeRTOS のポートを検証する前に、テスト目的でコードに挿入した可能性のあるログメッセージをすべて削除する必要があります。削除しないと、検証が失敗する可能性があります。

FreeRTOS 用デバイスの認定については、「FreeRTOS 認定ガイド」を参照してください。

25

Page 30: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド移植フローチャート

FreeRTOS 移植フローチャートFreeRTOS をデバイスに移植する際の視覚的な補助として、以下のフローチャートを使用します。

26

Page 31: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド移植フローチャート

27

Page 32: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドconfigPRINT_STRING()

configPRINT_STRING() マクロの実装FreeRTOS ライブラリを移植する前に、configPRINT_STRING() マクロを実装する必要があります。FreeRTOS では、configPRINT_STRING() を使用して、人間が判読できる ASCII 文字列としてテスト結果を出力します。

前提条件configPRINT_STRING() マクロを実装するには、以下が必要になります。

• UART または仮想 COM ポート出力に対応した開発ボード。• プラットフォーム用に設定された FreeRTOS プロジェクト、および移植テスト IDE プロジェクト。

詳細については、移植用の FreeRTOS ソースコードのセットアップ (p. 8) を参照してください。

実装configPRINT_STRING() を実装するには

1. デバイスをターミナルエミュレータに接続して、テスト結果を出力します。2. ファイル /vendors/vendor/boards/board/aws_tests/application_code/main.c を開

き、prvMiscInitialization() 関数で configPRINT_STRING("Test Message") の呼び出しを見つけます。

3. configPRINT_STRING("Test Message") の呼び出しの直前で、ベンダー提供の UART ドライバーを使用するコードを追加して、UART ボーレートレベルを 115200 に初期化します。

4. /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSConfig.h を開き、configPRINT_STRING() の空の定義を見つけます。マクロは、Null 終端 ASCII C 文字列をその唯一のパラメータとして取得します。

5. configPRINT_STRING() の空の定義を更新します。ベンダー提供の UART 出力関数が呼び出されます。

たとえば、UART 出力関数に以下のプロトタイプが含まれているとします。

void MyUARTOutput( char *DataToOutput, size_t LengthToOutput );

以下のように configPRINT_STRING() を実装します。

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

テストテストデモプロジェクトを構築して、実行します。UART コンソールに Test Message が表示される場合、コンソールは接続され、正しく設定されています。configPRINT_STRING() は正常に動作しており、テストは完了しました。prvMiscInitialization() から configPRINT_STRING("TestMessage") への呼び出しを削除できます。

configPRINT_STRING() マクロを実装すると、デバイスの FreeRTOS カーネルの移植の設定を開始できます。手順については、「FreeRTOS カーネルの移植の設定 (p. 29)」を参照してください。

28

Page 33: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドFreeRTOS カーネル

FreeRTOS カーネルの移植の設定このセクションでは、FreeRTOS カーネルの移植を FreeRTOS 移植テストプロジェクトに統合する手順を示します。利用可能なカーネルの移植のリストについては、「FreeRTOS Kernel Ports」を参照してください。

FreeRTOS では FreeRTOS カーネルを使用してマルチタスクおよびタスク間の通信を実現します。詳細については、FreeRTOS ユーザーガイドの「FreeRTOS カーネルの基礎」および「FreeRTOS.org」を参照してください。

Note

FreeRTOS カーネルの新しいアーキテクチャへの移植はこのドキュメントの範囲外です。FreeRTOS カーネルの新しいアーキテクチャへの移植に関心をお持ちの場合は、FreeRTOSエンジニアリングチームにお問い合わせください。FreeRTOS 認定プログラムでは、既存の移植のみがサポートされます。これらの移植に変更を加えることは、認定プログラム内では受け入れられません。Github または Sourceforge からダウンロードできる公式の移植のみが受け入れられます。

前提条件FreeRTOS カーネルを移植のためにセットアップするには、以下のものが必要です。

• ターゲットプラットフォーム用の公式の FreeRTOS カーネル移植。• ターゲットプラットフォーム用の正しい FreeRTOS カーネル移植ファイルおよびコンパイラが含まれて

いる IDE プロジェクトまたは CMakeLists.txt リストファイル。

テストプロジェクトの設定については、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」を参照してください。

• デバイスへの configPRINT_STRING() マクロの実装。

configPRINT_STRING() の実装の詳細については、「configPRINT_STRING() マクロの実装 (p. 28)」を参照してください。

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 を増やしま

29

Page 34: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドテスト

設定オプション 説明す。RAM を保存するには、スタックサイズをスタックオーバーフローが発生しない最小値に設定します。

configTOTAL_HEAP_SIZE FreeRTOS ヒープのサイズを設定します。タスクのスタックサイズと同様に、ヒープサイズは、未使用のヒープスペースによって RAM が消費されないように調整することができます。

Note

ARM Cortex-M3、M4、または M7 デバイスを移植している場合は、configPRIO_BITS とconfigMAX_SYSCALL_INTERRUPT_PRIORITY も正しく指定する必要があります。

テスト1. /libraries/freertos_plus/standard/utils/src/iot_system_init.c を開

き、SOCKETS_Init() を関数 SYSTEM_Init() 内から呼び出す行をコメントアウトします。この初期化関数は、まだ移植していないライブラリに属しています。このライブラリの移植セクションには、この関数をコメント解除する手順が含まれています。

2. テストプロジェクトを構築し、デバイスにフラッシュして実行します。3. "." が 5 秒ごとに UART コンソールに表示されたら、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. 30)」を参照してください。

Wi-Fi ライブラリの移植FreeRTOS Wi-Fi ライブラリは、ベンダー提供の Wi-Fi ドライバーでやり取りします。FreeRTOS Wi-Fi ライブラリの詳細については、FreeRTOS ユーザーガイドの「FreeRTOS Wi-Fi ライブラリ」を参照してください。

デバイスが Wi-Fi ネットワークをサポートしていない場合は、FreeRTOS Wi-Fi ライブラリの移植をスキップして TCP/IP スタックの移植 (p. 36) を起動できます。

Note

認定を受けるには、デバイスが AWS クラウドに接続する必要があります。デバイスが Wi-Fi をサポートしていない場合は、代わりにイーサネット接続を使用できます。FreeRTOS Wi-Fi ライブラリの移植は必ずしも必須とは限りません。

前提条件Wi-Fi ライブラリを移植するには、以下が必要です。

• ベンダー提供の Wi-Fi ドライバーを含む IDE プロジェクト または CMakeLists.txt リストファイル。

30

Page 35: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド移植

テストプロジェクトの設定については、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」を参照してください。

• FreeRTOS カーネルの検証済み設定。

ご使用のプラットフォーム用の FreeRTOS カーネルの設定については、「FreeRTOS カーネルの移植の設定 (p. 29)」を参照してください。

• 2 つのワイヤレスアクセスポイント。

移植/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 アドレスを取得します。

/libraries/abstractions/wifi/include/iot_wifi.h は、これらの関数を実装するために必要な情報を提供します。

テストIDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップ移植とテストに IDE を使用している場合は、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

Important

次の手順では、必ずソースファイルをディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

IDE プロジェクトに Wi-Fi ライブラリをセットアップするには

1. ソースファイル /vendors/vendor/boards/board/ports/wifi/iot_wifi.c を aws_testsIDE プロジェクトに追加します。

31

Page 36: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドテスト

2. ソースファイル aws_test_wifi.c を aws_tests IDE プロジェクトに追加します。

CMakeLists.txt ファイルの設定CMake を使用してテストプロジェクトをビルドする場合は、CMake リストファイルでライブラリのポータブルレイヤーのターゲットを定義する必要があります。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

Wi-Fi ライブラリのポータブルレイヤーターゲット定義の例については、以下を参照してください。

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

ローカルテスト環境のセットアップIDE プロジェクトにライブラリをセットアップした後、テスト用に他のいくつかのファイルを設定する必要があります。

ソースファイルとヘッダーファイルを Wi-Fi テスト用に設定するには

1. /vendors/vendor/boards/board/aws_tests/application_code/main.c を開き、vApplicationDaemonTaskStartupHook(void) および prvWifiConnect(void) の関数定義内の #if 0 および #endif コンパイラディレクティブを削除します。

2. セキュアなソケットライブラリを移植していない場合は、/libraries/freertos_plus/standard/utils/src/iot_system_init.c を開き、SOCKETS_Init() を呼び出す行をコメントアウトします。セキュアソケットライブラリの移植 (p. 41) セクションでは、この初期化関数呼び出しをコメント解除するように指示されます。

3. /tests/include/aws_clientcredential.h を開き、最初の AP 用に次の表のマクロを設定します。

マクロ 値

clientcredentialWIFI_SSID C 文字列としての Wi-Fi SSID (引用符内)。

clientcredentialWIFI_PASSWORD C 文字列としての Wi-Fi パスワード (引用符内)。

clientcredentialWIFI_SECURITY 次のいずれかです。

• eWiFiSecurityOpen

• eWiFiSecurityWEP

• eWiFiSecurityWPA

• eWiFiSecurityWPA2

eWiFiSecurityWPA2 をお勧めします。

32

Page 37: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドテスト

4. /libraries/abstractions/wifi/test/aws_test_wifi.h を開き、2 番目の AP 用に次の表のマクロを設定します。

マクロ 値

testWIFI_SSID C 文字列としての Wi-Fi SSID (引用符内)。

testWIFI_PASSWORD C 文字列としての Wi-Fi パスワード (引用符内)。

testWIFI_SECURITY 次のいずれかです。

• eWiFiSecurityOpen

• eWiFiSecurityWEP

• eWiFiSecurityWPA

• eWiFiSecurityWPA2

eWiFiSecurityWPA2 をお勧めします。

5. Wi-Fi テストを有効にするには、/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h を開き、testrunnerFULL_WIFI_ENABLED を 1に設定します。

Important

次のテストでは、セキュアソケットライブラリの移植と実行中のエコーサーバーが必要です。

• WiFiConnectionLoop

• WiFiIsConnected

• WiFiConnectMultipleAP

セキュアソケットライブラリを移植してエコーサーバーを起動するまで、これらのテストに合格することはできません。セキュアソケットライブラリを移植してエコーサーバーを起動したら、 Wi-Fi テストを再実行して、すべてのテストに合格することを確認します。セキュアソケットライブラリを移植する方法については、「セキュアソケットライブラリの移植 (p. 41)」を参照してください。エコーサーバーを設定する方法については、「エコーサーバーのセットアップ (p. 45)」を参照してください。

テストの実行Wi-Fi テストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。

33

Page 38: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドテスト

...

34

Page 39: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド検証

検証FreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

35

Page 40: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTCP/IP

FreeRTOS Wi-Fi ライブラリのデバイスへの移植が完了したら、TCP/IP スタックの移植を開始できます。手順については、「TCP/IP スタックの移植 (p. 36)」を参照してください。

TCP/IP スタックの移植FreeRTOS は、オンチップ TCP/IP 機能を持たないボード用の TCP/IP スタックを提供します。プラットフォームが TCP/IP 機能を別のネットワークプロセッサまたはモジュールにオフロードする場合は、この移植のセクションをスキップして セキュアソケットライブラリの移植 (p. 41) を起動できます。

FreeRTOS+TCPは、 FreeRTOS カーネル。 FreeRTOS+TCPは、 FreeRTOS TCP/IPスタックを使用することをお勧めします。 FreeRTOS. 詳細については、ポーティング FreeRTOS+TCP(TCP) (p. 36) を参照してください。

軽量 IP (lwIP) TCP/IP スタックは、 FreeRTOS カーネル。[ lwIP ポート・レイヤーは現在、 lwIP バージョン 2.03。詳細については、ポーティング lwIP (p. 39) を参照してください。

Note

これらの移植セクションでは、プラットフォームのイーサネットまたは Wi-Fi ドライバーへの移植についてのみ説明しています。テストは、イーサネットまたは Wi-Fi ドライバーがネットワークに接続できることを確認するだけです。セキュアソケットライブラリを移植するまで、ネットワークを介したデータの送受信のテストはできません。

ポーティング FreeRTOS+TCP(TCP)FreeRTOS+TCPは、 FreeRTOS カーネル。詳細については、「FreeRTOS.org」を参照してください。

Prerequisitesを移植するには、 FreeRTOS+TCPライブラリの場合、次の操作が必要です。

• ベンダー提供のイーサネットまたは Wi-Fi ドライバーを含む IDE プロジェクトまたはCMakeLists.txt リストファイル。

テストプロジェクトの設定については、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」を参照してください。

• FreeRTOS カーネルの検証済み設定。

構成の詳細については、 FreeRTOS ご使用のプラットフォーム用のカーネルについては、 FreeRTOSカーネルの移植の設定 (p. 29).

Portingの移植を開始する前に、 FreeRTOS-TCPライブラリで、 /libraries/freertos_plus/standard/freertos_plus_tcp/source/portable/NetworkInterface デバイスへのポートがすでに存在するかどうか確認します。

移植が存在しない場合は、次の操作を行います。

1. フォローする ポーティング FreeRTOS+TCPから別のマイクロコントローラへ 説明 FreeRTOS.orgからポートへ FreeRTOS+TCP をデバイスに接続します。

2. 必要に応じて、 ポーティング FreeRTOS+TCPから新しい組み込みCコンパイラへ 説明FreeRTOS.orgからポートへ FreeRTOS+TCP を新しいコンパイラに

36

Page 41: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドポーティング FreeRTOS+TCP(TCP)

3. ベンダー提供のイーサネットまたは Wi-Fi ドライバーを使用する新しい移植をNetworkInterface.c というファイルに実装し、そのファイルを /libraries/freertos_plus/standard/freertos_plus_tcp/source/portable/NetworkInterface/board_family に保存します。

Note

/libraries/freertos_plus/standard/freertos_plus_tcp/source/portable/BufferManagement ディレクトリのファイルは複数の移植で使用されます。このディレクトリ内のファイルは編集しないでください。

移植を作成済みであるか、移植がすでに存在する場合は、/vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h を開き、設定オプションをプラットフォームに適切な内容に設定します。構成オプションの詳細については、以下を参照してください。 FreeRTOS+TCP構成 の FreeRTOS.org。

TestingIDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップ

移植とテストに IDE を使用している場合は、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

Important

次の手順では、必ずソースファイルをディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

をセットアップするには、 FreeRTOSIDEプロジェクト内の+TCPライブラリ

1. /libraries/freertos_plus/standard/freertos_plus_tcp とそのサブディレクトリ内のすべてのソースファイルおよびヘッダーファイルを aws_tests IDE プロジェクトに追加します。

Note

FreeRTOS には、ヒープ管理の実装例が 5 つ含まれています。 /freertos_kernel/portable/MemMang. FreeRTOS+TCPおよび BufferAllocation_2.c は、 heap_4.c又は heap_5.c 実装。FreeRTOS デモアプリケーションが正しく実行されるようにするには、heap_4.c または heap_5.c を使用する必要があります。カスタムヒープ実装を使用しないでください。

2. コンパイラのインクルードパスに /libraries/freertos_plus/standard/freertos_plus_tcp/include を追加します。

CMakeLists.txt ファイルの設定

ご使用の場合 CMake テスト・プロジェクトを構築するには、ライブラリのポータブル・レイヤー・ターゲットを CMake リストファイル。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

37

Page 42: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドポーティング FreeRTOS+TCP(TCP)

ローカルテスト環境のセットアップ

IDE プロジェクトにライブラリをセットアップした後、テスト用に他のいくつかのファイルを設定する必要があります。

TCP テスト用のソースファイルとヘッダーファイルを設定するには

1. Secure Sockets ライブラリを移植していない場合は、 /libraries/freertos_plus/standard/utils/src/iot_system_init.c、および 関数内 SYSTEM_Init()さん、電話する行にコメントをSOCKETS_Init(). _に到達したら セキュアソケットライブラリの移植 (p. 41) 」セクションで、この初期化関数呼び出しのコメントを解除するように指示されます。

2. /vendors/vendor/boards/board/aws_tests/application_code/main.c を開き、FreeRTOS_IPInit() の呼び出しをコメント解除します。

3. 次の配列にネットワークの有効な値を入力してください。

Variable 説明

uint8_t ucMACAddress[ 6 ] デフォルトの MAC アドレス設定。

uint8_t ucIPAddress[ 4 ] デフォルトの IP アドレスの設定。

Note

デフォルトでは、IP アドレスは DHCPによって取得されます。DHCP が失敗した場合、または DHCP を使用しない場合は、ここで定義されている静的 IPアドレスが使用されます。DHCP を無効にするには、 /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h、および を設定 ipconfigUSE_DHCP ~ 0. デモの場合は、 ipconfigUSE_DHCPは で定義されています /vendors/vendor/boards/board/aws_demos/config_files/FreeRTOSIPConfig.h.

uint8_t ucNetMask[ 4 ] デフォルトのネットマスクの設定。

uint8_t ucGatewayAddress[ 4 ] デフォルトのゲートウェイアドレスの設定。

uint8_t ucDNSServerAddress[ 4 ] デフォルトの DNS サーバーアドレスの設定。

4. /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h を開き、ipconfigUSE_NETWORK_EVENT_HOOK マクロを 1 に設定します。

5. /vendors/vendor/boards/board/aws_tests/application_code/main.c を開き、vApplicationIPNetworkEventHook() の関数定義の先頭に次のコードを追加します。

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

38

Page 43: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドポーティング lwIP

テストの実行

_を実行するには FreeRTOS+TCP テスト

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。Network connection successful が表示された

ら、イーサネットまたは Wi-Fi ドライバーはネットワークへの接続に成功しており、テストは完了です。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

ポーティング lwIPlwIP は、代替のオープンソース TCP/IP スタックです。詳細については、以下を参照してください。 lwIP- 軽量 TCP/IP スタック - 要約. FreeRTOS 現在、バージョン2.1.2をサポートしています。

Prerequisitesを移植するには、 lwIP 以下が必要です。

• ベンダー提供のネットワークドライバーを含む IDE プロジェクトまたは CMakeLists.txt リストファイル。

• FreeRTOS カーネルの検証済み設定。

構成の詳細については、 FreeRTOS ご使用のプラットフォーム用のカーネルについては、 FreeRTOSカーネルの移植の設定 (p. 29).

Portingを移植する前に、 lwIP TCP/IP スタックをデバイスに接続します。 /libraries/3rdparty/lwip/src/portable このディレクトリを使用して、プラットフォームへのポートがすでに存在するかどうかを確認します。

1. 移植が存在しない場合は、次の操作を行います。

以下 /libraries/3rdparty/lwip/src/portable、という名前のディレクトリを作成しますvendor/board/netif、ここで、vendor および board ディレクトリがプラットフォームに一致します。

2. /libraries/3rdparty/lwip/src/netif/ethernetif.c スタブファイル内のコメントに従って、このスタブファイルを移植します。

3. 移植の作成後、または移植がすでに存在する場合は、テストプロジェクトの main.c ファイルにtcpip_init() への呼び出しを追加します。

4. イン /vendors/vendor/boards/board/aws_tests/config_files、という名前の構成ファイルを作成します lwipopts.h. このファイルには、次の行が含まれている必要があります。

#include "arch/lwipopts_freertos.h"

39

Page 44: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドポーティング lwIP

このファイルには、プラットフォーム固有の設定オプションも含める必要があります。

TestingIDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

Note

固有の TCP/IP ポート・テストはありません。 lwIP.

IDE テストプロジェクトのセットアップ

移植とテストに IDE を使用している場合は、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

Important

次の手順では、必ずソースファイルをディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

をセットアップするには、 lwIP IDE プロジェクト内のソース ファイルIDEプロジェクトナイノソースファイル

1. lwip/src とそのサブディレクトリ内のすべてのソースファイルおよびヘッダーファイルをaws_tests IDE プロジェクトに追加します。

Note

.c ファイルを IDE プロジェクトに追加してからその .c ファイルをポート用に編集した場合は、元の .c ファイルを IDE プロジェクト内の編集済みのものと置き換える必要があります。

2. コンパイラのインクルードパスに次のパスを追加します。

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

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

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

CMakeLists.txt ファイルの設定

ご使用の場合 CMake テスト・プロジェクトを構築するには、ライブラリのポータブル・レイヤー・ターゲットを CMake リストファイル。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

のセキュア ソケット ライブラリの実装はすでに存在します FreeRTOS+TCP/IP スタックと lwIP スタック。ご使用の場合 FreeRTOS+TCPまたは lwIPでは、Secure Sockets ライブラリを移植する必要はありません。の移植が終わったら、 FreeRTOS+TCP スタックまたは lwIP 端末にスタックすると、 PKCS #11ライブラリの移植 (p. 48). セキュアソケットライブラリ用のポートを作成する必要がない場合でも、ご使用のプラットフォームは、認定のためにセキュアソケットライブラリの AWS IoT Device Tester テストに合格する必要があります。

40

Page 45: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドセキュアソケット

セキュアソケットライブラリの移植FreeRTOS セキュアソケットライブラリを使用して、TCP ソケットを作成および設定します。また、MQTT ブローカーに接続し、TCP データを送受信できます。またセキュアソケットライブラリは TLS機能をカプセル化します。TLS で保護されたソケットを作成するために必要なのは、標準の TCP ソケットだけです。詳細については、FreeRTOS ユーザーガイドの「FreeRTOS セキュアソケットライブラリ」を参照してください。

FreeRTOS には、FreeRTOS+TCP および lightweight IP (lwIP) TCP/IP スタック用の セキュアソケット実装が含まれています。これらは mbedTLS と組み合わせて使用されます。いずれかの FreeRTOS+TCPまたは lwIP TCP/IP スタックの場合、Secure Sockets ライブラリをポートする必要はありません。

Note

セキュアソケットライブラリのポートを作成する必要がない場合でも、プラットフォームはセキュアソケットライブラリの認定テストに合格する必要があります。認定は AWS IoT DeviceTesterの結果に基づいています。また、TLS 実装は、AWS IoT でサポートされている TLS 暗号スイートをサポートする必要があります。

プラットフォームが TCP/IP 機能を別のネットワークチップにオフロードする場合は、FreeRTOS セキュアソケットライブラリをデバイスに移植する必要があります。

Prerequisitesセキュアソケットライブラリを移植するには、以下が必要です。

• Wi-Fi ライブラリのポート (ネットワーク接続に Wi-Fi を使用している場合にのみ必要)。

Wi-Fi ライブラリを移植する方法については、「Wi-Fi ライブラリの移植 (p. 30)」を参照してください。

• TCP/IP スタックのポート。

TCP/IP スタックを移植する方法については、「TCP/IP スタックの移植 (p. 36)」を参照してください。

• エコーサーバー。

FreeRTOS の /tools/echo_server ディレクトリには、Go で書かれたエコーサーバーが含まれています。詳細については、エコーサーバーのセットアップ (p. 45) を参照してください。

Portingプラットフォームが TCP/IP 機能を別のネットワークチップにオフロードする場合は、スタブが /vendors/vendor/boards/board/ports/secure_sockets/iot_secure_sockets.c に存在するすべての関数を実装する必要があります。

TestingIDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップ移植とテストに IDE を使用している場合は、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

41

Page 46: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

Important

次の手順では、必ずソースファイルをディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

IDE プロジェクトにセキュアソケットライブラリをセットアップするには

1. [ FreeRTOS+TCP/IP スタック、追加 /libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c を aws_tests IDEプロジェクト。

[ lwIP TCP/IP スタック、追加 /libraries/abstractions/secure_sockets/lwip/iot_secure_sockets.c を aws_tests IDEプロジェクト。

独自の TCP/IP ポートを使用している場合は、aws_tests IDE プロジェクトに /vendors/vendor/boards/board/ports/secure_sockets/iot_secure_sockets.c を追加します。

2. aws_tests IDE プロジェクトに secure_sockets/test/aws_test_tcp.c を追加します。

CMakeLists.txt ファイルの設定ご使用の場合 CMake テスト・プロジェクトを構築するには、ライブラリのポータブル・レイヤー・ターゲットを CMake リストファイル。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/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. /libraries/freertos_plus/standard/utils/src/iot_system_init.c を開き、関数SYSTEM_Init() で、SOCKETS_Init() を呼び出す行がコメントアウトされていないことを確認します。

2. エコーサーバーを起動します。

42

Page 47: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

TLS ライブラリをプラットフォームに移植していない場合は、セキュアでないエコーサーバー (/tools/echo_server/echo_server.go) を使用してのみセキュアソケットポートをテストできます。セキュアでないエコーサーバーのセットアップと実行の手順については、「エコーサーバーのセットアップ (p. 45)」を参照してください。

3. aws_test_tcp.h で、IP アドレスをサーバーの正しい値に設定します。たとえば、サーバーのIPアドレスが 192.168.2.6 の場合は、aws_test_tcp.h に次の値を設定します。

マクロ 値

tcptestECHO_SERVER_ADDR0 192

tcptestECHO_SERVER_ADDR1 168

tcptestECHO_SERVER_ADDR2 2

tcptestECHO_SERVER_ADDR3 6

4. aws_test_tcp.h を開き、tcptestSECURE_SERVER マクロを 0 に設定して、TLS なしでセキュアソケットテストを実行します。

5. /vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner.config.hを開き、testrunnerFULL_TCP_ENABLED マクロを 1 に設定して、ソケットテストを有効にします。

6. /vendors/vendor/boards/board/aws_tests/application_code/main.c を開き、vApplicationIPNetworkEventHook ( void ) 定義内の #if 0 および #endif コンパイラディレクティブを削除して、テストタスクを有効にします。

Note

この変更は残りのライブラリを移植するために必要です。

Important

認定を受けるには、TLS を使用したセキュアソケットテストに合格する必要があります。TLS ライブラリを移植した後は、TLS 対応のエコーサーバーを使用して、TLS テストを有効にしてセキュアソケットテストを再実行してください。TLS ライブラリを移植するには、「TLS ライブラリの移植 (p. 53)」を参照してください。

TLS ライブラリを移植した後にセキュアソケットのテストをセットアップするには

1. セキュアなエコーサーバーを起動します。

詳細については、「エコーサーバーのセットアップ (p. 45)」を参照してください。2. /tests/include/aws_test_tcp.h で IP アドレスとポートを設定して、サーバーの値を修正しま

す。たとえば、サーバーの IP アドレスが 192.168.2.6 で、サーバーが 9000 でリッスンしている場合は、/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

43

Page 48: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

マクロ 値

tcptestECHO_PORT_TLS 9000

3. /tests/include/aws_test_tcp.h を開き、tcptestSECURE_SERVER マクロを 1 に設定して、TLS テストを有効にします。

4. 信頼されたルート証明書をダウンロードしてください。承認されたルート証明書とダウンロードリンクについては、AWS IoT 開発者ガイドの「サーバー認証」を参照してください。Amazon TrustServices の証明書を使用することをお勧めします。

5. ブラウザウィンドウで、/tools/certificate_configuration/PEMfileToCString.html を開きます。

6. [PEM Certificate or Key (PEM 証明書またはキー)] で、ダウンロードしたルート CA ファイルを選択します。

7. [Display formatted PEM string to be copied into aws_clientcredential_keys.h(aws_clientcredential_keys.h にコピーするフォーマット済み PEM 文字列を表示する)] を選択してから、証明書文字列をコピーします。

8. aws_test_tcp.h を開き、フォーマット済みの証明書文字列を tcptestECHO_HOST_ROOT_CA の定義内に貼り付けます。

9. 2つ目の OpenSSL コマンド /tools/echo_server/readme-gencert.txt 認証機関が署名するクライアント証明書と秘密鍵を生成します。証明書とキーによって、カスタムエコーサーバーは、TLS認証中にデバイスが提示するクライアント証明書を信頼できます。

10. /tools/certificate_configuration/PEMfileToCString.html フォーマットツールで証明書とキーをフォーマットします。

11. デバイスでテストプロジェクトをビルドして実行する前に、aws_clientcredential_keys.hを開き、PEM 形式のクライアント証明書と秘密キーを keyCLIENT_CERTIFICATE_PEM とkeyCLIENT_PRIVATE_KEY_PEM の定義にコピーします。

テストの実行セキュアソケットテストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。

...

44

Page 49: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドValidation

すべてのテストに合格したら、テストは完了です。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

FreeRTOS セキュアソケットライブラリのデバイスへの移植が完了したら、PKCS #11 ライブラリの移植を開始できます。手順については、「PKCS #11 ライブラリの移植 (p. 48)」を参照してください。

エコーサーバーのセットアップ/tools/echo_server/ ディレクトリには、FreeRTOS で TCP をテストするために使用できる、Goベースのエコーサーバーのソースコードがあります。TCP テストは、/libraries/abstractions/secure_sockets/test/iot_test_tcp.c ファイルにあります。エコーサーバーをセットアップして実行するには、このセクションに記載されている手順に従ってください。

PrerequisitesTLS エコーサーバーを実行するには、以下をインストールする必要があります。

• Go – 最新のバージョンは golang.org からダウンロードできます。• OpenSSL – Linux ソースコードのダウンロードについては、OpenSSL.org のページを参照してくださ

い。また、パッケージマネージャを使用して、 OpenSSL Linuxと macOS.

認証情報の作成前提条件として必要な作業を完了したら、次のコマンドを入力して認証情報を作成する必要があります。

45

Page 50: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドエコーサーバーのセットアップ

サーバー

次の 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 2048openssl 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

ディレクトリ構造デフォルトでは、証明書とキーは、 certs 設定ファイルで指定された相対パスにある場合は、config.json. 資格情報を別のディレクトリに移動する場合は、構成ファイル内のこのディレクトリの場所を更新できます。

エコーサーバーのソースコードは、echo_server.go ファイルにあります。

サーバー設定エコーサーバーは JSON ベースの設定ファイルを読み込みます。このJSONファイルのデフォルトの場所は、 ./config.json. これを上書きするには、 -config フラグ。

JSON ファイルには、次のオプションが含まれています。

46

Page 51: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドエコーサーバーのセットアップ

server-port

ソケットを開くポートを指定します。server-certificate-location

「認証情報の作成 (p. 45)」で生成されたサーバー証明書への相対パスまたは絶対パス。secure-connection

エコーサーバーで TLS を使用するには、このオプションを有効にします。先に認証情報の作成 (p. 45)を行う必要があります。

logging

受信したすべてのログメッセージをファイルに出力するには、このオプションを有効にします。verbose

エコーサーバーに送信されたメッセージの内容を出力するには、このオプションを有効にします。server-key-location

「認証情報の作成 (p. 45)」で生成されたサーバーキーへの相対パスまたは絶対パス。

設定例

{ "verbose": false, "logging": false, "secure-connection": false, "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 テストとセキュアな TCP テストを同時に実行する場合は、セキュアなエコーサーバーとセキュアでないエコーサーバーの両方を起動する必要があります。これを行うには、セキュリティで保護された 2 つ目の設定ファイルを作成し、-config フラグを使用して、この設定ファイルの場所をエコーサーバーの 2 番目のインスタンスに渡します。2 番目の設定ファイルで別の TCP ポートを指定することも忘れないでください。

クライアントデバイスの設定デバイスで TCP テストを実行する前に、 を使ってみる FreeRTOS を FreeRTOS ユーザーガイド.

「認証情報の作成 (p. 45)」の手順を完了すると、次のファイルが作成されます。

• certs/server.pem

47

Page 52: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドPKCS #11

• certs/server.key

• certs/server.srl

• certs/client.pem

• certs/client.key

• certs/client.csr

これらのファイルに以下の変更を加えます。

/tests/include/aws_clientcredential.h

• ブローカーエンドポイントを定義します。• Thing 名を定義します。• Wi-Fi へのアクセスを定義します (イーサネットでない場合)。

/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 デモ.

/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]

• tcptestECHO_PORT_TLS

PKCS #11 ライブラリの移植FreeRTOS はオープンスタンダードの PKCS #11 “CryptoKi” API を暗号化操作の抽象化レイヤーとして使用しています。

• 署名と検証。• X.509 証明書の保管と列挙。• 暗号化キーの保管と管理。

詳細については、「PKCS #11 暗号化トークンインターフェイスの基本仕様」を参照してください。

汎用のフラッシュメモリにプライベートキーを格納すると、評価やラピッドプロトタイピングのシナリオで便利になります。本稼働シナリオでは、データの盗難やデバイスの複製による脅威を軽減するために、専用の暗号化ハードウェアを使用することをお勧めします。暗号化ハードウェアには、暗号化シークレットキーのエクスポートを妨げる機能を備えたコンポーネントが含まれています。FreeRTOS で専用の暗号化ハードウェアを使用するには、PKCS #11 API をハードウェアに移植する必要があります。FreeRTOSPKCS #11 ライブラリの詳細については、FreeRTOS ユーザーガイドの「FreeRTOS PKCS #11 ライブラリ」を参照してください。

PrerequisitesPKCS #11 ライブラリを移植するには、以下が必要です。

48

Page 53: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドPorting

• 機密データに適したベンダー提供のドライバーを含む IDE プロジェクトまたは CMakeLists.txt リストファイル。

テストプロジェクトの設定については、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」を参照してください。

• FreeRTOS カーネルの検証済み設定。

ご使用のプラットフォーム用の FreeRTOS カーネルの設定については、「FreeRTOS カーネルの移植の設定 (p. 29)」を参照してください。

PortingPKCS #11 ライブラリを移植するには

1. PKCS #11 API 機能を移植します。

PKCS #11 API は、SHA256 ハッシュや楕円曲線デジタル署名アルゴリズム (ECDSA) 署名などの暗号化プリミティブの実装に依存しています。

PKCS#11 の FreeRTOS 実装では、mbedTLS ライブラリに実装されている暗号化プリミティブを使用します。FreeRTOS には mbedTLS 用のポートが含まれています。ターゲットハードウェアが暗号化を別のモジュールにオフロードする場合、または mbedTLS 以外の暗号化プリミティブのソフトウェア実装を使用する場合は、既存の PKCS #11 ポートを変更する必要があります。

2. PKCS # 11 プラットフォーム抽象化層 (PAL) をデバイス固有の証明書とキーストレージ用に移植します。

KCS #11 の FreeRTOS 実装を使用する場合、オンボードフラッシュメモリなどの不揮発性メモリ(NVM) への暗号化オブジェクトの読み書きには、ほとんどカスタマイズは必要ありません。

暗号化オブジェクトは、初期化されておらず、デバイスの再プログラミングで消去されない NVM のセクションに格納する必要があります。PKCS #11 ライブラリのユーザーは、認証情報を使用してデバイスをプロビジョニングしてから、PKCS #11 インターフェイスを介してこれらの認証情報にアクセスする新しいアプリケーションを使用してデバイスを再プログラムできるはずです。

PKCS #11 PAL ポートは以下を格納する場所を提供する必要があります。

• デバイスのクライアント証明書。• デバイスのクライアントのプライベートキー。• デバイスクのライアントのパブリックキー。• 信頼されたルート CA。• 安全なブートローダーと無線 (OTA) 更新用のコード検証パブリックキー (またはコード検証パブ

リックキーを含む証明書)。• ジャストインタイムのプロビジョニング証明書。

/vendors/vendor/boards/board/ports/pkcs11/iot_pkcs11_pal.c には PAL 関数の空の定義が含まれています。最低でもこの表にリストされている関数のためのポートを提供して下さい。

関数 説明:

PKCS11_PAL_Initialize PAL レイヤーを初期化します。初期化シーケンスの開始時に PKCS #11 ライブラリによって呼び出されます。

PKCS11_PAL_SaveObject データを不揮発性ストレージに書き込みます。

49

Page 54: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドPorting

関数 説明:

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() 関数を実装します。mbedtls_hardware_poll() 関数は /vendors/vendor/boards/board/ports/pkcs11/iot_pkcs11_pal.c にあります。

• 移植で基になる暗号化および TLS サポートのために mbedTLS ライブラリを使用しているが、デバイスに TRNG がない場合:

1. /libraries/3rdparty/mbedtls/include/mbedtls/config.h のコピーを作成し、そのコピーで MBEDTLS_ENTROPY_NV_SEED をコメント解除して、MBEDTLS_ENTROPY_HARDWARE_ALT をコメントアウトします。

の変更されたバージョンを保存 config.h から /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) 構築の推奨事項

50

Page 55: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

TestingIDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップ移植とテストに IDE を使用している場合は、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

Important

次の手順では、必ずソースファイルをディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

IDE プロジェクトで PKCS #11 ライブラリをセットアップするには

1. ソースファイル /vendors/vendor/boards/board/ports/pkcs11/iot_pkcs11_pal.c をaws_tests IDE プロジェクトに追加します。

2. /libraries/abstractions/pkcs11 ディレクトリとそのサブディレクトリにあるすべてのファイルを aws_tests IDE プロジェクトに追加します。

3. /libraries/freertos_plus/standard/pkcs11 ディレクトリとそのサブディレクトリにあるすべてのファイルを aws_tests IDE プロジェクトに追加します。これらのファイルは、一般的にグループ分けされた PKCS#11 関数セットのラッパーを実装します。

4. ソースファイル /libraries/freertos_plus/standard/crypto/src/aws_crypto.c をaws_tests IDE プロジェクトに追加します。このファイルは、mbedTLS 用の CRYPTO 抽象化ラッパーを実装しています。

5. /libraries/3rdparty/mbedtls とそのサブディレクトリにあるすべてのソースファイルとヘッダーファイルを aws_tests IDE プロジェクトに追加します。

6. コンパイラのインクルードパスに /libraries/3rdparty/mbedtls/include と /libraries/abstractions/pkcs11 を追加します。

CMakeLists.txt ファイルの設定CMake を使用してテストプロジェクトをビルドする場合は、CMake リストファイルでライブラリのポータブルレイヤーのターゲットを定義する必要があります。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

PKCS#11 の mbedTLS ベースのソフトウェア実装を使用し、ポート固有の PKCS#11 PAL ファイルを提供する PKCS#11 ライブラリのポータブルレイヤーのターゲット定義の例については、以下を参照してください。

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

51

Page 56: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドValidation

)

ローカルテスト環境のセットアップIDE プロジェクトにライブラリをセットアップした後、テスト用に他のいくつかのファイルを設定する必要があります。

PKCS #11 テスト用のソースファイルとヘッダーファイルを設定するには

1. セキュアソケットライブラリを移植した場合は、/libraries/freertos_plus/standard/utils/src/iot_system_init.c を開き、関数 SYSTEM_Init() で、SOCKETS_Init() の呼び出しをコメント解除します。

2. /vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.hを開き、testrunnerFULL_PKCS11_ENABLED マクロを 1 に設定して PKCS #11 テストを有効にします。

テストの実行PKCS#11 テストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。

...

すべてのテストに合格したら、テストは完了です。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

52

Page 57: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTLS

FreeRTOS PKCS #11 ライブラリのデバイスへの移植が完了したら、TLS ライブラリの移植を開始できます。手順については、「TLS ライブラリの移植 (p. 53)」を参照してください。

TLS ライブラリの移植Transport Layer Security (TLS) 認証の場合、FreeRTOS は mbedTLS または一部のネットワークコプロセッサーに見られるようなオフチップ TLS 実装を使用します。FreeRTOS には mbedTLS のポートが含まれています。TLS に mbedTLS を使用する場合、TLS 移植は必要ありません。さまざまな TLS の実装を可能にするために、サードパーティーの TLS ライブラリは TLS 抽象化レイヤーを介してアクセスされます

Note

どの TLS 実装がデバイスの FreeRTOS ポートで使用されていても、ポートは TLS の認定テストに合格する必要があります。認定は AWS IoT Device Testerの結果に基づいています。また、TLS 実装は、AWS IoT でサポートされている TLS 暗号スイートをサポートする必要があります。

TLS をテストするためのプラットフォームを準備するには、AWS クラウドでデバイスを設定する必要があります。また、デバイスで証明書とキーのプロビジョニングが必要です。

PrerequisitesFreeRTOS TLS ライブラリを移植するには、次のものが必要です。

• FreeRTOS セキュアソケットライブラリの移植。

セキュアソケットライブラリをプラットフォームに移植する方法については、「セキュアソケットライブラリの移植 (p. 41)」を参照してください。

• FreeRTOS PKCS #11 ライブラリのポート。

PKCS #11 ライブラリをプラットフォームに移植する方法については、「PKCS #11 ライブラリの移植 (p. 48)」を参照してください。

• AWS アカウント。

AWS アカウントの設定については、AWS ナレッジセンターの「アマゾン ウェブ サービスの新規アカウントを作成してアクティベートする方法を教えてください。」を参照してください。

• OpenSSL.

Shining Light から OpenSSL for Windows のバージョンをダウンロードできます。Linux ソースコードのダウンロードについては、「OpenSSL.org」を参照してください。Linux および macOS 用の OpenSSLをインストールするためにパッケージマネージャーを使用することもできます。

Portingターゲットハードウェアが TLS 機能を別のネットワークチップにオフロードする場合は、次の表に示すTLS 抽象化レイヤー機能を実装する必要があります。

関数 説明:

TLS_Init TLS コンテキストを初期化します。

TLS_Connect TLS を交渉してサーバーに接続します。

TLS_Recv TLS 接続からリクエストされたバイト数を読み取ります。

53

Page 58: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドデバイスを AWS IoT に接続する

関数 説明:

TLS_Send リクエストされたバイト数を TLS 接続に書き込みます。

TLS_Cleanup TLS コンテキストによって消費される無料リソース。

iot_tls.h には、これらの関数を実装するために必要な情報が含まれています。関数を実装するファイルを iot_tls.c として保存します。

デバイスを AWS IoT に接続するAWS クラウドと通信するには、デバイスを AWS IoT に登録する必要があります。ボードを AWS IoT に登録するには、以下が必要です。

AWS IoT ポリシー

AWS IoT ポリシーは、AWS IoT リソースへのアクセス権限をデバイスに付与します。これは AWS クラウドに保存されます。

AWS IoT のモノ

AWS IoT のモノにより、AWS IoT でデバイスを管理できるようになります。これは AWS クラウドに保存されます。

プライベートキーと X.509 証明書

プライベートキーと証明書により、AWS IoT でデバイスを認証できるようになります。

ポリシー、モノ、およびキーと証明書を作成するには、以下の手順に従ってください。

AWS IoT ポリシーを作成するには

1. 「AWS IoT コンソール」にアクセスします。2. ナビゲーションペインで、[Secure (保護)] を選択し、[Policies (ポリシー)] を選択してから [Create (作

成)] を選択します。3. ポリシーを識別するための名前を入力します。4. [Add statements (ステートメントを追加)] セクションで、[Advanced mode (アドバンストモード)] を

選択します。次の JSON をポリシーエディタウィンドウにコピーアンドペーストします。

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

Important

このポリシーは、すべての AWS IoT リソースにすべての AWS IoT アクションへのアクセスを許可します。このポリシーは開発やテストの目的には便利ですが、本稼働にはお勧めできません。

54

Page 59: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTLS テスト用の証明書とキーの設定

5. [作成] を選択します。

デバイス用の IoT モノ、プライベートキー、証明書を作成するには

1. 「AWS IoT コンソール」にアクセスします。2. ナビゲーションペインで、[Manage (管理)]、[Things (モノ)] の順に選択します。3. アカウントにモノが登録されていない場合は、[You don't have any things yet (まだモノがありません)]

ページが表示されます。このページが表示された場合は、[Register a thing (モノの登録)] を選択します。それ以外の場合は、[Create (作成)] を選択します。

4. [Creating AWS IoT things (モノを作成する)] ページで、[Create a single thing (単一のモノを作成する)]を選択します。

5. [Add your device to the thing registry (Thing Registry にデバイスを追加)] ページで、モノの名前を入力してから [Next (次へ)] を選択します。

6. [Add a certificate for your thing (モノに証明書を追加)] ページの [One-click certificate creation (1-Click証明書作成)] から、[Create certificate (証明書の作成)] を選択します。

7. それぞれの [Download (ダウンロード)] リンクを選択して、プライベートキーと証明書をダウンロードします。

8. 証明書を有効にするには、[Activate (有効化)] を選択します。証明書は、使用前にアクティブ化する必要があります。

9. [Attach a policy (ポリシーをアタッチ)] を選択して、デバイスに AWS IoT オペレーションへのアクセス権限を付与するポリシーを証明書にアタッチします。

10. 作成したポリシーを選択し、次に [Register thing (モノの登録)] を選択します。

AWS IoT コンソールから証明書とキーを取得したら、/tests/include/aws_clientcredential.hヘッダーファイルを設定し、デバイスが AWS IoT に接続できるようにします。

/tests/include/aws_clientcredential.h を設定するには

1. 「AWS IoT コンソール」にアクセスします。2. ナビゲーションペインで [設定] を選択します。

AWS IoT エンドポイントが [エンドポイント] に表示されます。こんな風に見えて 123456789012-ats.iot.us-east-1.amazonaws.com。 このエンドポイントをメモします。

3. ナビゲーションペインで、[Manage (管理)]、[Things (モノ)] の順に選択します。

デバイスには、AWS IoT のモノ名が必要です。この名前を書き留めておきます。4. FreeRTOS ソースコードをビルドするコンピュータで、IDE の /test/include/

aws_clientcredential.h ファイルを開き、以下の定数の値を指定します。

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

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

TLS テスト用の証明書とキーの設定TLS_ConnectRSA()このセクションでは、TLS ポートをテストするための証明書とキーの設定方法について説明します。

RSA デバイス認証では、デバイスの登録時に AWS IoT コンソールからダウンロードしたプライベートキーと証明書を使用できます。

55

Page 60: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTLS テスト用の証明書とキーの設定

Note

AWS IoT のモノとしてデバイスを登録した後で、デバイスの証明書を AWS IoT コンソールから取得することはできますが、プライベートキーは取得できません。

FreeRTOS は C 言語プロジェクトです。証明書とキーは、/tests/include/aws_clientcredential_keys.h ヘッダーファイルに追加する前にフォーマットする必要があります。

/tests/include/aws_clientcredential_keys.h の証明書とキーをフォーマットするには

1. ブラウザウィンドウで、/tools/certificate_configuration/CertificateConfigurator.html を開きます。

2. [Certificate PEM file (証明書 PEM ファイル)] で、AWS IoT コンソールからダウンロードした ID-certificate.pem.crt ファイルを選択します。

3. [Private Key PEM file (プライベートキー PEM ファイル)] で、AWS IoT コンソールからダウンロードした ID-private.pem.key ファイルを選択します。

4. 選択 aws_clientcredential_keys.hを生成して保存します。にファイルを保存し、 /tests/include。これにより、ディレクトリ内の既存のファイルが上書きされます。

Note

証明書とプライベートキーは、デモ専用にハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

TLS_ConnectEC()

楕円曲線デジタル署名アルゴリズム (ECDSA) 認証の場合は、プライベートキー、証明書署名リクエスト(CSR)、および証明書を生成する必要があります。OpenSSL を使用してプライベートキーと CSR を生成できます。また、CSR を使用して AWS IoT コンソールで証明書を生成できます。

プライベートキーおよび 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

CSR を使用して AWS IoT コンソールに証明書を作成するには

1. AWS IoT コンソールを開きます。2. ナビゲーションペインで、[Secure (保護)] を選択し、[Certificates (証明書)] を選択してから [Create

(作成)] を選択します。3. [Create with CSR (CSR で作成)] を選択し、OpenSSL で作成した csr.csr ファイルを見つけてアッ

プロードします。4. 証明書をアクティブにするには、[Activate (有効化)] を選択し、証明書を .cert.pem ファイルとして

ダウンロードするには[Download (ダウンロード)Download] を選択します。5. [Attach a policy (ポリシーをアタッチする)] を選択し、デバイスを AWS IoT に接続する (p. 54) の

指示で作成して RSA 証明書にアタッチした AWS IoT ポリシーを見つけて選択し、[Done (終了)] を選択します。

56

Page 61: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTLS テスト用の証明書とキーの設定

6. デバイスを登録したときに作成した AWS IoT のモノに証明書をアタッチします。7. [Certificates (証明書)] ページから、作成したばかりの証明書を見つけて選択します。ページの右上か

ら [Actions (アクション)]を選択し、[Attach thing (モノをアタッチする)] を選択します。8. デバイス用に作成したモノを見つけて選択し、[Attach (アタッチ)] を選択します。

デバイスの証明書とプライベートキーは、/libraries/freertos_plus/standard/tls/test/iot_test_tls.h ヘッダーファイルに追加する前にフォーマットする必要があります。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h の証明書とキーをフォーマットするには

1. ブラウザウィンドウで、/tools/certificate_configuration/PEMfileToCString.html を開きます。

2. [PEM Certificate or Key (PEM 証明書またはキー)] で、AWS IoT コンソールからダウンロードしたID-certificate.pem.crt を選択します。

3. [Display formatted PEM string to be copied into aws_clientcredential_keys.h(aws_clientcredential_keys.h にコピーするフォーマット済み PEM 文字列を表示する)] を選択してから、証明書文字列をコピーします。

4. /libraries/freertos_plus/standard/tls/test/iot_test_tls.h を開き、フォーマット済みの証明書文字列を tlstestCLIENT_CERTIFICATE_PEM_EC の定義内に貼り付けます。

Note

証明書とプライベートキーは、デモ専用にハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

5. 同じステップに従って、OpenSSL を使用して作成したプライベートキーファイルのフォーマット済み文字列を取得します (p256_privatekey.pem)。フォーマット済みのプライベートキー文字列をコピーして /libraries/freertos_plus/standard/tls/test/iot_test_tls.h にあるtlstestCLIENT_PRIVATE_KEY_PEM_EC の定義内に貼り付けます。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h で、デバイスを AWS IoT に接続する (p. 54) において使用したのと同じ AWS IoT MQTT ブローカーエンドポイントアドレスを使用して tlstestMQTT_BROKER_ENDPOINT_EC を定義します。

TLS_ConnectMalformedCert()

このテストでは、不正な証明書を使用してサーバーと認証できることを確認します。証明書のランダムな変更は、接続リクエストが送信される前に X.509 証明書の検証によって拒否される可能性があります。不正な形式の証明書を設定するには、その証明書の発行者を変更することをお勧めします。

証明書の発行者を変更するには

1. 有効なクライアント証明書として使用している ID-certificate.pem.crt を取得します。

Windows の証明書マネージャーでは、証明書のプロパティは次のように表示されます。

57

Page 62: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

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 の証明書マネージャーでは、証明書のプロパティは次のように表示されます。

58

Page 63: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTLS テスト用の証明書とキーの設定

5. 証明書を PEM に戻すには、次のコマンドを使用します。

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

デバイスの不正な形式の証明書は、/libraries/freertos_plus/standard/tls/test/iot_test_tls.h ヘッダーファイルに追加する前にフォーマットする必要があります。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 用に証明書をフォーマットするには

1. ブラウザウィンドウで、/tools/certificate_configuration/PEMfileToCString.html を開きます。

2. [PEM Certificate or Key (PEM 証明書またはキー)] で、作成して修正した ID-certificate.pem.crt を選択します。

3. [Display formatted PEM string to be copied into aws_clientcredential_keys.h(aws_clientcredential_keys.h にコピーするフォーマット済み PEM 文字列を表示する)] を選択してから、証明書文字列をコピーします。

4. /libraries/freertos_plus/standard/tls/test/iot_test_tls.h を開き、フォーマット済みの証明書文字列を tlstestCLIENT_CERTIFICATE_PEM_MALFORMED の定義内に貼り付けます。

59

Page 64: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTLS テスト用の証明書とキーの設定

Note

証明書はデモ目的でのみハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

TLS_ConnectBYOCCredentials()

認証に独自の証明書を使用できます。証明書を作成して有効な rootCA/CA チェーンに登録するには、BYOC (ECDSA) の作成 (p. 61) の手順に従ってください。証明書を作成したら、いくつかのポリシーをデバイス証明書にアタッチしてから、デバイスのモノを証明書に添付する必要があります。

ポリシーをデバイス証明書にアタッチするには

1. AWS IoT コンソールを開きます。2. ナビゲーションペインで、[Secure (セキュア)]、[Certificates (証明書)] の順に選択して、BYOC

(ECDSA) の作成 (p. 61) で作成して登録したデバイス証明書を選択します。3. [Actions (アクション)] を選択し、[Attach policy (ポリシーをアタッチする)] を選択します。4. デバイスを AWS IoT に接続する (p. 54) の指示で作成して RSA 証明書に添付した AWS IoT ポリ

シーを見つけて選択し、[Attach (アタッチ)]を選択します。

デバイス証明書にモノをアタッチするには

1. [Certificates (証明書)] ページから、同じデバイス証明書を見つけて選択し、[Actions (アクション)] を選択してから [Attach thing (モノをアタッチする)] を選択します。

2. 自分のデバイス用に作成したものを見つけて選択し、[Attach (アタッチする)] を選択します。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 用に証明書をフォーマットするには

1. ブラウザウィンドウで、/tools/certificate_configuration/PEMfileToCString.html を開きます。

2. [PEM Certificate or Key (PEM 証明書またはキー)] で、作成して修正した ID-certificate.pem.crt を選択します。

3. [Display formatted PEM string to be copied into aws_clientcredential_keys.h(aws_clientcredential_keys.h にコピーするフォーマット済み PEM 文字列を表示する)] を選択してから、証明書文字列をコピーします。

4. /libraries/freertos_plus/standard/tls/test/iot_test_tls.h を開き、フォーマット済みの証明書文字列を tlstestCLIENT_BYOC_CERTIFICATE_PEM の定義内に貼り付けます。

Note

証明書はデモ目的でのみハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

5. 同じステップに従って、作成したプライベートキーファイルのフォーマットされた文字列を取得します。フォーマット済みのプライベートキー文字列をコピーして /libraries/freertos_plus/standard/tls/test/iot_test_tls.h にある tlstestCLIENT_BYOC_PRIVATE_KEY_PEM の定義内に貼り付けます。

60

Page 65: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

TLS_ConnectUntrustedCert()

証明書を AWS IoT に登録しなくても、独自の証明書を認証に使用できます。有効な rootCA/CA チェーンを使用して証明書を作成するには、BYOC (ECDSA) の作成 (p. 61) の指示に従いますが、デバイスをAWS IoT に登録するための最後の指示をスキップします。

/libraries/freertos_plus/standard/tls/test/iot_test_tls.h 用に証明書をフォーマットするには

1. ブラウザウィンドウで、/tools/certificate_configuration/PEMfileToCString.html を開きます。

2. [PEM Certificate or Key (PEM 証明書またはキー)] で、作成して修正した ID-certificate.pem.crt を選択します。

3. [Display formatted PEM string to be copied into aws_clientcredential_keys.h(aws_clientcredential_keys.h にコピーするフォーマット済み PEM 文字列を表示する)] を選択してから、証明書文字列をコピーします。

4. /libraries/freertos_plus/standard/tls/test/iot_test_tls.h を開き、フォーマット済みの証明書文字列を tlstestCLIENT_UNTRUSTED_CERTIFICATE_PEM の定義内に貼り付けます。

Note

証明書はデモ目的でのみハードコードされています。本番稼動レベルのアプリケーションでは、これらのファイルを安全な場所に保存する必要があります。

5. 同じステップに従って、作成したプライベートキーファイルのフォーマットされた文字列を取得します。フォーマット済みのプライベートキー文字列をコピーして /libraries/freertos_plus/standard/tls/test/iot_test_tls.h にあるtlstestCLIENT_UNTRUSTED_PRIVATE_KEY_PEM の定義内に貼り付けます。

BYOC (ECDSA) の作成これらの手順では、AWS IoT コンソール、AWS Command Line Interface、および OpenSSL を使用して、AWS クラウド上のデバイスの証明書とキーを作成および登録します。AWS CLI コマンドを実行する前に、マシンに AWS CLI をインストールして設定したことを確認してください。

Note

CA 証明書を作成するときは、プロンプトが表示されたら、識別名 (DN) フィールドに有効で一貫した値を使用します。[Common Name (共通名)] フィールドには、特に指示がない限り、任意の値を使用できます。

ルート 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. 必要なファイルを作成します。

61

Page 66: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

touch index.txt

echo 1000 > serial

2. ca.config (p. 63) ファイルを現在の作業ディレクトリに保存します。3. 次のコマンドを使用して、中間 CA プライベートキーを生成します。

openssl ecparam -name prime256v1 -genkey -noout -out intermediateCA.key

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 のプロンプトが表示されたら、最初のステップで取得した登録コードを入力します。

62

Page 67: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

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 CLI コマンドを使用して、両方のCA証明書を AWS IoT に登録します。

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 CLI コマンドを使用して、デバイス証明書を AWS IoT に登録します。

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.cnf OpenSSL サンプル設定ファイルの更新バージョンです。

## 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

63

Page 68: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

# 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 ]

# 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 MD

64

Page 69: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

preserve = 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 = optionalcommonName = 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 :-)

65

Page 70: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

#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

[ 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

66

Page 71: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

#nsBaseUrl#nsRevocationUrl#nsRenewalUrl#nsCaPolicyUrl#nsSslServerName

# This is required for TSA certificates.# extendedKeyUsage = critical,timeStamping

[ v3_req ]

# Extensions to add to a certificate request

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 ]

67

Page 72: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBYOC (ECDSA) の作成

# 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

# 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

68

Page 73: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

# (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)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. aws_tests IDE プロジェクトに iot_tls.c を追加します。2. ソース ファイルの追加 iot_test_tls.c 仮想フォルダに aws_tests/application_code/

common_tests/tls。 このファイルには、TLS テストが含まれています。

CMakeLists.txt ファイルの設定CMake を使用してテストプロジェクトをビルドする場合は、CMake リストファイルでライブラリのポータブルレイヤーのターゲットを定義する必要があります。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

ローカルテスト環境のセットアップTLS ポートには、FreeRTOS TLS ライブラリでサポートされている認証タイプごとに 1 つずつ、合計 5 つのテストがあります。

• TLS_ConnectRSA()

• TLS_ConnectEC()

69

Page 74: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

• TLS_ConnectMalformedCert()

• TLS_ConnectBYOCCredentials()

• TLS_ConnectUntrustedCert()

これらのテストを実行するには、ボードは MQTT プロトコルを使用して AWS クラウドと通信する必要があります。AWS IoT はエッジで接続されたデバイスとの間でメッセージを送受信する MQTT ブローカーをホストします。AWS IoT MQTT ブローカーは、相互認証された TLS 接続のみを受け入れます。

デバイスを AWS IoT に接続する (p. 54) の手順に従ってデバイスを AWS IoT に接続します。

TLS テストごとに、/tests/include/aws_clientcredential_keys.h または /libraries/freertos_plus/standard/tls/test/iot_test_tls.h のいずれかでフォーマットおよび定義された、異なる証明書/キーの組み合わせが必要です。

テストに必要な証明書とキーを入手するには、TLS テスト用の証明書とキーの設定 (p. 55) の手順に従ってください。

IDE プロジェクトにライブラリをセットアップした後、テスト用に他のいくつかのファイルを設定する必要があります。

TLS テスト用のソースファイルとヘッダーファイルを設定するには

1. TLS テストを有効にするには、/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h を開き、testrunnerFULL_TLS_ENABLED マクロを 1 に設定します。

2. /libraries/freertos_plus/standard/utils/src/iot_system_init.c を開き、関数SYSTEM_Init() で、SOCKETS_Init() を呼び出す行がコメント解除されていることを確認します。

テストの実行TLS テストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。

すべてのテストに合格したら、テストは完了です。

70

Page 75: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドValidation

Important

TLS ライブラリを移植してポートをテストした後は、TLS 機能に依存するセキュアソケットテストを実行する必要があります。詳細については、セキュアソケット移植ドキュメントの「Testing (p. 41)」を参照してください。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

FreeRTOS TLS ライブラリのデバイスへの移植が完了したら、テスト用の MQTT ライブラリの設定を開始できます。手順については、「テスト用の MQTT ライブラリの設定 (p. 71)」を参照してください。

テスト用の MQTT ライブラリの設定エッジのデバイスは、MQTT プロトコルを使用して AWS クラウドと通信できます。AWS IoT は、接続されたエッジデバイスとの間でメッセージを送受信する MQTT ブローカーをホストします。

MQTT ライブラリは、FreeRTOS が稼働するデバイス用の MQTT プロトコルを実装します。MQTT ライブラリを移植する必要はありませんが、認定のためにはデバイスのテストプロジェクトはすべての MQTTテストに合格する必要があります。詳細については、FreeRTOS ユーザーガイドの FreeRTOS MQTT ライブラリを参照してください。

PrerequisitesFreeRTOS MQTT ライブラリのテストをセットアップするには、以下のものが必要です。

• TLS ライブラリの移植。

TLS ライブラリをプラットフォームに移植する方法については、「TLS ライブラリの移植 (p. 53)」を参照してください。

IDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップIDE プロジェクトで MQTT ライブラリをセットアップするには

• /libraries/c_sdk/standard/mqtt とそのサブディレクトリ内のすべてのテストソースファイルを aws_tests IDE プロジェクトに追加します。

CMakeLists.txt ファイルの設定ご使用の場合 CMake テスト・プロジェクトを構築するには、ライブラリのポータブル・レイヤー・ターゲットを CMake リストファイル。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

71

Page 76: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドローカルテスト環境のセットアップ

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

ローカルテスト環境のセットアップIDE プロジェクトにライブラリをセットアップした後、テスト用に他のいくつかのファイルを設定する必要があります。

MQTT テスト用のソースファイルとヘッダーファイルを設定するには

• MQTT テストを有効にするには、/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h を開き、testrunnerFULL_MQTTv4_ENABLED マクロを 1 に設定します。

テストの実行MQTT テストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。すべてのテストに合格したら、テストは完了です。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

デバイス用の FreeRTOS MQTT ライブラリのセットアップが完了したら、OTA エージェントライブラリの移植を開始できます。手順については、「OTA ライブラリの移植 (p. 73)」を参照してください。

デバイスで OTA 機能がサポートされていない場合は、Bluetooth Low Energy ライブラリの移植を開始できます。手順については、「Bluetooth Low Energy Library の移植 (p. 81)」を参照してください。

デバイスで OTA と Bluetooth Low Energy 機能がサポートされていない場合、移植は終了であり、FreeRTOS 認定プロセスを開始できます。詳細については、「FreeRTOS 資格ガイド」を参照してください。

テスト用の HTTPS クライアントライブラリの設定HTTPS クライアントライブラリは、FreeRTOS を実行しているデバイスに対して TLS 経由で HTTPS/1.1プロトコルを実装します。

前提条件FreeRTOS HTTPS クライアントライブラリテストをセットアップするには、以下が必要です。

• TLS ライブラリの移植。

TLS ライブラリをプラットフォームに移植する方法については、「TLS ライブラリの移植 (p. 53)」を参照してください。

72

Page 77: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドIDE テストプロジェクトのセットアップ

IDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップIDE プロジェクトで HTTPS クライアントライブラリをセットアップするには

• /libraries/c_sdk/standard/https とそのサブディレクトリ内のすべてのテストソースファイルを aws_tests IDE プロジェクトに追加します。

CMakeLists.txt ファイルの設定CMake を使用してテストプロジェクトをビルドする場合は、CMake リストファイルでライブラリのポータブルレイヤーターゲットを定義する必要があります。

CMakeLists.txt でライブラリのポータブルレイヤーターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

ローカルテスト環境のセットアップIDE プロジェクトにライブラリをセットアップした後、テスト用に他のいくつかのファイルを設定する必要があります。

HTTPS クライアントテスト用のソースファイルとヘッダーファイルを設定するには

• HTTPS クライアントテストを有効にするには、/vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h を開き、testrunnerFULL_HTTPS_CLIENT_ENABLED マクロを 1 に設定します。

テストの実行HTTPS クライアントテストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。すべてのテストに合格したら、テストは完了です。

OTA ライブラリの移植FreeRTOS 無線 (OTA) による更新を使用すると、次の操作を実行できます。

• 新しいファームウェアイメージを単一のデバイス、デバイスのグループ、またはフリート全体に展開します。

• デバイスがグループに追加されたとき、リセットされたとき、または再プロビジョニングされたときに、デバイスにファームウェアをデプロイします。

• 新しいファームウェアがデバイスにデプロイされると、そのファームウェアの信頼性と完全性を検証します。

• デプロイの進行状況をモニタリングします。

73

Page 78: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドPrerequisites

• 失敗したデプロイをデバッグします。• AWS IoT のコード署名を使用してファームウェアにデジタル署名します。

詳細については、以下を参照してください。 FreeRTOS 無線アップデート の FreeRTOS ユーザーガイド.

OTA エージェントライブラリを使用して、OTA の機能を FreeRTOS アプリケーションに統合できます。詳細については、以下を参照してください。 FreeRTOS OTAエージェントライブラリ の FreeRTOS ユーザーガイド.

FreeRTOS デバイスは、受信した OTA ファームウェアイメージに対して暗号化コード署名検証を実施する必要があります。以下のアルゴリズムを推奨します。

• 楕円曲線デジタル署名アルゴリズム (ECDSA)• NIST P256 曲線• SHA-256 ハッシュ

Note

FreeRTOS OTA 更新ライブラリの移植は、現在、認定には必要ありません。

PrerequisitesOTA エージェントライブラリを移植するには、以下が必要です。

• TLS ライブラリの移植。

詳細については、「TLS ライブラリの移植 (p. 53)」を参照してください。• OTA 更新をサポートできるブートローダー。

ブートローダーデモアプリケーションの移植に関する詳細については、「ブートローダーデモの移植 (p. 75)」を参照してください。

Porting/vendors/vendor/boards/board/ports/ota/aws_ota_pal.c には、一連のプラットフォーム抽象化レイヤー (PAL) 関数の空の定義が含まれています。少なくともこの表にリストされている関数のセットを実装してください。

機能 説明:

prvPAL_Abort OTA 更新を中止します。

prvPAL_CreateFileForRx 受信したデータチャンクを保存するファイルを作成します。

prvPAL_CloseFile 指定されたファイルを閉じます。暗号保護を実装するストレージが使用されている場合、これによってファイルが認証される可能性があります。

prvPAL_WriteBlock 指定されたファイルに、指定されたオフセットでデータブロックを書き込みます。成功した場合、書き込まれたバイト数を返します。それ以外の場合は、負のエラーコードを返します。

74

Page 79: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドIoT デバイスブートローダー

機能 説明:

prvPAL_ActivateNewImage 新しいファームウェアイメージをアクティブ化または起動します。一部のポートでは、デバイスがプログラム的に同期的にリセットされると、この関数は戻らないことがあります。

prvPAL_SetPlatformImageState 最新の OTA ファームウェアイメージ (またはバンドル) を受け入れるか拒否するためにプラットフォームで必要なものを行います。この関数の実装方法を決定するには、ボード (プラットフォーム) の詳細とアーキテクチャについてのドキュメントを参照してください。

prvPAL_GetPlatformImageState OTA 更新イメージの状態を取得します。

デバイスがそれらをサポートしている場合は、この表の関数を実装してください。

機能 説明:

prvPAL_CheckFileSignature 指定したファイルの署名を確認します。

prvPAL_ReadAndAssumeCertificate 指定された署名者証明書をファイルシステムから読み込み、発信者に返します。

OTA 更新をサポートできるブートローダーがあることを確認してください。FreeRTOS に用意されているブートローダーデモアプリケーションを移植する、または IoT デバイスブートローダーを作成する手順については、「IoT デバイスブートローダー (p. 75)」を参照してください。

IoT デバイスブートローダーブートローダーデモの移植FreeRTOS には Microchip Curiosity PIC32MZEF プラットフォーム用のデモブートローダーアプリケーションが含まれています。詳細については、以下を参照してください。 Microchip Curiosity PIC32MZEF用デモブートローダ の FreeRTOS ユーザーガイド. このデモを他のプラットフォームに移植できます。

プラットフォームにデモを移植しない場合は、独自のブートローダーアプリケーションを使用できます。IoT デバイスブートローダーの脅威モデリング (p. 75) では、独自の安全なブートローダーアプリケーションを作成するのに役立つ脅威モデリングについて説明します。

IoT デバイスブートローダーの脅威モデリングBackground

実際の定義として、この脅威モデルによって参照される組み込み IoT デバイスは、クラウドサービスとやり取りするマイクロコントローラーベースの製品です。コンシューマー、商用、または産業用にデプロイできます。IoT デバイスは、ユーザー、患者、マシン、環境に関するデータを収集し、電球やドアロックから工場の機械に至るまで、あらゆるものを制御できます。

脅威モデリングは、仮定の敵対者の観点からのセキュリティへのアプローチです。敵対者の目標と方法を検討することで、脅威のリストが作成されます。脅威とは、敵によって実行されるリソースまたはアセットに対する攻撃です。リストは優先順位付けされ、軽減策を識別または作成するために使用されます。緩和策を選択する場合、実装と保守のコストは、それらが提供する実際のセキュリティ価値とのバランスを

75

Page 80: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドIoT デバイスブートローダー

取る必要があります。複数の 脅威モデルの方法論があります。それぞれが、安全で成功した IoT 製品の開発をサポートできます。

FreeRTOS では、IoT デバイスに OTA (「無線」) ソフトウェア更新を提供しています。更新機能は、クラウドサービスとオンデバイスソフトウェアライブラリとパートナー提供のブートローダーを組み合わせます。この脅威モデルは、特にブートローダーに対する脅威に焦点を当てています。

ブートローダーのユースケース

• 展開する前に、ファームウェアにデジタル署名し、暗号化します。• 新しいファームウェアイメージを単一のデバイス、デバイスのグループ、またはフリート全体にデプロ

イします。• 新しいファームウェアがデバイスに導入された後、そのファームウェアの信頼性と完全性を検証しま

す。• デバイスは、信頼できるソースから変更されていないソフトウェアのみを実行します。• デバイスは、OTA を介して受け取ったソフトウェアに障害耐性があります。

データフロー図

Threats攻撃によっては、複数の緩和策があります。たとえば、悪意のあるファームウェアイメージを配信することを意図したネットワーク中間者は、TLS サーバーによって提供される証明書と新しいファームウェアイメージのコード署名者証明書の両方の信頼を検証することで軽減されます。ブートローダーのセキュリティを最大化するために、ブートローダー以外の緩和策は信頼できないと見なされます。ブートローダーには、攻撃ごとに組み込み緩和策が必要です。多層化された緩和策は、多重防御と呼ばれます。

脅威:

• 攻撃者は、悪意のあるファームウェアイメージを配信するために、デバイスからサーバーへの接続をハイジャックします。

緩和の例• ブートローダーは、起動時に、既知の証明書を使用してイメージの暗号化署名を検証します。検証に

失敗した場合、ブートローダーは前のイメージにロールバックします。• 攻撃者は、バッファオーバーフローを悪用して、フラッシュに保存されている既存のファームウェアイ

メージに悪意のある動作を導入します。

76

Page 81: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドIoT デバイスブートローダー

緩和の例

• ブート時に、前に説明したように、ブートローダーが検証します。以前のイメージが使用できない状態で検証に失敗すると、ブートローダーは停止します。

• ブート時に、前に説明したように、ブートローダーが検証します。以前のイメージが使用できない状態で検証に失敗すると、ブートローダーはフェイルセーフ OTA 専用モードに入ります。

• 攻撃者は、以前に保存されたイメージからデバイスを起動します。このイメージは悪用可能です。

緩和の例

• 最後のイメージを保存する Flash セクターは、新しいイメージのインストールとテストに成功すると消去されます。

• ヒューズはアップグレードが成功するたびに焼き付けられ、正しい数のヒューズが焼き付けられていない限り、各イメージの実行は拒否されます。

• OTA 更新は、デバイスをブロックする障害のあるイメージや悪意のあるイメージを配信します。

緩和の例

• ブートローダーは、前のイメージへのロールバックをトリガーするハードウェアウォッチドッグタイマーを開始します。

• 攻撃者はブートローダーにパッチを適用してイメージの検証をバイパスし、デバイスが署名されていないイメージを受け入れるようにします。

緩和の例

• ブートローダーは ROM (読み取り専用メモリ) にあり、変更することはできません。• ブートローダーは OTP (ワンタイムプログラム可能なメモリ) にあり、変更することはできません。• ブートローダーは ARM TrustZone のセキュアゾーンにあり、変更することはできません。

• デバイスが悪意のあるイメージを受け入れるように、攻撃者は検証証明書を置き換えます。

緩和の例

• 証明書は暗号コプロセッサにあり、変更することはできません。• 証明書は ROM (または OTP、またはセキュアゾーン) にあり、変更することはできません。

脅威のさらなるモデル化

この脅威モデルでは、ブートローダーのみを考慮します。さらに脅威モデリングを行うことで、全体的なセキュリティを向上させることができます。推奨される方法は、敵対者の目標、それらの目標の対象となるアセット、およびアセットへの参入ポイントをリストすることです。脅威のリストは、エントリポイントに対する攻撃を考慮してアセットをコントロールすることで作成できます。以下は、IoT デバイスの目標、アセット、エントリポイントの例です。これらのリストはすべてを網羅したものではなく、さらなる検討を促進することを目的としています。

敵対者の目標

• 資金の強要• 評判を落とす• データの改ざん• リソースの転送• ターゲットをリモートでスパイ• サイトへの物理的なアクセスを獲得する• 大惨事

77

Page 82: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

• 恐怖を与える

主要なアセット

• プライベートキー• クライアント証明書• CA ルート証明書• セキュリティ認証情報とトークン• お客様の個人識別情報• 企業シークレットの実装• センサーデータ• クラウド分析データストア• クラウドインフラストラクチャ

エントリポイント

• DHCP レスポンス• DNS レスポンス• MQTT over TLS• HTTPS レスポンス• OTA ソフトウェアイメージ• その他 (アプリケーションによって指示される USB など)• バスへの物理的なアクセス• デキャップされた IC

TestingIDE を使用してテストプロジェクトをビルドする場合は、IDE プロジェクトでライブラリポートを設定する必要があります。

IDE テストプロジェクトのセットアップ移植とテストに IDE を使用している場合は、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

Important

次の手順では、必ずソースファイルをディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

IDE プロジェクトに OTA ライブラリをセットアップするには

1. ソースファイル /vendors/vendor/boards/board/ports/ota/aws_ota_pal.c を aws_testsIDE プロジェクトに追加します。

2. aws_tests IDE プロジェクトに次のテストソースファイルを追加します。

• /libraries/freertos_plus/aws/ota/test/aws_test_ota_cbor.c

• /libraries/freertos_plus/aws/ota/test/aws_test_ota_agent.c

• /libraries/freertos_plus/aws/ota/test/aws_test_ota_pal.c

78

Page 83: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

• /demos/ota/aws_iot_ota_update_demo.c

CMakeLists.txt ファイルの設定CMake を使用してテストプロジェクトをビルドする場合は、CMake リストファイルでライブラリのポータブルレイヤーのターゲットを定義する必要があります。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/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. 79) と OTA エンドツーエンドテスト (p. 80) の 2 セットのテストがあります。

OTA エージェントと OTA PAL テストローカルテスト環境のセットアップ

ソースファイルとヘッダーファイルを OTA エージェントと OTA PAL テスト用に設定するには

1. /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 テストで使用されます。

テストコードでは、3 種類の署名証明書を使用できます。

• RSA/SHA1• RSA/SHA256• ECDSA/SHA256

RSA/SHA1 と RSA/SHA256 は既存のプラットフォームでのみ利用可能です。OTA の更新には OTAの更新にはECDSA/SHA256 をお勧めします。別のスキームを使用している場合は、FreeRTOS エンジニアリングチームにお問い合わせください。

テストの実行

OTA エージェントと OTA PAL テストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。

79

Page 84: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドValidation

2. UART コンソールでテスト結果を確認します。

...

OTA エンドツーエンドテストエンドツーエンドの OTA テストを設定して実行するには

1. README ファイル (/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 ファイル (/tools/ota_e2e_test/README.md) の例に従ってください。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

FreeRTOS OTA ライブラリとブートローダーデモを移植したら、Bluetooth Low Energy ライブラリの移植を開始できます。手順については、「Bluetooth Low Energy Library の移植 (p. 81)」を参照してください。

80

Page 85: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドBluetooth Low Energy

デバイスで Bluetooth Low Energy 機能がサポートされていない場合、移植は終了であり、FreeRTOS 認定プロセスを開始できます。詳細については、FreeRTOS 資格ガイドを参照してください。

Bluetooth Low Energy Library の移植FreeRTOS Bluetooth Low Energy ライブラリを使用して Wi-Fi をプロビジョニングし、Bluetooth LowEnergy を経由して MQTT メッセージを送信できます。また、Bluetooth Low Energy ライブラリには、APIs Bluetooth Low Energy スタックとの直接通信に使用できます。詳細については、「FreeRTOS ユーザーガイド」の「FreeRTOS Bluetooth Low Energy Library」を参照してください。

Note

現在、FreeRTOS Bluetooth Low Energy ライブラリの移植は、認定には必要ありません。

PrerequisitesBluetooth Low Energy ライブラリを移植するには、以下が必要です。

• ベンダー提供の Bluetooth Low Energy ドライバーが含まれている IDE プロジェクトまたはCMakeLists.txt リストファイル。

テストプロジェクトの設定については、「移植用の FreeRTOS ソースコードのセットアップ (p. 8)」を参照してください。

• FreeRTOS カーネルの検証済み設定。

構成の詳細については、 FreeRTOS ご使用のプラットフォーム用のカーネルについては、 FreeRTOSカーネルの移植の設定 (p. 29).

• Raspberry Pi 3 Model B+ (メモリカードを含む)。

Portingの3つのファイル /libraries/abstractions/ble_hal/include フォルダ定義 FreeRTOS Bluetooth低エネルギー APIs:

• bt_hal_manager.h

• bt_hal_manager_adapter_ble.h

• bt_hal_gatt_server.h

各ファイルには、 APIs. 以下を実装する必要があります。 APIs:

bt_hal_manager.h

• pxBtManagerInit

• pxEnable

• pxDisable

• pxGetDeviceProperty

• pxSetDeviceProperty (すべてのオプションは、eBTpropertyRemoteRssi とeBTpropertyRemoteVersionInfo を必須とします)

• pxPair

• pxRemoveBond

81

Page 86: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドPorting

• pxGetConnectionState

• pxPinReply

• pxSspReply

• pxGetTxpower

• pxGetLeAdapter

• pxDeviceStateChangedCb

• pxAdapterPropertiesCb

• pxSspRequestCb

• pxPairingStateChangedCb

• pxTxPowerCb

bt_hal_manager_adapter_ble.h

• pxRegisterBleApp

• pxUnregisterBleApp

• pxBleAdapterInit

• pxStartAdv

• 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

82

Page 87: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

• pxRequestExecWriteCb

• pxRequestWriteCb

• pxRequestReadCb

• pxServiceDeletedCb

• pxServiceStoppedCb

• pxServiceStartedCb

• pxDescriptorAddedCb

• pxSetValCallbackCb

• pxCharacteristicAddedCb

• pxIncludedServiceAddedCb

• pxServiceAddedCb

• pxConnectionCb

• pxUnregisterServerCb

• pxRegisterServerCb

Testingこの図は、Bluetooth Low Energy テストフレームワークを示しています。

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 プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

83

Page 88: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

IDE プロジェクトに Bluetooth Low Energy ライブラリをセットアップするには

1. /vendors/vendor/boards/board/ports/ble にあるすべてのファイルを aws_tests IDE プロジェクトに追加します。

2. /libraries/abstractions/ble_hal/include にあるすべてのファイルを aws_tests IDE プロジェクトに追加します。

3. /libraries/c_sdk/standard/ble にあるすべてのファイルを aws_tests IDE プロジェクトに追加します。

4. /vendors/vendor/boards/board/aws_tests/application_code/main.c を開き、必要なBluetooth Low Energy ドライバーを有効にします。

CMakeLists.txt ファイルの設定ご使用の場合 CMake テスト・プロジェクトを構築するには、ライブラリのポータブル・レイヤー・ターゲットを CMake リストファイル。

CMakeLists.txt でライブラリのポータブルレイヤーのターゲットを定義するには、「FreeRTOS ポータブルレイヤー (p. 15)」の手順に従います。

/vendors/vendor/boards/board/CMakeLists.txt の CMakeLists.txt テンプレートリストファイルには、ポータブルレイヤーターゲットの定義例が含まれています。移植するライブラリの定義をコメント解除し、プラットフォームに合わせて変更できます。

ローカルテスト環境のセットアップテスト対象の Raspberry Pi をセットアップするには

1. 「Raspberry Pi のセットアップ」の指示に従って、Raspbian OS を使用して Raspberry Pi をセットアップします。

2. kernel.org repository から bluez 5.50 をダウンロードします。3. kernel.org リポジトリの「README」の指示に従って、Raspberry Pi に bluez 5.50 をインストールし

ます。4. Raspberry Pi で SSH を有効にします。手順については、 Raspberry Pi ドキュメントを参照してくだ

さい。5. コンピュータで、/tests/bleTestsScripts/runPI.sh スクリプトを開いて、最初の 2 行の 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ボンディングを消去します。

84

Page 89: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドValidation

3. テストプロジェクトを構築し、デバイスにフラッシュして実行します。4. UART コンソールでテスト結果を確認します。

ValidationFreeRTOS のデバイスを正式に認定するには、AWS IoT Device Tester でデバイスの移植されたソースコードを検証する必要があります。FreeRTOS ユーザーガイドの「AWS IoT Device Tester for FreeRTOSを使用する」の手順に従って、ポート検証用に Device Tester を設定します。特定のライブラリのポートをテストするには、Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。

Bluetooth Low Energy ライブラリを移植すると、FreeRTOS 認定プロセスを開始できます。詳細については、FreeRTOS 資格ガイドを参照してください。

共通 I/O ライブラリの移植一般に、デバイスドライバーは基盤となるオペレーティングシステムに依存せず、特定のハードウェア構成に固有です。ハードウェア抽象化レイヤー (HAL) は、ドライバーと上位レベルのアプリケーションコード間の共通のインターフェイスを提供するラッパーです。HAL は、特定のドライバーの動作の詳細を抽象化し、同様のデバイスを制御するための統一された API を提供します。このようにして、同じ API を使用して、複数のマイクロコントローラー (MCU) ベースのリファレンスボード間でさまざまなデバイスを制御できます。

FreeRTOS 共通 I/O は、ハードウェア抽象化レイヤーとして機能します。一連の標準 API が用意されているため、サポートされているリファレンスボード間で共通のシリアルデバイスにアクセスできます。これらの API は、一般的な周辺機器と通信、相互作用し、アプリケーションがプラットフォーム間でコードを機能させることを可能にします。共通 I/O がない場合、低レベルのデバイスで動作するために必要なコードは、シリコンベンダー固有です。

サポートされている周辺機器

• UART• SPI• I2C

サポートされている機能

• 同期読み取り/書き込み – リクエストされた量のデータが転送されるまで、関数は返されません。• 非同期読み取り/書き込み – 関数はすぐに戻り、データ転送は非同期的に行われます。関数の実行が完了

すると、登録ユーザーのコールバックが呼び出されます。

周辺機器固有

• I2C – 複数のオペレーションを 1 つのトランザクションに結合します。通常、1 つのトランザクションで書き込みと読み取りのオペレーションを行います。

• SPI – プライマリとセカンダリの間でデータを転送します。つまり、書き込みと読み取りのオペレーションが同時に行われます。

移植

「FreeRTOS 移植ガイド」を参照してください。

85

Page 90: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドPrerequisites

トピック• Prerequisites (p. 86)• Testing (p. 86)• I2C ライブラリの移植 (p. 88)• UART ライブラリの移植 (p. 90)• SPI ライブラリの移植 (p. 92)

Prerequisites共通 I/O ライブラリを移植するには、以下が必要です。

• ベンダーが提供する I/O ドライバーを含む IDE プロジェクト または CMakeLists.txt リストファイル。

• FreeRTOS カーネルの検証済み設定。

Testingまず、IDE プロジェクトをセットアップするか、CMake を設定します。

ローカルテスト環境のセットアップ

テストファイル /libraries/abstractions/common_io/test/test_iot_peripheral.c を変更する必要はありません。

デバイス固有のコードは次のファイルにあります。

• /vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h

• /vendors/vendor/boards/board/ports/common_io/test_iot_internal.c

ローカルテスト環境をセットアップするには

1. という名前のテスト設定ヘッダーファイルを作成します /vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h。 コンテンツについては、「Test Setup」セクションを各周辺装置ごとに表示します。

2. という名前のテスト設定ファイルを作成します /vendors/vendor/boards/board/ports/common_io/test_iot_internal.c。 内容は、各周辺機器の「テスト設定」の項を参照してください。

3. 共通I/Oテストを有効にするには、ファイルを開きます。 /vendors/vendor/boards/board/aws_tests/config_files/aws_test_runner_config.h.

4. testrunnerFULL_COMMON_IO_ENABLED を 1 に設定します。

IDE テストプロジェクトのセットアップ

移植やテストに IDE を使用している場合、移植されたコードをテストする前に IDE テストプロジェクトにソースファイルを追加する必要があります。

Important

以降のステップでは、必ず、ソースファイルを現在のディスク上の場所から IDE プロジェクトに追加してください。ソースファイルの複製コピーを作成しないでください。

86

Page 91: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドTesting

IDE プロジェクトで共通 I/O ライブラリをセットアップするには

1. すべての実装ソースファイル /vendors/vendor/boards/board/ports/common_io/iot_peripheral.c を aws_tests IDE プロジェクトに追加します (周辺機器ごとに 1 ファイル)。

2. すべてのテストソースファイル /libraries/abstractions/common_io/test/test_iot_peripheral.c を aws_tests IDE プロジェクトに追加します (周辺機器ごとに 1 ファイル)。

3. テスト設定ファイル /vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h を aws_tests IDE プロジェクトに追加します (すべての周辺機器に対してこの 1 ファイルのみ)。

4. テストセットアップファイル /vendors/vendor/boards/board/ports/common_io/test_iot_internal.c を aws_tests IDE プロジェクトに追加します (すべての周辺機器に対してこの 1 ファイルのみ)。

CMakeLists.txt ファイルの設定

CMake を使用してテストプロジェクトを構築する場合は、CMake リストファイルでライブラリのポータブルレイヤーのターゲットを定義する必要があります。

/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 /vendors/vendor/boards/board/ports/common_io/iot_peripheral_1.c /vendors/vendor/boards/board/ports/common_io/iot_peripheral_2.c /vendors/vendor/boards/board/ports/common_io/iot_peripheral_3.c ... # test configuration and pre-steps /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

87

Page 92: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドI2C ライブラリの移植

AFR::wifi AFR::utils AFR::common_io)

テストの実行

共通 I/O テストを実行するには

1. テストプロジェクトを構築し、デバイスにフラッシュして実行します。2. UART コンソールでテスト結果を確認します。

I2C ライブラリの移植I2C ライブラリは、ベンダーが提供する I2C ドライバーと連動します。デバイスに I2C 周辺機器がない場合は、I2C インターフェイスの移植を省略できます。I2C ライブラリは、デバイス上の I2C 周辺機器のみをプライマリとして使用できます。

前提条件:

I2C ライブラリを移植するには、I2C セカンダリデバイスが必要です。次のいずれかを指定できます。

• オンボードの I2C センサー。• Raspberry PI などの外部デバイス。

移植

ベンダ提供の I2C ドライバ ライブラリを使用して、 /libraries/abstractions/common_io/include/iot_i2c.h。 ヘッダー ファイルには、必要な API 動作情報が表示されます。実装ソースファイルを作成し、/vendors/vendor/boards/board/ports/common_io/iot_i2c.c という名前を付ける必要があります。

I2C 機能のいずれかがターゲット デバイスでサポートされていない場合は、対応する関数を返します。 IOT_I2C_FUNCTION_NOT_SUPPORTED。 返される関数のリストIOT_I2C_FUNCTION_NOT_SUPPORTEDのAPIを参照してください。 /libraries/abstractions/common_io/include/iot_i2c.h.

匿名ハンドル "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. */};

88

Page 93: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドI2C ライブラリの移植

テスト設定ハードウェアの設定

オンボードセンサーをスレーブデバイスとして使用している場合は、このステップを省略できます。

外部デバイスを使用する場合は、2 つのデバイスの SDA (データ) 線と SCL (クロック) 線を配線する必要があります。

I2C テストファイルは、/libraries/abstractions/common_io/test/test_iot_i2c.c ディレクトリにあります。

セットアップの設定をテストするには

1. I2C 設定を /vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h に追加します。

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. /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"

89

Page 94: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドUART ライブラリの移植

#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. */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. /vendors/vendor/boards/board/ports/common_io/test_iot_internal.c ファイルに I2Cテストセットアップコードを追加します。

#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 ドライバ ライブラリを使用して、 /libraries/abstractions/common_io/include/iot_uart.h。 ヘッダー ファイルには、必要な API 動作に関する情報が表示されます。実装ソースファイルを作成し、/vendors/vendor/boards/board/ports/common_io/iot_uart.c という名前を付ける必要があります。

90

Page 95: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドUART ライブラリの移植

ターゲット デバイスが UART 機能をサポートしていない場合は、対応する関数を返します。 IOT_UART_FUNCTION_NOT_SUPPORTED。 返される関数のリストIOT_UART_FUNCTION_NOT_SUPPORTED、 に記載されているAPIを参照してください。 /libraries/abstractions/common_io/include/iot_uart.h.

匿名ハンドル "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. */ void * pvUserCallbackContext; / uint8_t sOpened;};

テスト設定ハードウェアの設定

テストする UART ポートで、ジャンパー線を使用してループバック用の TX と RX を接続します。

UART テストファイルは、/libraries/abstractions/common_io/test/test_iot_uart.c ディレクトリにあります。

セットアップの設定をテストするには

1. UART 設定を /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. /vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h ファイル

にテストデータを定義します。

uartTestPort

UART インスタンス ID。uartIotUartFlowControl

UART フロー制御の設定。uartIotUartParity

UART パリティビットの設定。uartIotUartWordLength

UART ワード長の設定。uartIotUartStopBits

UART ストップビットの設定。

91

Page 96: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドSPI ライブラリの移植

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. /vendors/vendor/boards/board/ports/common_io/test_iot_internal.c ファイルにUART テストセットアップコードを追加します。

#include "test_iot_internal.h"

/* 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 ドライバ ライブラリを使用して、 /libraries/abstractions/common_io/include/iot_spi.h。 ヘッダー ファイルには、必要な API 動作情報が表示されます。実装ソースファイルは /vendors/vendor/boards/board/ports/common_io/iot_spi.c として作成する必要があります。

ターゲットデバイスでは、一部の SPI 機能がサポートされていない可能性があります。その場合は、対応する関数を return にします。 IOT_SPI_FUNCTION_NOT_SUPPORTED。 返される関数のリストIOT_SPI_FUNCTION_NOT_SUPPORTED、 に記載されているAPIを参照してください。 /libraries/abstractions/common_io/include/iot_spi.h.

匿名ハンドル "struct IotSPIDescriptor"

これは通常、ドライバーのハンドルとさまざまな状態をカプセル化します。次の の例を参照してください。

/* Suppose the data type of driver handle for SPI is Driver_SPI_Handle */struct IotSPIDescriptor{

92

Page 97: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドSPI ライブラリの移植

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 テストファイルは、/libraries/abstractions/common_io/test/test_iot_spi.c ディレクトリにあります。

セットアップの設定をテストするには

1. SPI 設定を /vendors/vendor/boards/board/aws_tests/config_files/test_iot_config.h ファイルに追加します。

IOT_TEST_COMMON_IO_SPI_SUPPORTED

デバイスに SPI ペリフェラルがある場合は、これを に設定します。 1。 それ以外の場合は、 0.SPI_TEST_SET

テストする SPI インスタンスの数。2. /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. /vendors/vendor/boards/board/ports/common_io/test_iot_internal.c ファイルに SPIテストセットアップコードを追加します。

93

Page 98: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド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 ];}

94

Page 99: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

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 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 より前にリリースされたバージョンでは、/lib/third_party/mcu_vendor/vendor フォルダにベンダー移植コードが保持されています。同じ vendor フォルダがコードをコンパイルしました。バージョン 201906.00 以降の場合、ベンダーコードは /vendors/vendor フォルダにあり、プロジェクトファイルは /projects/vendor フォルダにあります。

Note

ポートのコードはバージョン 201906.00 で変更されませんでした。コードの場所のみが変更されました。既存のポートを新しいフォルダ構造に移動します。

CMake ビルドシステムバージョン 201906.00 では、CMake を使用してプロジェクトファイルを生成するためのサポートが導入されました。FreeRTOS で CMake を使用する方法ついては、「建物 FreeRTOS と CMake (p. 19)」を参照してください。

95

Page 100: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイドWi-Fi ライブラリポートの移行

CMake リストファイルは資格に必要です。CMake リストファイルの作成については、「作成 CMake リストファイル (p. 12)」を参照してください。

Wi-Fi ライブラリポートの移行FreeRTOS Wi-Fi ライブラリには、Wi-Fi ネットワークを追加、削除、および取得し、Wi-Fi ネットワーク状態変更の通知を受信するための 4 つの新しい API があります。これらのすべての新しい API はオプションであり、Bluetooth Low Energy を経由した 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 ライブラリを移植する方法については、FreeRTOS 移植ガイドの「Porting the BLE Library」を参照してください。

96

Page 101: FreeRTOS - 移植ガイド...FreeRTOS 移植ガイド 古いバージョンの FreeRTOS の移植 日付 移植と資格ドキュメン トのバージョン 変更履歴 FreeRTOS

FreeRTOS 移植ガイド

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

xcvii