Linux OS自作 Rust

Linux+RustでOS自作〜環境構築編〜

投稿日:

概要

先日、「30日でできる! OS自作入門」を購入しました。

名著ということで、仕事でOS・ミドルウェアをいじるものとして読んでおかなければと購入しました。
本著はWindows上で著者自作の開発ツールを使用しつつ開発を行うのですが、ソースコードも付属しているため、Windowsでの動作確認は簡単にできてしまいます。

そこで、せっかく仕事でLinuxを使用しているから、ということで、本著の内容をLinuxで動作させることができるようにしようと考えました。

また、本著ではOSにアセンブラとC言語を用いておりますが、これもせっかくなので、最近流行りの言語であるRustを使用し、Rustの勉強も兼ねてコードを書き直そうと考えました。

本記事では、Linux上でRustを使用してOS自作を行うための環境構築の方法を記述していきます。

環境構築

ツール一覧

開発には以下のツールを使用することとしました

  • ホスト
    • # uname -a
      Linux (略) 4.4.88-mainline-rev1 #1 SMP Wed Sep 13 23:49:03 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
      
  • アセンブラ
    • gas形式で記述
    • アセンブルはasコマンド
      # as -v
      GNU assembler version 2.26.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.26.1
  • コンパイラ
    • rustc, 他rust関連ツール,一部gcc
    • # rustc --version
      rustc 1.27.0-nightly (66363b288 2018-04-28)
      # gcc -v
      (略)
      gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)
  • リンカ
    • ld
    • # ld -v
      GNU ld (GNU Binutils for Ubuntu) 2.26.1
  • ビルドツール
    • make
    • # make -v
      GNU Make 4.1
  •  エミュレータ(ゲスト)
    • qemu
      • qemu-system-i386
    • qemu-system-i386 --version
      QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.25), Copyright (c) 2003-2008 Fabrice Bellard
  • バイナリ結合
    • cat
  • MS-DOS用イメージ生成
    • mtools(mformatとmcopy)
    • # mtools --version
      mtools (GNU mtools) 4.0.18

ツールのインストール

以下のパッケージをインストールする必要があります

# apt-get install -y \
       vim \ # バイナリ及びコード編集
       build-essential \ # gcc, makeなど全般
       gcc-multilib \ # gccのクロスコンパイル用
       qemu-system \ #qemu。i386用のものも入る
       mtools \ # mformat, mcopy
       curl \ # rustのインストール用
       git # お好み。筆者はgithubのリポジトリを開発に使用するので

また、rustを別途インストールする必要があります

# curl https://sh.rustup.rs -sSf | sh -s -- -y
# echo 'source $HOME/.cargo/env' >> $HOME/.bashrc

rustのインストール後、以下の作業を行います。

  • ツールチェーンを、デフォルトのstableからnightlyに切り替えます。
    • コア言語機能を使うためのライブラリとしてlibstdとlibcoreの2種がある
    • stableが参照するlibstdはOS依存コードが有るため使用できない
    • かわりに、nightlyが使用するOS非依存のライブラリであるlibcoreからコア言語機能を使用する
  • クロスコンパイル用のtargetをインストールします
    • 今回はi686-unknown-linux-gnuを使用する
  • # rustup install nightly
    # rustup default nightly
    # rustup target add i686-unknown-linux-gnu

終わりに

今回は環境構築方法を取り上げました。

今後、実際にLinux+RustでのOS自作を行っていきたいと思います。

参考サイト様

-Linux, OS自作, Rust
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

systemdでのCPU制限方法~serviceファイルでの設定編

systemd に悩まされる皆様、進捗どうですか(? 標題の件、仕事で必要に迫られたため、備忘録として。 目次1 まえがき2 動作環境3 確認内容3.1 systemdから起動するserviceのデフ …

ltraceを用いてstd::vector::push_backの動作を見える化する

仕事で使用したltraceの使い方を、メモがてら残しておきます。 目次1 概要1.1 環境2 設計・実装3 ltraceを用いたdynamic libraryのトレース4 終わりに5 メモ5.0.1 …

Docker上でnginx-proxy他を使ってSSL対応マルチドメインサーバ環境の構築

今回は、nginx-proxyを使用し、SSLに対応したマルチドメイン環境を構築します。 追記(2017/10/08):作成したdocker-compose.ymlをGithubに公開しました。目次の …

C++のマルチスレッド環境における問題とvalgrindを用いた検出方法

私は仕事でC++を使用してソフトウェアを実装しています。 今回は、C++マルチスレッドプログラミングで発生する問題点とその検出方法を(自分のメモも兼ねて)記述します。 環境は以下になっております。 O …

Docker上でWordPressとnginx-proxyを連携(SSL対応)

今回は、Docker上でWordpressサーバを構築し、SSLに対応したnginx-proxyとの連携を行います。 追記(2017/10/08):作成したdocker-compose.ymlをGit …