Help us understand the problem. What is going on with this article?

Rust 製 OS の Redox を Windows 上で動かす

More than 1 year has passed since last update.

Redox とは

https://www.redox-os.org/

Rust 製の Unix Like OS 。
以下、公式サイトより引用。

  • Implemented in Rust
  • Microkernel Design
  • Includes optional GUI - Orbital
  • Supports Rust Standard Library
  • MIT Licensed
  • Drivers run in Userspace
  • Includes common Unix commands
  • Newlib port for C programs

開発は Github 上で進められている。
https://github.com/redox-os/redox

公式ドキュメントも充実。
https://doc.redox-os.org/book/

とにかく動かしてみたい

ということで、公式の Get Start に沿って進めてみる。

仮想マシンで動作

https://doc.redox-os.org/book/getting_started/try_vm.html

Github Release に、 redox_VERSION.bin.gz という名前でそのバージョンの OS の入った仮想 HDD イメージが公開されているので、これを読み込んで実行させるのが一番手っ取り早い。

物理マシンで動作

https://doc.redox-os.org/book/getting_started/real_hardware.html

Github Release では、ブータブルな Live ISO も提供されていて、物理マシンでも動かせるらしいが、なんか色々制約がありそう。

仮想マシンの構築

ということで、まずは仮想マシンでやってみることに。
公式サイトでは、QEMU を使う方法を推奨されているが。

さて、QEMU とは。

QEMU

OSS のハードウェアエミュレータ。
仮想化技術は、大きく分けて Native 型と Host 型に分けられるが、QEMU は Host 型に分類される。

Native Host
Hyper-V
KVM
ESXi
QEMU
VirtualBox
VMware Workstation

最近のハイパーバイザは、CPU 仮想化に VT-x/AMD-V の利用を前提としているものも多いが、QEMU は CPU もソフトウェア的にエミュレートすることができるので、その辺からの需要もある。

QEMU を Raspberry Pi のエミュレータに良く使うのは、ARM プロセッサをエミュレートするためだ。

普段 Host 型仮想化ツールは Windows 上でしか使わないので、QEMU と聞いても「Linux で KVM と一緒に使う何か」程度の認識だったが、Windows にもしっかり対応していた

Acceralator

ちなみに、その KVM と一緒に使う というのは、QEMU の CPU 仮想化の部分を KVM が担当し、VT-x/AMD-V が使えるようにするという関係性らしい。

で、驚きなのが、2018 年初めに Hyper-V も同様に Accelerator として使えるようになった という事。

QEMU 自体にも俄然興味が出てきたぞ。
とは言え、今回は Redox。

続・仮想マシンの構築

Windows 上で動かそうとした場合、主に2つの方法が思いつく。

  1. Github Release にある redox_VERSION.bin.gz を、言われた通り QEMU で動かす
  2. redox_VERSION.bin.gz を、お気に入りの仮想化ツール用に変換し、動かす

どっちもやってみた

1. QEMU で起動

公式にあるコマンドは、以下 (順不同)

$ qemu-system-x86_64 -serial mon:stdio \
   -d cpu_reset -d guest_errors \
   -cpu host \
   -smp 4 \
   -m 1024 \
   -s \
   -net nic,model=e1000 -net user \
   -machine q35 \
   -device ich9-intel-hda \
   -device hda-duplex \
   -device nec-usb-xhci,id=xhci \
   -device usb-tablet,bus=xhci.0 \
   -enable-kvm \
   -drive file=redox_VERSION.bin,format=raw

主なオプションの意味としては、

オプション 設定 備考
-cpu CPU アーキテクチャ qemu-system-x86_64 -cpu help で一覧
-smp CPU コア数
-m メモリ量
-drive 仮想HD
-net nic,model=e1000 -net user ネットワーク パススルー
-machine マシンタイプ指定 qemu-system-x86_64 -machine help で一覧
-device デバイス ich9-intel-hda : Intel HDA
hda-duplex : Sound device ?
nec-usb-xhci : Intel Wireless Display
usb-tablet : Touch device ?
-serial mon:stdio シリアルポートシステムコンソールと QEMU HMI の多重化 ・QEMU Human Monitor Interface, Example Usage
・QEMU Serial Port System Console
-d cpu_reset
-d guest_errors
デバッグ設定
-s -gdb tcp::1234 のショートハンド
-enable-kvm KVM モードで起動

どうやら、USB HID ドライバが無いため、キーボードやマウスは使えないようだ。

Windows で QEMU 起動

まずは、scoop を使って QEMU をインストールする

PS> scoop install qemu

上記コマンドから、不要な設定を外して実行してみる。
( :, を含むオプションは、'' で囲む必要がある )

PS> qemu-system-x86_64 -serial 'mon:stdio' `
   -d cpu_reset -d guest_errors `
   -cpu host `
   -smp 4 `
   -m 1024 `
   -s `
   -net 'nic,model=e1000' -net user `
   -machine q35 `
   -device ich9-intel-hda `
   -device hda-duplex `
   -device 'nec-usb-xhci,id=xhci' `
   -device 'usb-tablet,bus=xhci.0' `
   -drive 'file=redox_VERSION.bin,format=raw'

と、こんな感じになります。

totuzennoshi.png

どうやら、QEMU for Windwos のバージョン 2.12.0-rc0 にはバグがあるようだ。
QEMU をビルドし直せば行けそうだが、無理せず次のリリースを待とう :frog:

2. 他の仮想ツールで動かす

Github Issues を見ていると、 Virtualbox や Hyper-V で挑戦している人も結構居るので、ちょっとやってみる。

2.1 Hyper-V

Docker for Windows 中毒なので、まずは Hyper-V で挑戦。

● raw 形式の仮想 HDD イメージを変換する

ダウンロードした redox_VERSION.bin.gzqemu-img を使って、VHDX 形式に変換する。

PS> qemu-img convert .\redox_VERSION.bin -O vhdx -o subformat=dynamic .\harddrive.vhdx 

で、これを元に起動してみると、以下の画面が出る。

hyper-v.png

ん~、よく分からん。

● Live ISO から起動

諦めて、ISO から起動することにする。
偉大なる先駆者が似たような事をやっていたので、参考にやってみる。

  • 設定
    • 第一世代
    • メモリ
      • 4G (固定)
    • ネットワーク
      • なし
    • 仮想ハードディスク
      • 10G
    • ブート CD/DVD からオペレーティングシステムをインストールする
      • ダウンロードした ISO を指定

で、起動すると、しばらく bootloader が何かゴニョゴニョしている。
多分、これではないかと。

Therefore, the current ISO image uses a bootloader to load the filesystem into memory and emulates one.

終わると起動する。

redox.png

◆ 感触

まず、ネットワークがつながらない。
試しに NAT 追加してみたけど駄目だった。
公式には rtl8168d と e1000 しか対応していない らしく、その辺が問題だろうか。

2.2 Virtualbox

Virtualbox でも同じ様な事ができそうなので、やってみたい。

● Live ISO から起動

  • 設定
    • タイプ
      • Other
    • バージョン
      • Other/Unknown (64 bit)
    • メモリ
      • 4G
    • 仮想ハードディスク
      • VDI
      • 10G (固定)
    • ネットワーク
      • NAT
      • 82540EM
    • ストレージ/光学ドライブ
      • ダウンロードした ISO を指定
      • Live CD/DVD

vbx.png

◆ 感触

起動めっちゃ速い。
ネットワーク繋がる。別に 82540EM でも繋がる。

● raw 形式の仮想 HDD イメージを変換する

こんなものを見つけた。

https://github.com/redox-os/redox/blob/master/mk/virtualbox.mk

ぱっと見、VBoxManage を操作して VM 作っているだけに見えるが、実は RAW 形式から VDI にしてから起動していた。

https://github.com/redox-os/redox/blob/master/mk/virtualbox.mk#L37

     $(VBM) convertfromraw $< build/harddrive.vdi

なるほど、こんなやり方もあるのか。
ということで、まずは以下コマンドで VDI を作成する。

PS> VBoxManage convertfromraw .\redox_VERSION.bin redox.vdi

マシンを作成する。
新規マシン作成時、作成した VDI は直接読み込まず、後からアタッチするので注意。

  • 設定
    • タイプ
      • Other
    • バージョン
      • Other/Unknown (64 bit)
    • メモリ
      • 2G
    • ストレージ
      • IDE は空
      • SATA コントローラ追加
        • タイプ : AHCI
        • ポート : 1
        • ハードディスクを追加
          • 変換した VDI を追加
    • ネットワーク
      • NAT
      • 82540EM

これで ISO 同様に起動ができた。
ファイルも永続化している。

Redox 使用感

POSIX っぽいし、ファイルシステムも Linux っぽい。最低限の事はできる。

GUI はまだオマケだった。
ブラウザの URL を変更する方法すら分からなかった。

今はまだそういう段階なんだろうと言う感じ。

他の Rust 製 OS

Blog OS

https://os.phil-opp.com/
https://github.com/phil-opp/blog_os

Reenix

https://github.com/scialex/reenix

感想

かかった時間の半分以上が Redox 自身ではなく、QEMU 含む仮想化技術についての学習になってしまった。
( 元々 OS, Kernel 周りは苦手というのもあるが )

Redox の OS 設計部分の面白さを感じられるように、もう少し追いかけていきたい。

参考

Redox

QEMU

KVM と QEMU

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした