RISC-VボードでRustを動かす話

F1000673841a7446b270ddef11a3568f?s=47 Daniel
July 03, 2019

 RISC-VボードでRustを動かす話

最近買ったRISC-VボードHifive1 RevBの上でRustを動かす話です。(時間の関係ではなせなかった部分が少し増えてます)

F1000673841a7446b270ddef11a3568f?s=128

Daniel

July 03, 2019
Tweet

Transcript

  1. RISC-VボードでRustを動かす話

  2. ⾃⼰紹介 Self Self { { name name: : " ダニエル"

    " ダニエル", , school school: : " 東京農⼯⼤学" " 東京農⼯⼤学", , twitter twitter: : "@daniel_program" "@daniel_program", , } }
  3. RISC-V

  4. RISC-Vとは… CPUのオープンソースな命令セット(ISA)の⼀種

  5. HIFive RevB HIFive RevB のページ

  6. HIFive RevB Hifive RV IMAC Rust riscv imac-unknown-none-elf このボード向けにコンパイルできるのでは?

  7. やってみた C⾔語からRustを呼び出す Rust単体で実⾏する

  8. Cから呼び出す rustから使いやすいようにCを書く rustを書く staticlib として書き出す cbindgenで.h ファイルを作る ⼀緒にコンパイルする

  9. rustから使いやすいようにCを書く freedom-e-sdk void void led_on led_on( () ) { {.

    .. .. .} } void void led_off led_off( () ) { {. .. .. .} } int int main main( () ) { { . .. .. . blink_rs blink_rs( () ); ; } }
  10. rustを書く extern extern { { fn fn led_on led_on( ()

    ); ; fn fn led_off led_off( () ); ; } } #[no_mangle] #[no_mangle] pub pub extern extern fn fn blink_rs blink_rs( () ) { { loop loop { { unsafe unsafe{ { led_on led_on( () ); ; } } delay delay( () ); ; unsafe unsafe{ { led_off led_off( () ); ; } } delay delay( () ); ; } } } }
  11. staticlib Cargo.toml [ [package package] ] name name = =

    "blink" "blink" version version = = "0.1.0" "0.1.0" authors authors = = [ ["Daniel" "Daniel"] ] edition edition = = "2018" "2018" [ [lib lib] ] crate-type crate-type= =[ ["staticlib" "staticlib"] ] [ [dependencies dependencies] ]
  12. cbindgen $ cargo $ cargo install install cbindgen cbindgen $

    cbindgen $ cbindgen . . .. .... .. void blink_rs void blink_rs( (void void) ); ;
  13. ⼀緒にコンパイルする コンパイラにstaticlib も投げればコンパイルしてくれる。 今回はMakefile の依存関係に書くだけでコンパイルしてくれた。

  14. Rust単体で実⾏する Github - riscv-rust-quickstart https://github.com/riscv-rust/riscv-rust-quickstart

  15. "cargo run " で実⾏ができる!

  16. Example leds_blinkでLチカができている

  17. None
  18. 実⾏はしっかりできます

  19. まとめ riscvボードでRustは動かせる。 Cとつなげるのは⾯倒くさい ライブラリ周りがまだしっかりしていない

  20. ありがとうございます! @daniel_program