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提供
このページ内
  • 1.1 本書を読むための前提知識と技能
  • 1.2 専門用語について
  • 1.3 本書の目標
  • 1.4 可能なら用意したい機材
  • 1.5 サンプル・コードについて
  • 1.6 本書の約束事

第1章:準備

TODO:本書を書き進めるうちに前提知識や機材、約束事が修正が必要になる可能性あり

1.1 本書を読むための前提知識と技能

本書は、趣味・学業・仕事の区別なく、プログラミング経験がある方を対象とします。プログラミング言語として、C 言語・アセンブリ言語・JavaScript を扱います。

本書では出来るだけ避けるようにしていますが、Windows のコマンドプロンプトや Linux の Terminal を抵抗感なく使えることが望ましいです。 また、自分用に PC を購入したことがあり、PC に関する商品知識を説明できることが望ましいです。

1.2 専門用語について

日本語として定着している専門用語については、日本語で表記します。英語や英字による略語の場合、表記を簡略化させるため、読み仮名は省略します。

1.3 本書の目標

実機で動作する OS を開発します。64 ビット UEFI に対応した米インテル社の 64 ビット CPU を搭載した PC 向けです。 C コンパイラなどの開発ツールや、実用的なアプリも作って動かせるようにすることを目標とします。

1.4 可能なら用意したい機材

第 4 世代 Intel Core プロセッサ(Haswell)以降搭載の PC 2 台を用意するのが望ましいです。少なくとも 1 台は用意しないとサンプル・コードを試すことが出来ません。

アーリーアダプタ(製品登場時の初期採用者)でもないのに、そんなに新しい PC は用意できないという方も多いとは思いますが、 古い PC へ対応するための開発時間・費用などを考慮すると、ある程度は新しい PC に限定する必要が生じてきます。

開発に使用する OS は Windows 10 を想定していますが、WSL や Ubuntu Desktop も一部の作業で使用します。

1 台目はノート PC や NUC でも良いのですが、2 台目は Micro ATX 以上のサイズのマザーボードを搭載した自作 PC が望ましいです。 2 台目は いつでもディスクを初期化しても問題がないテスト専用機として使います。また、マザーボード上に COM ポートがある製品を選びます。

PC 1 台の場合、本書で使用する周辺機器は、以下の通りです。USB メモリは必須です。

  • USB メモリ

  • PS/2 キーボード・マウス

    (ノート PC のキーボードとタッチバッドが該当します。デスクトップ PC 向けの外付け製品もあります)

  • USB キーボード・マウス

  • USB 3.1 Gen 1 または Gen 2 の UASP 対応 外付け SSD

  • USB 有線 LAN アダプタ(ASIX AX88772, AX88772B 搭載製品または、CDC-ECM 対応製品)

  • AirPrint 対応プリンタ

PC 2 台を用意できる場合、追加で使用する周辺機器は、以下の通りです。

  • マザーボード用 COM ポートブラケット

  • USB シリアル(RS-232C)変換ケーブル

  • シリアル(RS-232C)クロスケーブル

注意点として、Atom 系の低価格ノート PC・NUC・スティック型 PC・タブレット(本書では 2in1 を含みます)・スマートフォンの利用は避けた方が良いです。 ディスク容量が少なかったり、CPU の機能が削られていたりする傾向にあるので本書の想定する開発には向かないです。UEFI が 32 ビット版の機種も多く、 本書のサンプル・コードが動作しません。

また、Mac および macOS についても本書の対象外とします。

1.5 サンプル・コードについて

GitHub で公開しています。本書の本文中で個別のリポジトリの URL を提示します。

本書の本文中で扱うコード片は、基本的に GitHub で公開しているコードの一部を切り出したものです。

C コンパイラなどの開発ツールが開発完了するまでは、米マイクロソフト社の統合開発環境である Visual Studio を利用することを前提とします。

1.6 本書の約束事

OS はハードウェア(PC や周辺機器)を制御し、アプリの実行状態を管理します。よって、ハードウェアを制御するソフトウェアであるデバイスドライバは OS の一部として扱います。

ハードウェアが OS に対して、ハードウェアを制御するために情報を公開している部分(レジスタや通信プロトコルなど)は、 本書ではハードウェアまたはハードウェアに関する情報として扱います。ソフトウェア的な側面なのだから、 それはソフトウェアの情報ではないのかという意見もあるかもしれませんが、OS がハードウェアを制御するという観点を重視することにしました。

日本語の整数に関する表現ですが、「 3 以上・ 3 以下」は 3 を含むものとします。「 3 を超える」「 3 より大きい」は 4 以上のことを意味します。 「3 より小さい」「3 未満」は 2 以下のことを意味します。

不適切な略語を使わないようにします。たとえば、USB メモリを USB と略しませんし、Wikipedia を Wiki と略しません。USB とは PC と周辺機器との通信規格ですし、 Wiki とは Web 上のハイパーテキスト文書を編集する Wiki と呼ばれる種類のシステム全般を指します。

ソースコードの各行について 1 つ 1 つ、解説していくということは基本的にしません。要点を絞り込んで解説します。

業務用ソフトウェアなどで行われているような、ソースコードの各行についてコードの意味を日本語に直訳したコメントを書くことも基本的に行いません。 落ち着いた状況下で、十分な時間をかけてソースコードを読み、理解するようにしてください。コメントを数多く書けば書くほど、ソースコードを修正する際に コメントの修正漏れが発生する可能性が高くなり、コードとコメントの意味が合わなくなってしまうことになるためです。

必要なら、サンプル・コードにコメントを入れながら読むようにすると、理解が進むと思います。

前へまえがき次へ第2章:32 ビット整数式の x64 JIT コンパイラを試作する

最終更新 6 年前

https://github.com/tenpoku1000