Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
RustでRISC-Vをターゲットに ベアメタる @LDScell 2018/11/26 RustのLT会!Rust入門者の集い #6
Slide 2
Slide 2 text
自己紹介 • @LDScell • tomoyuki-nakabayashi(github) – 孤独に、黙々と、 Rustでベアメタってます
Slide 3
Slide 3 text
Motivation • 目指せ孤独脱出!
Slide 4
Slide 4 text
Background • ベアメタルプログラミング (no_std)とは? • RISC-Vとは? – オープンなCPUの命令セット – CPU自作して販売しても合法 CPU (Metal) OS library apps CPU (Metal) apps
Slide 5
Slide 5 text
Rust 1.30リリース! (2018/10) • `no_std` applications – #![no_std]自体は1.6からstableだったが、 #[panic_handler]が追従せず、stableではライブラ リしか作れなかった • Added RISC-V target compiler – riscv32imc-unknown-none-elf
Slide 6
Slide 6 text
stableでRISC-Vベアメタれる! • Hello world! • お作法
Slide 7
Slide 7 text
stableでRISC-Vベアメタれる! • ね、簡単でしょ? 良い子はUARTのTXバッファがFullでないかのチェックをしよう!
Slide 8
Slide 8 text
後は・・・
Slide 9
Slide 9 text
ちょっとアセンブリ書いて
Slide 10
Slide 10 text
ちょっとリンカスクリプト書いて
Slide 11
Slide 11 text
ちょっとcargoの設定書いて
Slide 12
Slide 12 text
ちょっとbuild script書いて
Slide 13
Slide 13 text
cargo runで完了! RISC-Vエミュレータの実行結果 めっちゃ簡単にベアメタれるやん! ※stableでは、アセンブラにriscv-toolchain (gcc)が必要
Slide 14
Slide 14 text
そこで僕は考えた
Slide 15
Slide 15 text
RISC-V用のOS作ろう! (ある意味必然)
Slide 16
Slide 16 text
• Deviceの利用を排他制御したい • 原始的な方法⇒spin lock – Deviceが利用中であれば、ループして待つ CPU 絶賛困っていること 安全なHWアクセスを作りたい Thread 1 Thread 2 Device (Serial/Monitor)
Slide 17
Slide 17 text
spin crate They are usable without `std` and static initializers are available. no_stdでも利用可能なspin lock用crate ```:Cargo.toml [dependencies] spin = "0.4.10“ ``` https://crates.io/crates/spin
Slide 18
Slide 18 text
早速spin crateを使え・・・ない! $ cargo build 命令セットレベルの問題? RISC-Vは(x86と違って)、compare_and_swap命令 がない 鋭意調査中 めっちゃ辛そうなエラー
Slide 19
Slide 19 text
Conclusion • Rustでベアメタルプログラミング簡単にできる よ! • RISC-Vというイケイケの命令セットをターゲット にできるよ! • 軽い気持ちでベアメタろう! OS作ろう! • そして、錆ありベアメタルの群れを作ろう!