Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FlutterGakkai モバイルでもPCでもない?Flutter対応のハードウェアを作るっ...
Search
Hiroaki OHSAWA@keimei
January 28, 2024
Programming
430
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FlutterGakkai モバイルでもPCでもない?Flutter対応のハードウェアを作るってどういうこと?
Hiroaki OHSAWA@keimei
January 28, 2024
More Decks by Hiroaki OHSAWA@keimei
See All by Hiroaki OHSAWA@keimei
実験から量産までMicroPythonで動く! IoTセンサー Degu(デグー) を作った話
ohsawa
1
920
Other Decks in Programming
See All in Programming
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
CSC307 Lecture 17
javiergs
PRO
0
320
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
530
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.9k
Lessons from Spec-Driven Development
simas
PRO
0
150
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
3Dシーンの圧縮
fadis
1
690
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
3.6k
AIとRubyの静的型付け
ukin0k0
0
560
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
140
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
150
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
110
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
250
A designer walks into a library…
pauljervisheath
211
24k
Leo the Paperboy
mayatellez
7
1.8k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Transcript
© Atmark Techno, Inc. モバイルでもPCでもない Flutter対応のハードウェアを作るってどういうこと? 第5回 FlutterGakkai 2024-01-26 @keimei
© Atmark Techno, Inc. ▪ 大澤啓明 ▪ 北海道産 ▪ 所属:
アットマークテクノ ▪ linux kernel, debian package, embedded arch design 自己紹介 @keimei こんなの つくっています。
© Atmark Techno, Inc. 今日の札幌
© 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世代
© Atmark Techno, Inc. 何に使われているの?
© Atmark Techno, Inc. 組込み/IoTってどうなの ▪ ここにはApp・Webの人が多いと思 いますが‥‥ ▪ 目立たないだけで色々なところで使
われています
© Atmark Techno, Inc. IoTな視点から見たFlutterのいいところ ▪ ロイヤリティフリーでデバイス台数毎の フィーも無いので予算に優しく売切り、買切 りビジネスでも相性good ▪
エンジンはBSD-3なので装置内のappの ソース公開しなくても良い ▪ 公式・ユーザーともに情報が豊富 ▪ 過去にはQtがこのポジションにいたかも…
© Atmark Techno, Inc. Flutterが書けるなら”IoT・組込み”もできる? GUIという面では「IoT・組込み」と 差がなくなってきたかもしれない。 • 産業系でも物理ボタンよりも タッチパネルが普及
• 注文端末等の中間的な製品も増えて ますます境界が曖昧に • 通信先はどっちも結局AWSだったり でも現状は… • 見慣れない開発環境やデバッグに不安 • Flutterのサポートを表明していない製品 • 基板むき出しでなんか怖い… 難しい? 簡単?
© Atmark Techno, Inc. flutter.devでもこう言ってる
© Atmark Techno, Inc. 使えるよ (と言う責任) ベースになる「プラットフォーム」として大事なこと ▪ 正しく動く ▪
パフォーマンスが期待を裏切らない (画面更新の速さ、入力に対するレスポンス、他プロセスへの影響 ) ▪ 開発、アップデートの周辺環境のサポート
© 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が行うか・専用コアが存在する か・そのデコード結果をどこで描画するか?
© Atmark Techno, Inc. 偉大な先駆者 github.com/sony/flutter-embedded-linux
© Atmark Techno, Inc. 動いたけれども… ▪ 動画の再生がカクカク ▪ 長期の動作で固まる ▪
開発環境用意しないと… このままじゃ 使って もらえない…
© 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 こんな絵描いて〜 デコードして〜
© 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
© Atmark Techno, Inc. メモリコピーの課題 ▪ 最初から期待するRAM上に結果を展開すればいいのでは • 正しい ▪
できない理由がある • フレームワーク(Gstreamer,Wayland)が何でも共有メモリにできない • GPU/VPUがデータを書き出す先もそんなに自由じゃない ▪ CPUは遅い? • RAMが動く速度よりCPUは遅い • CPUは他にもやることがある(一生懸命プロセス切替、通信、アプリも動かして いる!
© Atmark Techno, Inc. 解決方法=dma-buf ▪ 最初から同じメモリ空間を使えばいいのでは? • dma-bufでメモリ空間を”異なるドライバ間”で共有できる •
DMAという名ですけどDMA専用ではなく、ユーザープロセスから呼び出す2つ 以上のOS内のメモリ空間を橋渡しする機構 ▪ やってて良かったLinuxとh.264コーデック開発 • 2013年頃 h.264(mp4)のデコーダー開発時に使ったテクニック • チームメンバーに構想を伝えて作ってもらいました
© Atmark Techno, Inc.
© 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 こういう絵描いて〜 デコードして〜 ココが最初から 共通のアドレス空 間になった
© Atmark Techno, Inc. sony/flutter-elinux-pluginにマージ済み
© Atmark Techno, Inc. 使えるよ (と言う責任) ベースになる「プラットフォーム」として大事なこと ▪ 正しく動く ->
クリア! ▪ パフォーマンスが期待を裏切らない -> クリア! (他にもメモリリークの解決や、ランタイム間のバグも改善! ) ▪ 開発、アップデートの周辺環境のサポート
© Atmark Techno, Inc. 開発環境の提供 ▪ Visual Studio Marketplaceにてプラグイン配布 ▪
1クリックでビルド、転送、コンテナ化 ▪ ボード固有の知識無しでVSCodeでコーディング 転送・実行
© Atmark Techno, Inc. 実用的なデモの配布 制御パネル・ダッシュボード 工場向けカンバン デジタルサイネージ (街頭広告等)
© Atmark Techno, Inc. ▪ 産業用LCDメーカーとタイアップ • ノリタケ伊勢電子 (プレゼント提供) •
ADLINK (動作確認済デバイスとして掲載) 産業用にディスプレイを選ぶの大変 キャンペーンは終了しています。ゴメンナサイ 産業用LCD 長期生産、高/低温での動作 ネジ止めできる構造etc…
© Atmark Techno, Inc. これでFlutter開発者は実質IoT・組込み開発者? ▪ スマホ、Web系に比べると表に出ないけど、実は大きい市場 ▪ アプリ開発から、装置を使った事業への展開も可能
© Atmark Techno, Inc. ありがとうございました。
© Atmark Techno, Inc. おまけ
© Atmark Techno, Inc. DebianでもUbuntuでもない、IoT機器に向け新OS セキュリティと長期運用を考えた結果 を新たに開発しました
© 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
© 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
© 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
© 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 「署名されたイメージ」を 検証して書き込む (改ざん防止) 署名済みイメージ