Skip to content

yamada-k-25/my-uefi-rs

Repository files navigation

my-uefi-rs

Implement UEFI BIOS by Rust.

Reference by https://rust-osdev.github.io/uefi-rs/tutorial/

このリポジトリでは以下のホスト環境で動作することを確認しています。

  • PC: MacBook Air, M2, 2022
  • OS: macOS 15 Beta (Sequoia)
  • Docker (version 27.1.2, build d01f264bcc)
    • なるべくホスト環境を汚したくなかったので、Docker を使っています。
    • Linux 仮想環境を手に入れるのに各自 Docker Desktop や colima (lima) などをインストールする。
  • XQuartz (version 2.8.5)
    • QEMU 上でブートローダを起動するためには X Server がホストOS上で必要となる。
    • XQuartz を使うことで macOS 上で X Server を実行できる。
    • Homebrew がインストールされていれば、$ brew install xquartz でインストールできる。

Build

VSCode を前提として DevContainer を使っています。DevContainer を使うことで、docker のコンテナ環境に入りながらエディタ上で開発をすることができるため大変便利です。DevContainer の使い方については各自調べる。

ここからは DevContainer 上でプロジェクトディレクトリがカレントディレクトリになっている前提から始まります。以下のコマンドをプロジェクトのルートディレクトリで実行してください。

 $ cargo build --target x86_64-unknown-uefi

QEMU上で実行したいターゲットを指定することができる。ただし、rust-toolchain.toml ファイルに定義されているターゲットの一覧から選択する。

ビルドが成功すると target/x86_64-unknown-ueif/debug/my-uefi-app.efi が生成される。

Run

QEMU 上でブートローダーを実行するためには、ホストOS上で GUI Window を提供する X Window SystemX Server が起動している必要があります。なので、まず macOS 上で X Server を起動します。

  1. XQuartz アプリケーションを起動
    • アプリケーションフォルダの XQuartz をクリックして起動
  2. XQuartz > 設定 > セキュリティを選択し、ネットワーククライアントからの接続を許可にチェックを入れる
  3. 設定後、XQuartz の再起動
  4. XQuartz の terminal を起動
    • XQuartz のアプリケーション(XQuartz を開いた状態で画面上側のバーに表示される)> terminal をクリック
  5. アクセス許可の設定
    • terminal から xhost + と打つ

QEMU 上で VVFAT を使って esp ディレクトリにアクセスできる。以下のコマンドを実行すると QEMU が起動して、QEMU の画面上に Hello World! の文字が表示される。

$ qemu-system-x86_64
    -drive if=pflash,format=raw,readonly=on,file=OVMF_CODE_4M.fd \
    -drive if=pflash,format=raw,readonly=on,file=OVMF_VARS_4M.fd \
    -drive format=raw,file=fat:rw:esp

NOTE
QEMU を実行するときに -enable-kvm というオプションを指定することで、KVM の機能をフルで使うことを有効化し、パフォーマンスを大幅に向上することができるらしいが、ホストOS上で KVM を有効化しておく必要があり、macOS 上では KVM は使えないため指定しなかった。

About

Implement UEFI BIOS by Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published