x64 UEFI 対応 OS 自作入門 ~実機で動作する OS を作ってみよう~
  • まえがき
  • 第1章:準備
  • 第2章:32 ビット整数式の x64 JIT コンパイラを試作する
    • 2.1 コンパイラを自作する理由
    • 2.2 全体の処理の流れ
    • 2.3 コーディングの方針
    • 2.4 字句解析
    • 2.5 構文解析
    • 2.6 意味解析
    • 2.7 中間コード(WebAssembly)生成
    • 2.8 x64 コード生成
    • 2.9 デバッグとテストコード
    • 2.10 改善を検討すべき点
    • 2.11 参考文献・資料
  • 第3章:クロス開発環境を作る(1)
  • 第4章:UEFI アプリを自作開発環境でビルドする
    • 4.1 UEFI
      • 4.1.1 初めての UEFI アプリ
      • 4.1.2 GPT と MBR
      • 4.1.3 UEFI セットアップ画面
      • 4.1.4 FreeType の利用
      • 4.1.5 UEFI セキュアブート
    • 4.2 まとめ
    • 4.3 参考文献・資料
  • 第5章:クロス開発環境を作る(2)
  • 第6章:シングルタスク OS をデバッグ可能にする
  • 第7章:対応するデバイスを増やす
  • 第8章:マルチタスク/マルチコア対応
  • 第9章:インストーラを作る
  • 第10章:開発環境を移植する
  • 第11章:TCP/IP・印刷機能を作る
  • 第12章:GitHub サポート機能を作る
  • 第13章:日本語入力機能を作る
  • 第14章:ハイパーバイザを作る
  • あとがき
  • 索引
GitBook提供
このページ内
  • 2.1.1 結論
  • 2.1.2 GCC や Clang、QEMU などの仮想マシンを利用しない理由
  • 2.1.3 失敗談
  1. 第2章:32 ビット整数式の x64 JIT コンパイラを試作する

2.1 コンパイラを自作する理由

前へ第2章:32 ビット整数式の x64 JIT コンパイラを試作する次へ2.2 全体の処理の流れ

最終更新 6 年前

2.1.1 結論

以下のような理由で、コンパイラを自作することにしました。

  • GCC や Clang、QEMU などの仮想マシンを利用しない OS 開発を選択するため

  • コンパイラの勉強になるとともに、UEFI や OS の理解の助けになると考えているため

  • コンパイル時に得られる情報を用いて、独自のファイルを出力したりするなどの、機能拡張が比較的容易になるため

既存のコンパイラは規模が大きすぎたり、log の出力先などの制御が簡単でなかったり、JIT 実行できなかったりと、 条件を満たすものを探すよりは、新規開発を選択したほうが良いだろうという判断になりました。デバッガも開発する必要があります。

2.1.2 GCC や Clang、QEMU などの仮想マシンを利用しない理由

2018 年現在の主流の方法を選択しないことで、手間はかかりますが、他の人と同じような工程になることを避けることができ、 OS や文書の独自性と多様性を保つことができると考えています。

また、Linux などの POSIX 環境での開発(クロス開発)ではなく、最終的には自作 OS 上での開発(セルフ開発)を可能にしたいので、 POSIX 環境のツールに依存することができないためです。

ただし、一時的な確認作業などでは、POSIX 環境のツールを使うようにしています。物事には完璧というものはないのです。

2.1.3 失敗談

カーネルデバッグ中の Visual Studio 内蔵 WinDbg の通信内容を記録するアプリとデバイスドライバを作成して、 WinDbg のプロトコルを解析することで、自作 OS のデバッグができないか試みたのですが、プロトコルを理解することが できず、断念しました。以下のリポジトリに、ソースコードを保存してあります。

また、デバッガなしの状態でカーネル自作も試みてみましたが、電源投入時に正常動作するものの、 再起動時に表示が乱れてフリーズしたりする不具合の原因を特定することができず、 先に進むためにコンパイラを自作する方向に作業を切り替えました。

https://github.com/tenpoku1000/windbg_logger