Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Baremetal rust for_windows

650 views

Published on

Baremetal Rust on Teensy for Windows

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Baremetal rust for_windows

  1. 1. Rust + Teensy + Windows で ベアメタル開発 Talos208
  2. 2. TL;DR Tennsyというボード向けにRustでベアメタル開発をやってみた 環境構築にコツがいる Windowsでもできた!
  3. 3. WhoamI 株式会社スプラウトR&D TechLead 組込み→Windowsゲーム→SIer(Web系BtoB)→セキュリティと流 れてきたので、無駄に色々できる Twitter : Talos208 GitHub: https://github.com/Talos208
  4. 4. Rustの文法を覚えてみたものの Web系 インタプリタ系言語でよくね? コンパイラ系でテンプレートはつらい 厳格な型付き言語でSQLはつらい 並行処理系 GoとかElixirでよくね?
  5. 5. ならばベアメタルだ
  6. 6. Teensyとは https://www.pjrc.com/teensy/ 海外のMaker系ではメジャーなCPUボード 英語なら情報はそこそこある USB実験ボード的な位置づけ Arduino互換の2.0 Cortex‑MのLC/3.x
  7. 7. Teensy3.2 Cortex‑M系のCPU(FreescaleMK20DX256) Infinity ErgoDoxでも使われている PJRC提供のArduino互換環境 mbed互換環境
  8. 8. Zinc http://zinc.rs/ mbedと同等機能のファームをRustで書くのが目標のプロジェクト レジスタ内部のビットマスクなどを(マクロを使って)意識せずに 書ける ペリフェラルの対応はまだ充実していない
  9. 9. 環境構築 zincはまだExperimentalなので、バージョン依存が厳しい 特定日付のnightlyでないとうまくいかないなど ライブラリはCargoで管理できる コンパイラなどツールチェーンには、rustup必須
  10. 10. rustup https://www.rustup.rs/ Rustツールチェーンのバージョン管理ツール 指定バージョンのコンパイラのインストール デフォルトのコンパイラのバージョンの指定 特定フォルダ配下での、コンパイラバージョンのオーバーライド rbenvとかに近い使い勝手
  11. 11. rustup zincのREADMEに、nightly‑2016‑09‑17でしか動作しないとある それをインストール $ rustup install nightly-2016-09-17 $ cd <プロジェクトのフォルダ> $ rustup override set nightly-2016-09-17
  12. 12. ツールチェーン LLVM IRをバイナリに変換するツール群 ターゲットCPUの、OS非依存のツールチェーンが必要 現状ではLLVMでなくGCCのリンカを使用 ZincのREADMEに従って、以下から開発する環境のものを用意 GNU ARM EmbeddedToolchain https://launchpad.net/gcc‑arm‑embedded/+download
  13. 13. プロジェクトの設定 うまい設定が必要なファイルがいくつか Cargo.toml zincなどライブラリに対する依存関係 thumbv7em‑none‑eabi.json ターゲット環境に対するビルド方法の指定
  14. 14. プロジェクトの設定 参考になるものがGitHubにあるのでforkする Teensy 3.1/3.2 LED BlinkexampleinRust withZinc https://github.com/archaelus/teensyr Tennsy + Rust でLチカさせている
  15. 15. zincのバージョン指定 zincのバージョンも合わないとビルドできない 具体的には、ビルドタグ#a3d393b4 Cargo.tomlでビルドタグの指定もできる気がするが、今回はうまく 行かなかった
  16. 16. zincのバージョン指定 zincをfork 目的のビルドタグがHEADに来るよう、自分のリポジトリ内にブラ ンチを作成 Cargo.tomlにそのブランチを指定する ... [dependencies.zinc] git = "https://github.com/Talos208/zinc.git" branch = "mykbd" features = ["mcu_k20"] ...
  17. 17. ビルド $ cd <プロジェクトのフォルダ> $ cargo build --release --target=thumbv7em-none-eabi $ arm-none-eabi-objcopy -O hex target/thumbv7em-none-eabi/release/blink blink.hex <プロジェクトのフォルダ>/target/thumbv7em‑none‑eabi/release/ に blink.hexの名前でビルド結果ができる
  18. 18. 実行 Teensy Loader でボードに書き込む https://www.pjrc.com/teensy/loader.html 他のOSではコマンドライン版もあるが、WindowsではGUIのみ 1. MicroUSBケーブルでTeensyをPCに接続 2. Teensy Loaderを実行 3. Teensy上のボタンを押す→書き込みモードへ 4. Teensy LoaderのFile→OpenHEXFileでファイルを開く 5. Operation→ProgramでTeensyに書き込み 6. Operation→Rebootでプログラム実行
  19. 19. デモ? 持っては来ているので、懇親会で

×