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
プログラミング言語 Rust によるベアメタル環境向け SW 開発の一側面
Search
tarotene
November 21, 2024
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プログラミング言語 Rust によるベアメタル環境向け SW 開発の一側面
tarotene
November 21, 2024
More Decks by tarotene
See All by tarotene
mikroBus HAT を用いた簡易ベアメタル開発
tarotene
0
690
Other Decks in Technology
See All in Technology
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
370
GoにおけるFFIのこれまでとこれから
goccy
4
1.2k
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
190
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
170
omasushiというライブラリを作った
polidog
PRO
0
150
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
110
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.6k
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
130
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
220
PfEingのアプローチで働こう
rindrics
0
200
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
120
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
250
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
440
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Code Review Best Practice
trishagee
74
20k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Skip the Path - Find Your Career Trail
mkilby
1
220
Transcript
Kentaro Sugimoto (tarotene) / 第18回オープンエッジデバイス研究会 / ソニークリエイティブラウンジ プログラミング言語 Rust による
ベアメタル環境向け SW 開発の一側面 Embedded Rust Driver Made Easy
自己紹介 • 氏名: 杉本 健太朗 (すぎもと けんたろう) • 所属: ArkEdge
Space Inc. • 2023/04 - • 人工衛星の姿勢制御系 FW • 前職: Photosynth Inc. • 2021/04(新卒)- 2023/03 • スマートロックの FW • あんまり制御っぽいことはしていない • 興味のあること • 高速通信向け物理層(Ethernet, USB, …) • 制御理論全般 GitHub LinkedIn Follow me!
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 HW スタートアップにありがちなこと
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 Embedded Rust の主戦場 HW スタートアップにありがちなこと
Q. 元々 C がメインの現場で 即座に Rust の導入は可能?
Q. 元々 C がメインの現場で 即座に Rust の導入は可能? A. 状況による
• target-triple によって Tier 1, Tier 2, Tier 3 に分類
• Tier 1: 完全なビルド + 完全な動作 を担保 • 例: aarch64-unknown-linux-gnu, x86_64-apple-darwin • Tier 2: 完全なビルド + 一部の動作 を担保 • 例: armv7-unknown-linux-gnueabihf, thumbv7em-none-eabihf • Tier 3: 一部のビルド + 一部の動作 を担保 • 例: mipsel-sony-psp • Host tools と言って開発環境としての利用の担保もある • 要するに Tier 3 までの何かしらに引っかかる CPU の選定が必要! The rustc book / Platform support より Rust は元来特定 CPU 向け
Q. 結局、タイミングクリティカルな製品向けの(ベア メタルな)動作環境として、SW エンジニアの開発者 体験だけを考えるとどうなる…?
Q. 結局、タイミングクリティカルな製品向けの(ベア メタルな)動作環境として、SW エンジニアの開発者 体験だけを考えるとどうなる…? A. 有効な解の一つは Arm Cortex-M
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 パッケージマネージャ兼プロジェクトマネージャ Cargo の力 Crate システムによる SW のモジュール化促進
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 コマンドラインツール Cargo の力 ビルドやテストもその場でできる(コンテキストスイッチ軽減にも寄与) 任意のテキストエディタ、IDE を使用可能 特にロジックを注入する仕組みに強い
• HW の用意 • ターゲット: STS32-DIS-10KS • I2C の温度センサ •
Thermo 30 Click (MIKROE) という評価ボードを通して利用 • 開発用基板: STM32F4 Discovery Board • その他: STM32F4 Discovery Shield (MIKROE) • SW の用意 • 実装(ビルド・サンプルアプリの書き込みや実行など) • テスト(target-tests という sub-directory crate を用意) テーマ: 再利用可能なデバイスドライバを書く お品書き
HW の用意: STM32F4 Discovery Shieldの紹介
HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿して使う
• mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・ CPU の評価基板などは基 本これ • cf. seeed の xiao / grove
HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿して使う
• mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・ CPU の評価基板などは基 本これ • cf. seeed の xiao / grove
HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿
して使う • mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・CPU の評価基板などは基本これ • cf. seeed の xiao / grove • Thermo 30 Click で検証する
SW の開発
• ここから疑似ライブコーディングをするので、少し画面を変えます. • やること • cargo init --lib • .cargo/config.toml
の編集 • Patch: stm32f3xx.yaml の追加 • Cargo.toml の編集 • dependencies • bitfield-struct • embedded-hal • dev-dependencies(基本コピペ) • cortex-m{,rt} • defmt{,-rtt} • panic-probe • stm32f3xx-hal • lib.rs の編集(コピペ) • examples/hello.rs のテスト • 最後に target-tests という空の crate を掘る プロジェクトの立ち上げ SW の開発
おまけ
Thermo 30 Click STS-32-DIS-10KS • ソースコードはこちらに: https://github.com/tarotene/ sts32-33-dis • 使用したライブラリなど
• bitfield_struct • レジスタマップの as a code にはよく利用する • embedded-hal (v1.x.y) • マルチドロップ環境でバス共有 の仕組みが比較的良い感じ
Thermo 30 Click STS-32-DIS-10KS (Sensiron の Datasheet STS3x-DIS より)
閑話休題 / Tips 着実にドライバ開発を進める方法 • デバイス(センサ・アクチュエータ)が持つ性 質の volatility/ambiguity に着目して順にやる •
恒久的に不変: シリアルナンバーなど • 一定の論理制約のもとで不変: 設定値など • 不変性を保証できない: 測定値など • Prinf 文デバッグ(大粒度極限)とデバッガに よる step 実行(小粒度極限)の間で上手く開 発者体験を調節する • シリアル端末の埋込み • rust-embedded-community/ menu • funbiscuit/embedded-cli-rs