Skip to content

Amazon FreeRTOS Qualification Program

Hiroki Ishiguro edited this page Mar 26, 2020 · 37 revisions

はじめに

  • 本稿ではAmazon FreeRTOSのテストを実行するために必要な情報をまとめます。
  • 以降説明では「ですます調」でなくなります。

メモを書いている人

ハードウェア環境

準備するもの

  1. RX65N RSK (2MB) + 電源ACアダプタ
  2. インターネット接続可能なルータ
  3. Windows PC (RX MCUsの開発環境一式が入っていること(e2 studio/CC-RX/Renesas Flash Programmer))
  4. Ethernet HUB
  5. LANケーブル × 3本

接続方法

RX65N RSK (2MB) ---+---Ethernet HUB---インターネット接続可能なルータ
 |(*)              |
PC-----------------+
 |(ACアダプタ)
電源

(*)RX65N RSK (2MB)とPCは別途以下2接続が成されていること。
・RX65N RSK (2MB)のE1/E2 Liteコネクタ---E1/E2 Liteエミュレータ---PC(USB)
・RX65N RSK (2MB)のG1CUSBコネクタ---PC(USB)

ソフトウェア環境@RX65N RSK (2MB)

ソフトウェア環境@Windows PC

  • Amazon Web Services の doc サイトから、Amazon FreeRTOS の以前の IDT バージョン を入手

    • 動作確認済みのバージョン: IDT v1.1 for Amazon FreeRTOS v1.4.7
      • IDT for Amazon FreeRTOS: Windows
      • IDT = IoT Device Tester (以下『デバイステスタ』と呼称)
  • AWS CLI を入手しインストール

  • Java

    • e2 studio でJavaランタイムを32bit/64bit両方抱えていて適切な方が呼ばれるので追加インストール要らないが、もしデバイステスタ実行中にエラーが出る場合は、PCにインストールされている Java を32bit版にすれば直る可能性あり。(調査中)

デバイステスタ実行手順

  1. デバイステスタをダウンロードし解凍。解凍後のフォルダをCドライブ直下にコピーする
    • C:\devicetester_afreertos_win
      • このフォルダを「デバイステスタのルートフォルダ」とする
      • もしこのフォルダを変更したい場合は、デバイステスタのファイル群を全文"devicetester_afreertos_win"でgrep検索し、パスを書き換えること
  2. gitでRXマイコン用のAmazon FreeRTOSリポジトリをクローンする。クローン後のフォルダをデバイステスタのルートフォルダにコピーする
    • C:\devicetester_afreertos_win\amazon-freertos
  3. opensslでテスト用の鍵を作る
  4. ファームウェア検証にECDSA+SHA256を使用するため、ブートローダに署名検証用の公開鍵=secp256r1.publickeyを仕込む(以下は例)
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWiAlaCQGEgIKoP+qk7Uqc/ME/hjw
amq1v/z/LWx15CKig59Pd3+ar2RFOlMMOhIfkYgS+Ha7tH+w0ggnKDrUug==
-----END PUBLIC KEY-----
  1. 以下ブートローダのプロジェクトをe2 studioでビルドする
    • C:\devicetester_afreertos_win\amazon-freertos\demos\renesas\rx65n-rsk\e2studio\ccrx\boot_loader\type2
      • ビルド後、\HardwareDebug\boot_loader.mot が存在することを確認
  2. e2 studioを閉じておく
  3. Windows環境変数に以下を追加する
    • AWS_ACCESS_KEY_ID
      • AWSのアクセスキーID:AKIARLZC6.................XG のような文字列
    • AWS_SECRET_ACCESS_KEY
      • AWSのシークレットアクセスキー:U6FyF/...................GxJw のような文字列
    • AWSのアクセスキーIDとシークレットアクセスキーはAWS IAMにてユーザ毎に作成可能
  4. デバイステスタのconfigsフォルダのコンフィグファイル例例を参考に更新する
    • C:\devicetester_afreertos_win\configs\config.json
  5. デバイステスタのconfigsフォルダのデバイスファイル例を参考に更新する
    • C:\devicetester_afreertos_win\configs\device.json
  6. デバイステスタのconfigsフォルダのユーザデータ例を参考に更新する
    • C:\devicetester_afreertos_win\configs\userdata.json
  7. デバイステスタのconfigs\script_templatesフォルダのビルドファイル例を参考に更新する
  8. デバイステスタのconfigs\script_templatesフォルダのフラッシュファイル例を参考に更新する
  9. コマンドプロンプトで"c:\devicetester_afreertos_win\bin"に移動し以下のように実行する
■テスト全件実行する場合
$ devicetester_win_x86-64.exe run-suite --userdata userdata.json
■OTAテストだけ実行する場合
$ devicetester_win_x86-64.exe run-suite --userdata userdata.json --group-id FullOTA
  1. デバイステスタのresultsフォルダにテスト結果が記録されていく
    • \results\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx\logs\test_manager.log の最後に全テストの結果のサマリが書き込まれる

config.json の例

  • "awsRegion" を使用しているリージョンに変更
{
  "log": {
    "location": "../logs/"
  },
  "configFiles": {
    "root": "../configs",
    "device": "../configs/device.json"
  },
  "testPath": "../tests/",
  "reportPath": "../results/",
  "certificatePath": "../certificates/",
  "awsRegion": "ap-northeast-1",
  "auth": {
    "method": "environment"
  }
}

device.json の例

  • "serialPort"は使用しているPCで認識しているCOMポートに変更する。(COMポートの先にはRX65N RSKのG1CUSBポートが接続されていること)
[
  {
    "id": "<renesas-pool-id-1>",
    "sku": "<RX65N Starter Kit>",
    "features": [
      {
        "name": "WIFI",
        "value": "No"
      },
      {
        "name": "OTA",
        "value": "Yes"
      },
      {
        "name": "TCP/IP",
        "value": "On-chip"
      },
      {
        "name": "TLS",
        "value": "On-chip"
      }
    ],
    "devices": [
      {
        "id": "<renesas-pool-id-1>",
        "connectivity": {
          "protocol": "uart",
          "serialPort": "COM6"
        },
        "identifiers": [
          {
            "name": "serialNo",
            "value": "<serialNo-value>"
          }
        ]
      }
    ]
  }
]

userdata.json の例

  • "clientWifiConfig", "testWifiConfig" は RX65N RSK(Ether)環境において設定不要
  • "awsSignerCertificateArn"はブートローダに仕込んだ公開鍵をAWS Certification Managerに登録したものを指定
  • "awsUntrustedSignerCertificateArn"はブートローダに仕込んだ公開鍵をAWS Certification Managerに登録したもの以外を指定
{
  "sourcePath": "C:/devicetester_afreertos_win/amazon-freertos",
  "buildTool": {
    "name": "e2studio",
    "version": "7.6",
    "command": [
      "C:/devicetester_afreertos_win/configs/script_templates/build.bat"
    ]
  },
  "flashTool":{
    "name": "RFPV3",
    "version": "v3.06",
    "command": [
      "C:/devicetester_afreertos_win/configs/script_templates/flash.bat"
    ]
  },
  "clientWifiConfig": {
    "wifiSSID": "xxxxx",
    "wifiPassword": "xxxxx",
    "wifiSecurityType": "eWiFiSecurityWPA2"
  },
  "testWifiConfig": {
    "wifiSSID": "xxxxx",
    "wifiPassword": "xxxxx",
    "wifiSecurityType": "eWiFiSecurityWPA2"
  },
   "otaConfiguration":{
    "otaFirmwareFilePath":"C:/devicetester_afreertos_win/amazon-freertos/tests/renesas/rx65n-rsk/e2studio/HardwareDebug/userprog.rsu",
    "deviceFirmwareFileName":"userprog.rsu",
    "awsSignerPlatform":"AmazonFreeRTOS-Default",
    "awsSignerCertificateArn":"arn:aws:acm:ap-northeast-1:094025684215:certificate/f7bf6fc9-4f70-4c5c-a09e-724f81c677cb",
    "awsUntrustedSignerCertificateArn":"arn:aws:acm:ap-northeast-1:094025684215:certificate/19e68e65-2a0e-4c47-a9ad-09b9903d458d",
    "awsSignerCertificateFileName":"xxxxx.xxx",
    "compileCodesignerCertificate":true,
    "otaDemoConfigFilePath": "C:/devicetester_afreertos_win/amazon-freertos/tests/renesas/rx65n-rsk/common/config_files/aws_demo_config.h"
  }
}

build.bat の例

  • <<C:\Renesas\e2_studio_v760\eclipse>> は使用している e2 studioのパスで置き換える
  • <<C:\cygwin64\home\a5088582\openssl_exp\secp256r1.privatekey>> は作成したテスト用鍵が存在するパスで置き換える
  • 以下コマンドラインは、e2 studioのサイレントビルド機能(コマンドライン起動GUI無し)を用いたGUI無しでのビルド手法を活用している
    • cc-rxなどのコンパイラのコマンドを使ってコンパイルしていく方法も採れるがmakefile作成等が面倒なので、GUIでプロジェクトを組み立てて手動デバッグ時はそのままGUIでビルド・デバッグするが、テストフェーズに移り自動テスト環境にプロジェクトを組み込みたい際に、改めてmakefileを作らなくても既存のプロジェクトファイルを使ってコマンドラインからビルド制御でき、非常に便利である
C:\Renesas\e2_studio_v760\eclipse\eclipsec.exe -nosplash -debug -consolelog -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data C:\devicetester_afreertos_win\results -import C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio -cleanBuild all
"C:\devicetester_afreertos_win\amazon-freertos\demos\renesas\tools\mot_file_converter\Renesas Secure Flash Programmer\bin\Debug\Renesas Secure Flash Programmer.exe" CUI Initial "RX65N(ROM 2MB)/Secure Bootloader=256KB" "sig-sha256-ecdsa" 1 "C:\devicetester_afreertos_win\amazon-freertos\demos\renesas\rx65n-rsk\e2studio\ccrx\boot_loader\type2\HardwareDebug\boot_loader.mot" "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\HardwareDebug\aws_tests.mot" "C:\cygwin64\home\a5088582\openssl_exp\secp256r1.privatekey" "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\HardwareDebug\userprog.mot"
"C:\devicetester_afreertos_win\amazon-freertos\demos\renesas\tools\mot_file_converter\Renesas Secure Flash Programmer\bin\Debug\Renesas Secure Flash Programmer.exe" CUI Update "RX65N(ROM 2MB)/Secure Bootloader=256KB" "sig-sha256-ecdsa" 1 "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\HardwareDebug\aws_tests.mot" "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\HardwareDebug\userprog.rsu"

flash.bat の例

  • <<C:\Renesas\Renesas Electronics\Programming Tools\Renesas Flash Programmer V3.06>> は使用している はRenesas Flash Programmerのパスで置き換える
  • GitHubに登録されているプロジェクトはE2 Lite設定なので、E1やE2など他のエミュレータ使用者はプロジェクトファイルを開いてデバッガ設定変更が必要
"C:\Renesas\Renesas Electronics\Programming Tools\Renesas Flash Programmer V3.06\RFPV3.exe" /silent "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\flash_project\flash_project_dummy.rpj" /file "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\HardwareDebug\userprog.mot" /log "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\flash_project\test.log"
"C:\Renesas\Renesas Electronics\Programming Tools\Renesas Flash Programmer V3.06\RFPV3.exe" /silent "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\flash_project\flash_project.rpj" /file "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\HardwareDebug\userprog.mot" /log "C:\devicetester_afreertos_win\amazon-freertos\tests\renesas\rx65n-rsk\e2studio\flash_project\test.log"
ECHO %ErrorLevel%

ホーム

  1. Home

開発環境

  1. 開発環境を揃える
  2. 開発環境を使う
  3. CS+を使う

チュートリアル

  1. デバイスをAWS IoTに登録する
  2. Amazon FreeRTOSをダウンロードする
  3. Amazon FreeRTOSを設定する
  4. Amazon FreeRTOSを実行し、RX65NをAWS IoTに接続する

AWSの各種サービスを使用する

  1. シャドウを使用しAWSからRX65Nを制御
  2. ElasticSearchを使用しRX65Nに接続されたセンサデータをAWSで可視化
  3. Lambdaを使用しAWS経由でRX65N間のM2M通信

Tracealyzerの活用

  1. Tracealyzerの活用

OTAの活用

  1. OTAの活用

Amazon FreeRTOSのシステムに関する考察

  1. ソフトウェアアーキテクチャ
  2. 機能ブロックとAPIプロトタイプ
  3. RXマイコンにおける実装(システムタイマとソフトウェア割り込み)
  4. スリープ機能
  5. タスク切り替えと割り込み発生時のレイテンシ
  6. ネットワークインタフェースとデバイスドライバの結合
  7. Amazon FreeRTOS Qualification Program
  8. Amazon FreeRTOS ROM/RAM容量考察
  9. Amazon FreeRTOS でFreeRTOS+TCPのみ使う方法
  10. シミュレータで動作させる
  11. 乱数生成

Amazon FreeRTOSの通信性能に関する考察

  1. TCP/IP層の通信性能評価
  2. RX65N内蔵セキュリティIPを活用したSSL/TLS層の通信性能評価
  3. Tracealyzerを用いた通信中のCPU負荷率評価

セキュリティに関する考察

  1. RX65N内蔵セキュリティIP Trusted Secure IP
  2. モノの証明書に紐づく秘密鍵等の重要データをTrusted Secure IPで秘匿する方法
  3. SSL/TLS通信のマスターシークレットをTrusted Secure IPで秘匿する方法
  4. セキュアブート/セキュアアップデートの実現方法
  5. NIST FIPS140-2 CMVPとTrusted Secure IP
  6. Trusted Secure IP と Arm TrustZone
  7. EEMBC SecureMark
  8. Trusted Secure IPの暗号処理性能評価

無線モジュールに関する考察

  1. ESP32

Amazon FreeRTOS 関連外部リンク集

  1. Amazon FreeRTOS
  2. Amazon FreeRTOS の使用開始
  3. Amazon FreeRTOS ドキュメント
    1. Amazon FreeRTOS ユーザーガイド
    2. Amazon FreeRTOS API リファレンス
    3. FreeRTOS カーネルリファレンスマニュアル
    4. FreeRTOS カーネル開発者ガイド
Clone this wiki locally