Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FlutterGakkai モバイルでもPCでもない?Flutter対応のハードウェアを作るってどういうこと?

FlutterGakkai モバイルでもPCでもない?Flutter対応のハードウェアを作るってどういうこと?

Hiroaki OHSAWA@keimei

January 28, 2024
Tweet

More Decks by Hiroaki OHSAWA@keimei

Other Decks in Programming

Transcript

  1. © Atmark Techno, Inc. ▪ 大澤啓明 ▪ 北海道産 ▪ 所属:

    アットマークテクノ ▪ linux kernel, debian package, embedded arch design 自己紹介 @keimei こんなの つくっています。
  2. © Atmark Techno, Inc. 20年の歴史と60万台の実績 (Armadilloシリーズ) ゲートウェイ型 モジュール型 ボード型(汎用)
 ボード型(特化)


    2007年~ 2001年~ 2004年~ 2010年~ 2013年~ 2016年~ 2019年~ 初代Armadillo
 A200世代 A500世代 A400世代 A800世代 A600世代 A-X1世代 現在の注力世代 PC/104
 PC/104
 PC/104
 カメラ LCD
 A500
 A500
 A9
 HT1070
 A210/220/230/240
 A420/440
 A410
 A460
 A840m
 A840
 A810
 AX1
 A640
 A610
 A-IoT G1/G2
 A-IoT G3/G3L
 A-IoT A6
 2021年~ A-X2世代
  3. © Atmark Techno, Inc. IoTな視点から見たFlutterのいいところ ▪ ロイヤリティフリーでデバイス台数毎の フィーも無いので予算に優しく売切り、買切 りビジネスでも相性good ▪

    エンジンはBSD-3なので装置内のappの ソース公開しなくても良い ▪ 公式・ユーザーともに情報が豊富 ▪ 過去にはQtがこのポジションにいたかも…
  4. © Atmark Techno, Inc. Flutterが書けるなら”IoT・組込み”もできる? GUIという面では「IoT・組込み」と 差がなくなってきたかもしれない。 • 産業系でも物理ボタンよりも タッチパネルが普及

    • 注文端末等の中間的な製品も増えて ますます境界が曖昧に • 通信先はどっちも結局AWSだったり でも現状は… • 見慣れない開発環境やデバッグに不安 • Flutterのサポートを表明していない製品 • 基板むき出しでなんか怖い… 難しい? 簡単?
  5. © Atmark Techno, Inc. 使えるよ (と言う責任) ベースになる「プラットフォーム」として大事なこと ▪ 正しく動く ▪

    パフォーマンスが期待を裏切らない (画面更新の速さ、入力に対するレスポンス、他プロセスへの影響 ) ▪ 開発、アップデートの周辺環境のサポート
  6. © Atmark Techno, Inc. 組込み/IoT向けFlutterを動かすためには何が必要か ▪ ベースはLinux Desktop向けの実装 ▪ 異なる点

    CPUアーキテクチャ PC: amd64 VS Armadillo: ARM64 Flutter自体はC++で書かれた実装なので、コンパイル し直せば一応動く 描画バックエンド 公式のFlutter for Linux DesktopはGTKによる描画 Gnome等のデスクトップUIの環境が必要なければ GTKは遅く大きいので除外したい HWアクセラレータの種別 ビデオのデコードをCPUが行うか・専用コアが存在する か・そのデコード結果をどこで描画するか?
  7. © Atmark Techno, Inc. 動いたけれども… ▪ 動画の再生がカクカク ▪ 長期の動作で固まる ▪

    開発環境用意しないと… このままじゃ 使って もらえない…
  8. © Atmark Techno, Inc. 動画を再生するときに何が起きているのか https://docs.flutter.dev/resources/architectural-overview Hardware Linux Kernel WindowSystem(X11,

    Wayland..), Library GLES
 GPU
 (Vivante GC7000)
 Weston
 (Wayland実装)
 Flutter Video Player Plugin
 Gstreamer
 gstreamer
 decoder plugin
 codec device driver
 VPU
 (VeriSilicon Hantro)
 GPU device diver
 Flutter
 Embedder 
 (for eLinux)
 HDMI Video Decode  Rendering .mp4 こんな絵描いて〜 デコードして〜
  9. © Atmark Techno, Inc. ボトルネックの発見 https://docs.flutter.dev/resources/architectural-overview Hardware Linux Kernel WindowSystem(X11,

    Wayland..), Library GLES
 GPU
 (Vivante GC7000)
 Weston
 (Wayland実装)
 Flutter Video Player Plugin
 Gstreamer
 gstreamer
 decoder plugin
 codec device driver
 VPU
 (VeriSilicon Hantro)
 GPU device diver
 Flutter
 Embedder 
 (for eLinux)
 HDMI Video Decode  Rendering .mp4 こんな絵描いて〜 デコードして〜 ココが遅い! 圧縮状態から展開した生の画像を GPUの使うメモリ領域に CPUが頑張ってコピーしている =ビデオ再生アプリを作ると コマ 落ちでガクガク ARMコア
 RAM
  10. © Atmark Techno, Inc. メモリコピーの課題 ▪ 最初から期待するRAM上に結果を展開すればいいのでは • 正しい ▪

    できない理由がある • フレームワーク(Gstreamer,Wayland)が何でも共有メモリにできない • GPU/VPUがデータを書き出す先もそんなに自由じゃない ▪ CPUは遅い? • RAMが動く速度よりCPUは遅い • CPUは他にもやることがある(一生懸命プロセス切替、通信、アプリも動かして いる!
  11. © Atmark Techno, Inc. 解決方法=dma-buf ▪ 最初から同じメモリ空間を使えばいいのでは? • dma-bufでメモリ空間を”異なるドライバ間”で共有できる •

    DMAという名ですけどDMA専用ではなく、ユーザープロセスから呼び出す2つ 以上のOS内のメモリ空間を橋渡しする機構 ▪ やってて良かったLinuxとh.264コーデック開発 • 2013年頃 h.264(mp4)のデコーダー開発時に使ったテクニック • チームメンバーに構想を伝えて作ってもらいました
  12. © Atmark Techno, Inc. 改善結果 https://docs.flutter.dev/resources/architectural-overview Hardware Linux Kernel WindowSystem(X11,

    Wayland..), Library GLES
 GPU
 (Vivante GC7000)
 Weston
 (Wayland実装)
 Flutter Video Player Plugin
 Gstreamer
 gstreamer
 decoder plugin
 codec device driver
 VPU
 (VeriSilicon Hantro)
 GPU device diver
 Flutter
 Embedder 
 (for eLinux)
 HDMI Video Decode Rendering .mp4 こういう絵描いて〜 デコードして〜 ココが最初から 共通のアドレス空 間になった
  13. © Atmark Techno, Inc. 使えるよ (と言う責任) ベースになる「プラットフォーム」として大事なこと ▪ 正しく動く ->

    クリア! ▪ パフォーマンスが期待を裏切らない -> クリア! (他にもメモリリークの解決や、ランタイム間のバグも改善! ) ▪ 開発、アップデートの周辺環境のサポート
  14. © Atmark Techno, Inc. 開発環境の提供 ▪ Visual Studio Marketplaceにてプラグイン配布 ▪

    1クリックでビルド、転送、コンテナ化 ▪ ボード固有の知識無しでVSCodeでコーディング 転送・実行

  15. © Atmark Techno, Inc. ▪ 産業用LCDメーカーとタイアップ • ノリタケ伊勢電子  (プレゼント提供) •

    ADLINK  (動作確認済デバイスとして掲載) 産業用にディスプレイを選ぶの大変 キャンペーンは終了しています。ゴメンナサイ 産業用LCD 長期生産、高/低温での動作 ネジ止めできる構造etc…
  16. © Atmark Techno, Inc. Applications
 IoT機器特化の「Armadillo Base OS」で安心利用 Hardware
 •

    アプリ開発に集中できる
 (OS部分は最適化済み)
 • Docker Hubのコンテナ利用可能
 • IoTアプリもサンプルで簡単
 (ゲートウェイコンテナ)
 • GUIアプリはFlutterで開発
 • OSの長期メンテナンス • 突然の電源断でも壊れにくい
 堅牢なファイルシステム
 • プログラム領域のリードオンリー化
 • 運用ログの記録
 ネットワーク
 マネージャー ソフトウェア
 アップデート コンテナ
 エンジン • OSコンパクト化で脆弱性を限定
 • コンテナ構造でサンドボックス化 • セキュアエレメントで個体認証
 • セキュアブートで改ざん防止 • OP-TEEのセキュアな実行環境 • イメージ二重化でロールバック可能
 (アップデート失敗でもリカバリー)
 • 差分更新機能で最小データ転送
 • 多様なアップデート手段
 (ネットワーク/USB/SD)
 アップデート機能を標準搭載 
 長期で安定運用するために 
 多面的なセキュリティ機能 
 モダンなソフトウェア環境 
 Docker Hub Server update
  17. © Atmark Techno, Inc. Armadillo Base OSの特長 ▪OSのコンパクト化 • 長期的なアップデートの提供

    • 機能限定化によるセキュリティの向上 eMMC(10GB ストレージ)
 log
 firm
 app
 50MB
 200MB
 9GB
 GPU
 VPU
 NPU
 OS
 300MB x2
 Bootloader
 U-Boot
 32MB x2
 Linux 5.10
 ネットワーク
 マネージャー ソフトウェア
 アップデート コンテナ
 エンジン 約200MB
 (圧縮配信時:約100MB)
 IoT時代に適応した長期に安定運用できるOS
 ▪コンテナによるアプリケーション運用 • サンドボックス化によるセキュリティの向上 • コンテナ単位でアップデート可能 ▪アップデート機能を標準提供 • OS/ブートローダ/コンテナの二面化とリカバリー機能 • ネットワーク/USB/SDによるアップデート機能 ▪堅牢性の向上 • 安定性の高いファイルシステムと抑制された書込み回数 • 運用ログの記録機能を標準搭載 ▪セキュリティ機能の向上 • コンテナ化によるアクセス権限の管理 • セキュアエレメントへの対応 
 • OP-TEEの提供 連携 サーバー Secure 
 Element
 CERT
 主にデバイス認証 向けに利用 NXP SE050
 配信 コンテナ
 0
 コンテナ
 1
 コンテナ
 n

  18. © Atmark Techno, Inc. Armadillo Base OSの様々なセキュリティ対策 eMMC(10GB ストレージ)
 log


    firm
 app
 50MB
 200MB
 9GB
 GPU
 VPU
 NPU
 OS
 300MB x2
 Bootloader
 U-Boot
 32MB x2
 Secure 
 Element
 CERT
 NXP SE050
 コンテナ
 0
 コンテナ
 1
 コンテナ
 n
 コンテナ構造
 (サンドボックス化)
 Linux 5.10
 ネットワークマネージャー ソフトウェアアップデート コンテナエンジン 約200MB
 (圧縮配信時:約100MB)
 コンパクト化 (脆弱性の限定)
 SD
 image
 SIGN
 セキュアブート
 (改ざん防止)
 ソフトウェアへの署名
 (不正ソフトの書込み禁止) セキュアエレメント
 (デバイス真正性の証明)
 OP-TEE
 (セキュア空間のアプリ)
 アップデート機能の標準化
 (脆弱性の回避)
 セキュアワールド
 ノーマルワールド
 OP-TEE
 secure app
 Linux
 app
 OP-TEE
 コンテナ構造
 (明示的なアクセス権限)
 暗号化ストレージ
 (プログラム/データ保護)
 G4
 G4
 G4

  19. © Atmark Techno, Inc. 複数のアップデート手段を提供 現場でのアップデート系 簡易型の
 リモートアップデート 高機能な
 リモートアップデート

    Dockerコンテナで
 hawkBit※サーバーを提供
 eMMC(10GB ストレージ)
 log
 firm
 app
 50MB
 200MB
 9GB
 コンテナ
 0
 GPU
 VPU
 NPU
 OS
 300MB x2
 Bootloader
 U-Boot
 32MB x2
 コンテナ
 1
 コンテナ
 n
 ※hawkBit: Eclipseのオープンソースプロジェクトで 
 IoT機器のソフトウェアアップデートのフレームワーク 
 https://www.eclipse.org/hawkbit/whatishawkbit/
 Web
 サーバー file
 hawkBit※
 サーバー dB
 file
 SD
 file
 USB
 file
 SIGN
 SIGN
 SIGN
 SIGN
 「署名されたイメージ」を 
 検証して書き込む (改ざん防止)
 署名済みイメージ