Amazon FreeRTOSだそうです。ルネサスさんのRXは参加しないのかな?

こんにちは。NoMaYです。

ライセンスはMIT Licenseでした。TLSとしてmbed TLSが使用されていました。サポートされているボードの写真を見ていたら、どれにも有線LANコネクタが無いことに気付きました。時代の流れでしょうか、、、

Getting Started with Amazon FreeRTOS
aws.amazon.com/freertos/getting-started/

Amazon FreeRTOS
aws.amazon.com/freertos/

Amazon FreeRTOS ソースコード
github.com/aws/amazon-freertos

[関連リンク]

FreeRTOS - freertos.org
www.freertos.org/

FreeRTOS - sourceforge.net
sourceforge.net/projects/freertos/files/

FreeRTOS kernel自体はCC-RXにも対応
github.com/aws/amazon-freertos/tree/master/lib/FreeRTOS/portable/Renesas

Amazon FreeRTOSはTLSにmbed TLSを使用
github.com/aws/amazon-freertos/tree/master/lib/third_party/mbedtls

[ニュース]

組み込み業界に大インパクト「Amazon FreeRTOS」の衝撃 - 大原雄介,MONOist
monoist.atmarkit.co.jp/mn/articles/1712/28/news011.html

アマゾン「AWS IoT」は何が衝撃的なのか - 大原雄介,MONOist
monoist.atmarkit.co.jp/mn/articles/1510/21/news026.html

(2018/01/01 : 記事を選び直しました。)

[追記]

もしかしたら、オープンソースライセンスのドライバライブラリが用意されていないから、ルネサスさんはアマゾンさんに相手にして貰えないのかも、、、

ちなみに、FreeRTOS kernel自体のライセンスがV10からModified GPLからMIT Licenseに変わったようです。

Parents
  •  こんにちは。NoMaYです。

    先週の3月3日のシェルティさんのソースを取り込んでGitHubへ登録してみました。Amazon FreeRTOSのソースは既にv1.2.2に進んでいますが、まだこちらはv1.2.0を下敷きにしています。

    github.com/NoMaY-jp/amazon-freertos

    今回、当初は登録後に思案するつもりだった以下の懸案事項のうちで、シェルティさんが作業して下さいましたT4を除いた、残りの2つのBSPとCMTについて、ちょっと気付いたことがありましたので一緒に試してみました。

    >問題はBSPとCMTとT4のFreeRTOS対応の部分をどうするかで、これは来週になってから思案してみようと思っています。

    気付いたこととは、BSPとCMTについては、以前の投稿の以下のアプリケーションノートのRTOS対応のBSPとCMTをそのまま使えば良いのではないか、ということです。つまり、このアプリケーションノートのzipファイルの中からr_bsp_rtosフォルダとr_cmt_rtos_rxフォルダを抜き出してしまえば良いのではないか、ということです。

    RX65N Group Application Note RX65N Real-time OS Package V1.0.00 ドキュメント(英文)
    www.renesas.com/ja-jp/doc/products/mpumcu/apn/rx/002/r01an4033es0100-rx65n.pdf

    RX65N Group Application Note RX65N Real-time OS Package V1.0.00 サンプルプログラム
    www.renesas.com/ja-jp/software/D6001926.html

    とはいえ、スマートコンフィグレータが生成するr_bspフォルダとr_cmt_rxフォルダの内容と干渉しないようにする必要がありますので、以下のような手を考えてみました。

    ・ スマートコンフィグレータが生成するr_bspフォルダとr_cmt_rxフォルダに対してビルドから除外する設定を行う
    ・ ビルド前ステップでr_bspフォルダとr_cmt_rxフォルダをリネームしてインクルードパスが効かないようにする
      r_bspフォルダの名前 → r_bsp__unusedという名前にリネーム
      r_cmt_rxフォルダの名前 → r_cmt_rx__unusedという名前にリネーム
    ・ ビルド前ステップでr_bspフォルダとr_cmt_rxフォルダをリネームするのに以下のMS-DOSコマンドを使いました
    e2 studioの場合
    @(if exist ..\src\smc_gen\r_bsp echo renaming folder: r_bsp --^> r_bsp__unused && ren ..\src\smc_gen\r_bsp r_bsp__unused) && @(if exist ..\src\smc_gen\r_cmt_rx echo renaming folder: r_cmt_rx --^> r_cmt_rx__unused && ren ..\src\smc_gen\r_cmt_rx r_cmt_rx__unused)
    CS+の場合
    @(echo 'Use r_bsp_rtos and r_cmt_rtos_rx instead of r_bsp and r_cmt_rx') && @(if exist src\smc_gen\r_bsp echo renaming folder: r_bsp --^> r_bsp__unused && ren src\smc_gen\r_bsp r_bsp__unused) && @(if exist src\smc_gen\r_cmt_rx echo renaming folder: r_cmt_rx --^> r_cmt_rx__unused && ren src\smc_gen\r_cmt_rx r_cmt_rx__unused)
    ・ リネーム後のフォルダに対してもビルドから除外する設定を行う(e2 studioのみ、CS+は未登録ならビルドしない為)
    ・ 抜き出したr_bsp_rtosフォルダとr_cmt_rtos_rxフォルダはスマートコンフィグレータのsmc_genフォルダの外に置く

    やってみると、狙った通り、干渉しないようにすることが出来ましたので、スマートコンフィグレータでコード生成する度にしなければならない余分な作業というものはありません。

    ただ、惜しいことに、アプリケーションノートのRTOS対応のBSPのhwsetup.cには変えた方が良い/変えないといけない点がありましたので、アプリケーションノートのzipファイルの中から抜き出した時にhwsetup.cを差し替えて下さい。手順(英文)を書いた以下のファイル(update!.txt)と差し替える新しいファイル(update!.hwsetup.c)をsrc\realtime_OS_pkgフォルダに含めておきました。

    At first, please get r_bsp_rtos module and r_cmt_rx module by following the steps below.

    1. Download an-r01an4033es0100-rx65n-connectivity.zip from https://www.renesas.com/en-eu/software/D6001925.html

    Issue Date : Oct.01.17
    Category : Other Sample Codes

    RX65N Group Application Note RX65N Real-time OS Package V1.0.00

    Applicable Products
    RX65N, RX651
    RX Driver Package

    Comments
    Application Notes (r01an4033es0100-rx65n.pdf) and Sample Program (Source, ( e2 studio / CC-RX )) are included.
    Related function: USB, RTOS, Connectivity

    File Size
    77.78 MByte

    2. Copy an-r01an4033es0100-rx65n-connectivity.zip\an-r01an4033es0100-rx65n-connectivity\RX65N_2M_realtime_OS_pkg\r_bsp_rtos\ here

    3. Copy an-r01an4033es0100-rx65n-connectivity.zip\an-r01an4033es0100-rx65n-connectivity\RX65N_2M_realtime_OS_pkg\r_cmt_rtos_rx\ here

    Then please update r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c by following the steps below.

    4. Delete r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c

    5. Move update!.hwsetup.c to r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c

    Best regards

    (↑あっ、最初の文のr_cmt_rxはr_cmt_rtos_rxの間違いですね。後で、GitHubに登録したものを直しておきます。)

    以下、ビルド前ステップの設定とビルド時の画面コピーです。

    e2 studioの場合





    CS+の場合



    以下、今回のインクルードパスの設定です。

    e2 studioの場合 (Smart Configuratorが生成したフォルダはリストの下の方に追加されます)

    ${TCINSTALL}/include
    /${ProjName}/
    /${ProjName}/config_files
    /${ProjName}/application_code
    /${ProjName}/application_code/renesas_code
    /${ProjName}/application_code/common_demos/include
    /${ProjName}/lib/aws/include
    /${ProjName}/lib/aws/include/private
    /${ProjName}/lib/aws/FreeRTOS/portable/Renesas/RX600v2
    /${ProjName}/lib/aws/FreeRTOS-Plus-TCP/source/protocols/include
    /${ProjName}/lib/aws/FreeRTOS-Plus-TCP/include
    /${ProjName}/lib/aws/FreeRTOS-Plus-TCP/source/portable/Compiler/Renesas
    /${ProjName}/lib/aws/ota
    /${ProjName}/lib/third_party/jsmn
    /${ProjName}/lib/third_party/pkcs11
    /${ProjName}/lib/third_party/tinycbor
    /${ProjName}/lib/third_party/mbedtls/include
    /${ProjName}/src/realtime_OS_pkg/r_bsp_rtos
    /${ProjName}/src/realtime_OS_pkg/r_cmt_rtos_rx
    /${ProjName}/src/realtime_OS_pkg/r_cmt_rtos_rx/src
    /${ProjName}/src/FreeRTOS_user
    /${ProjName}/src
    /${ProjName}/src/smc_gen/r_bsp
    /${ProjName}/src/smc_gen/r_config
    /${ProjName}/src/smc_gen/r_cmt_rx
    /${ProjName}/src/smc_gen/r_cmt_rx/src
    /${ProjName}/src/smc_gen/r_ether_rx
    /${ProjName}/src/smc_gen/general
    /${ProjName}/src/smc_gen/r_pincfg

    CS+の場合 (Smart Configuratorが生成したフォルダはリストの上の方に追加されます)

    src\smc_gen\r_pincfg
    src\smc_gen\r_ether_rx\src\phy
    src\smc_gen\r_ether_rx\src
    src\smc_gen\r_ether_rx\ref
    src\smc_gen\r_ether_rx
    src\smc_gen\r_config
    src\smc_gen\r_cmt_rx\ref
    src\smc_gen\r_cmt_rx
    src\smc_gen\r_bsp\mcu\rx65n\register_access
    src\smc_gen\r_bsp\mcu\rx65n
    src\smc_gen\r_bsp\mcu\all
    src\smc_gen\r_bsp\board\generic_rx65n
    src\smc_gen\r_bsp
    src\smc_gen\general
    .
    ..\common\config_files
    ..\common\application_code
    ..\common\application_code\renesas_code
    ..\..\..\..\demos\common\include
    ..\..\..\..\lib\include
    ..\..\..\..\lib\include\private
    ..\..\..\..\lib\FreeRTOS\portable\Renesas\RX600v2
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\protocols\include
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\include
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas
    ..\..\..\..\lib\ota\portable\renesas\rx65n-envision-kit (rx65n-envision-kitの場合)
    ..\..\..\..\lib\ota\portable\renesas\rx65n-rsk (rx65n-rskの場合)
    ..\..\..\..\lib\third_party\jsmn
    ..\..\..\..\lib\third_party\pkcs11
    ..\..\..\..\lib\third_party\tinycbor
    ..\..\..\..\lib\third_party\mbedtls\include
    src\realtime_OS_pkg\r_bsp_rtos
    src\realtime_OS_pkg\r_cmt_rtos_rx
    src\realtime_OS_pkg\r_cmt_rtos_rx\src
    src\FreeRTOS_user
    src

     

  • NoMaYさん

    シェルティです、こんにちは。

    いつも貴重な調査を実施いただき、ありがとうございます。
    NoMaYさんに挙げていただいた内容はパッケージ内の
    readme.txtの課題に記載しました。

    私の進捗ですが、Amazon FreeRTOS v1.2.2を使用して、
    RX65NをAmazon Web ServiceにSSL接続することが出来ました。
    Amazon FreeRTOS v1.2.2内包の純正コンポーネント
    (FreeRTOS、FreeRTOS+TCP、SSL/TLS、MQTT等)を活用しています。

    実は年始に研究開発予算を確保し協力会社に支援要請を行っておりました。
    これにより2月後半から開発を加速させております。⑥⑦については
    協力会社の支援により、ここ数週間で一気に進捗させることができました。

    進捗報告です。

    ■最新パッケージ
    shelty1.servegame.com/.../experiment.zip

    ■進捗
    RX65N Envision Kit、RX65N RSK(2MB版/暗号器あり品)をターゲットにコードメンテを維持します。
    下記 Amazon FreeRTOS 1.2.x は適宜最新コードに更新していきます。
    2018/03/17時点での適用コードは 1.2.2 です。

    ①ルネサスTCP/IPをターゲットで動作させる(Etherの動作確認)
    ②SDIO無線LANを動作確認した時期のFreeRTOS 8.2.2をターゲットで動作させる
    ③ルネサスのFreeRTOSパッケージ、9.0.0をターゲットで動作させる
    ④Amazon FreeRTOS 1.2.xのFreeRTOS部分をターゲットで動作させる
    ⑤Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分をターゲットで動作させる
    ⑥Amazon FreeRTOS 1.2.xのmbed TLS部分をターゲットで動作させる
    ⑦Amazon FreeRTOS 1.2.xのMQTT部分をターゲットで動作させる(AWSへの接続実験)
    ⑧Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分のネットワーク層の結合部分を工夫して、
     (1)Ether、(2)SPI接続無線LANモジュール、(3)SDIO無線LANモジュールの3種類を
     切り替えられるようにする ★いまここ@シェルティ
    ⑨Amazon FreeRTOS 1.2.xのmbed TLS部分の暗号処理プリミティブの
     ソフトウェア実装(AESとかRSAとか)をRX65N内蔵暗号器を使った
     ハードウェア実装に置き換える ★いまここ@協力会社
    ⑩Ether層のゼロコピーに対応する
    ⑪Amazon FreeRTOS本家環境にマージし、Amazon FreeRTOS本家コードへの追従を簡単にできるようにする
    ⑫Amazon FreeRTOS のGitのforkに登録する
    ⑬Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する
     docs.aws.amazon.com/.../freertos-qualification-program.html
     
    ■今後の予定
    ⑦より前にもまだ細かい課題はありますが、今後は⑧⑨以降を進めてまいります。
    ソフトウェア開発の目途がついたので、対応ボード環境(場合によってはボード開発も実施)を整備し
    RXマイコンのAmazon FreeRTOS対応Amazon Web Service IoT開発キットとして、
    一般販売を目指してまいります。

    # 前にも書いたかもしれませんが、シェルティはルネサス関係者です。

    以上です
Reply
  • NoMaYさん

    シェルティです、こんにちは。

    いつも貴重な調査を実施いただき、ありがとうございます。
    NoMaYさんに挙げていただいた内容はパッケージ内の
    readme.txtの課題に記載しました。

    私の進捗ですが、Amazon FreeRTOS v1.2.2を使用して、
    RX65NをAmazon Web ServiceにSSL接続することが出来ました。
    Amazon FreeRTOS v1.2.2内包の純正コンポーネント
    (FreeRTOS、FreeRTOS+TCP、SSL/TLS、MQTT等)を活用しています。

    実は年始に研究開発予算を確保し協力会社に支援要請を行っておりました。
    これにより2月後半から開発を加速させております。⑥⑦については
    協力会社の支援により、ここ数週間で一気に進捗させることができました。

    進捗報告です。

    ■最新パッケージ
    shelty1.servegame.com/.../experiment.zip

    ■進捗
    RX65N Envision Kit、RX65N RSK(2MB版/暗号器あり品)をターゲットにコードメンテを維持します。
    下記 Amazon FreeRTOS 1.2.x は適宜最新コードに更新していきます。
    2018/03/17時点での適用コードは 1.2.2 です。

    ①ルネサスTCP/IPをターゲットで動作させる(Etherの動作確認)
    ②SDIO無線LANを動作確認した時期のFreeRTOS 8.2.2をターゲットで動作させる
    ③ルネサスのFreeRTOSパッケージ、9.0.0をターゲットで動作させる
    ④Amazon FreeRTOS 1.2.xのFreeRTOS部分をターゲットで動作させる
    ⑤Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分をターゲットで動作させる
    ⑥Amazon FreeRTOS 1.2.xのmbed TLS部分をターゲットで動作させる
    ⑦Amazon FreeRTOS 1.2.xのMQTT部分をターゲットで動作させる(AWSへの接続実験)
    ⑧Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分のネットワーク層の結合部分を工夫して、
     (1)Ether、(2)SPI接続無線LANモジュール、(3)SDIO無線LANモジュールの3種類を
     切り替えられるようにする ★いまここ@シェルティ
    ⑨Amazon FreeRTOS 1.2.xのmbed TLS部分の暗号処理プリミティブの
     ソフトウェア実装(AESとかRSAとか)をRX65N内蔵暗号器を使った
     ハードウェア実装に置き換える ★いまここ@協力会社
    ⑩Ether層のゼロコピーに対応する
    ⑪Amazon FreeRTOS本家環境にマージし、Amazon FreeRTOS本家コードへの追従を簡単にできるようにする
    ⑫Amazon FreeRTOS のGitのforkに登録する
    ⑬Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する
     docs.aws.amazon.com/.../freertos-qualification-program.html
     
    ■今後の予定
    ⑦より前にもまだ細かい課題はありますが、今後は⑧⑨以降を進めてまいります。
    ソフトウェア開発の目途がついたので、対応ボード環境(場合によってはボード開発も実施)を整備し
    RXマイコンのAmazon FreeRTOS対応Amazon Web Service IoT開発キットとして、
    一般販売を目指してまいります。

    # 前にも書いたかもしれませんが、シェルティはルネサス関係者です。

    以上です
Children
  • NoMaYさん

    こんにちは、シェルティです。

    ちょっと気になってROM/RAMサイズを測ってみたところ、
    ROM200KB、RAM80KBくらい必要な感じでした。

    Amazon FreeRTOSの「ハードウェア仕様に関する最低要件」のところに以下記述もあります。
    aws.amazon.com/.../

    ---引用
    Amazon FreeRTOS は、25 MHz 以上の処理速度と 64 KB 以上の RAM を備えたマイクロコントローラ向けに最適化されています (TLS を含む利用可能なすべてのライブラリがアプリケーションマイクロコントローラ上で実行されていることを想定した場合)。通信および暗号化のスタック (MQTT を除く) がネットワーキングプロセッサにオフロードされる場合、マイクロコントローラには 10 MHz の処理速度と 16 KB の RAM が必要になります。
    ---

    純正コンパイラだと128KBでリンク制限がかかるので、
    実験をするにも有償版購入が必要ですね。
    せっかくOSがフリーなのに、コンパイラがフリーじゃなかったら辻褄が合わないので、
    計画の最終段ではGCCでの動作確認もしようかと思います。

    それから、最終段ではターゲットボード(RX130、RX231、RX65N)で
    Amazon FreeRTOSを動かそうかなと考えているのですが、
    RX130、RX231はAmazon FreeRTOSのTLS部分までマイコンで動かすと
    RAMが足らないので、RX130、RX231用のコンフィグレーションではネットワーク機能は
    WIFIモジュール側にオフロードした状態(マイコンはMQTTだけ処理)での実装になりますね。
    そちらも計画に加えてみます。

    「ROM200KB、RAM80KBくらい」というのはネットワークに直接つなぐデバイスの
    最低ラインというのはまあイメージ通りではあります。

    実はルネサスTCP/IPも私がコードを書いたのですが、
    ルネサスTCP/IPはRXマイコン導入時のEtherコントローラ評価用の側面が強く
    SSL/TLS実装までは用意していません。標準化を捨てて最小限実装にして
    対応する暗号アルゴリズムを極小にしていけばもう少し小さいRAMでも
    動かせると思っています。ベアメタル向けにルネサスTCP/IP用の
    SSL/TLS実装を書いてみるのも悪くないかなと思っています。

    --------------------------------------------------------------------------
    ■進捗
    --------------------------------------------------------------------------
    RX65N Envision Kit、RX65N RSK(2MB版/暗号器あり品)をターゲットにコードメンテを維持します。
    下記 Amazon FreeRTOS 1.2.x は適宜最新コードに更新していきます。
    2018/03/17時点での適用コードは 1.2.2 です。

    ①ルネサスTCP/IPをターゲットで動作させる(Etherの動作確認)
    ②SDIO無線LANを動作確認した時期のFreeRTOS 8.2.2をターゲットで動作させる
    ③ルネサスのFreeRTOSパッケージ、9.0.0をターゲットで動作させる
    ④Amazon FreeRTOS 1.2.xのFreeRTOS部分をターゲットで動作させる
    ⑤Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分をターゲットで動作させる
    ⑥Amazon FreeRTOS 1.2.xのmbed TLS部分をターゲットで動作させる
    ⑦Amazon FreeRTOS 1.2.xのMQTT部分をターゲットで動作させる(AWSへの接続実験)
    ⑧Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分のネットワーク層の結合部分を工夫して、
     (1)Ether、(2)SPI接続無線LANモジュール、(3)SDIO無線LANモジュールの3種類を
     切り替えられるようにする ★いまここ@シェルティ
    ⑨Amazon FreeRTOS 1.2.xのmbed TLS部分の暗号処理プリミティブの
     ソフトウェア実装(AESとかRSAとか)をRX65N内蔵暗号器を使った
     ハードウェア実装に置き換える ★いまここ@協力会社
    ⑩Ether層のゼロコピーに対応する
    ⑪Amazon FreeRTOS本家環境にマージし、Amazon FreeRTOS本家コードへの追従を簡単にできるようにする
    ⑫Amazon FreeRTOS のGitのforkに登録する
    ⑬Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する
     aws.amazon.com/.../
    ⑭GCC対応
    ⑮Amazon FreeRTOSの最低ハードウェア要件であるRAM64KBを満たさないRXマイコンでは
     SSLおよびTCP/IP機能をWIFIモジュール側にオフロードした版を用意する
    ⑯再度Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する

    以上です