DEV Community

YT
YT

Posted on

Rustで自作OS 1日目

最近コード書いてなかったので、Rustの勉強を兼ねて自作OS本をやってみる。
https://www.amazon.co.jp/dp/B08Z3MNR9J

環境はIntel macとIntelliJ。
適当にリポジトリを作ってRustのHello Worldが動くように設定を終わらせる。
https://github.com/ytannai/kabos

自作OS本はUEFIアプリをCで書くサンプルから始まるんだけど、Rustで書き直すところで止まった。

ちなみにCargo.tomlでeditionという、バージョン的なものを指定できるらしい。

普通にrustup initしたら2018だったので、試しに2021をしてみたらnaightlyにする必要があるようなので、rustup toolchain install nightlyでrelease channelを変えてみる。
インストールしたらrustup default nightlyで適用する。*envの機能を公式でサポートしてるのが良い。

この時点でCargo.tomlは以下のようになっている。これでHello Worldを再実行できた。

cargo-features = ["edition2021"]

[package]
name = "kabos"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[[bin]]
name = "kabos"
path = "main.rs"
Enter fullscreen mode Exit fullscreen mode

IntelliJがよく統合されていて、今のところ快適。

で、UEFIに戻る。ライブラリが見つかった。
https://github.com/rust-osdev/uefi-rs
このREADMEにあるブログを参考に、Cargo.tomlのdependenciesセクションへ依存関係を追加する。あと、unstable featureを使う設定もする。

[dependencies]
uefi = "0.11.0"
uefi-services = "0.8.0"

[unstable]
build-std = ["core", "compiler_builtins", "alloc"]
Enter fullscreen mode Exit fullscreen mode

この時点でもう一度Hello Worldを実行してみる。実行はできるが、依存が増えたからかコンパイルに少し時間がかかるようになった。
キャッシュされるのか、初回だけのようだ。

依存にrlibcも追加すると、いよいよベアメタル感が出てくる。

もう眠いので今日はここまで。次回はUEFIアプリの実装。
https://gil0mendes.io/blog/an-efi-app-a-bit-rusty/#the-app-itself

Oldest comments (0)