技術書典4でx86_64自作OS本出します!


技術書典4へ、サークル名"へにゃぺんて"、配置場所"け52"で↑の本を出します!


フルスクラッチで作る!」シリーズの第3弾で、前著までの内容で作ったブートローダーを使い、その上で動くカーネルとアプリを作る本です。



ブートローダーはできあがったものを使うところから始めるため、この本から読み始めても大丈夫です!(ブートローダーの作り方に興味があれば前著を見てみてください)


本著も過去の同人誌同様、イベント後は↓のページでPDF版は公開します!


カーネルとしてはハードウェアの機能をひとつずつ抽象化していき、最終的にできあがったカーネルの機能を使用したサンプルアプリとして「画像ビューア」を作成します。カーネル・アプリのアーキテクチャは下図の通りです。



なお、カーネルとアプリのバイナリレベルの分離は本書では行いません。また、カーネルの機能としては「ハードウェアを抽象化してアプリへ提供する」のみのものです。


【目次】

  • はじめに
    • 開発環境について
    • 本書の PDF 版やサンプルコードの公開場所について
    • 動作確認しているハードウェアとブートローダーについて
  • 第 1 章 開発環境とブートローダーの準備
    • 1.1 開発環境の準備
    • 1.2 ブートローダー (poiboot) の準備
      • 1.2.1 ブートローダーの役割
      • 1.2.2 本書で使用するブートローダー "poiboot" について
      • 1.2.3 poiboot をダウンロード
      • 1.2.4 設定ファイル (poiboot.conf) について
      • 1.2.5 メモリマップを見てみる
      • 1.2.6 メモリマップの内容から poiboot.conf 作成
  • 第 2 章 フレームバッファを制御する
  • 第 3 章 キーボード入力
  • 第 4 章 割り込みを使う
    • 4.1 CPU: セグメンテーション設定
      • 4.1.1 GDT の定義
      • 4.1.2 レジスタ GDTR の設定 (lgdt 命令 )
      • 4.1.3 レジスタ CS ・ DS ・ SS の設定
      • 4.1.4 まとめ : gdt_init 関数の定義
    • 4.2 CPU: IDT 設定
      • 4.2.1 ハンドラ作成
      • 4.2.2 IDT の定義
      • 4.2.3 レジスタ IDTR の設定 (lidt 命令 )
    • 4.3 CPU: 割り込み有効化 (sti 命令 )
    • 4.4 PIC: 割り込みコントローラ (PIC) 設定
      • 4.4.1 PIC 初期化処理の流れと使用するレジスタについて
      • 4.4.2 PIC 初期化処理の実装
      • 4.4.3 割り込み有効化関数の実装
      • 4.4.4 PIC の EOI(End Of Interrupt) 設定
    • 4.5 仕上げ : main.c と Makefile へ反映する
      • 4.5.1 main.c と Makefile へこれまでの変更を盛り込む
      • 4.5.2 halt で待つようにする
  • 第 5 章 メモリ上の簡易ファイルシステムを用意する
  • 第 6 章 画像ビューアアプリを作ってみる
    • 6.1 仕様
    • 6.2 画像ファイルを用意する
    • 6.3 1 枚の画像を表示してみる
    • 6.4 ファイルシステムからファイルの一覧情報を取得する
    • 6.5 画像ビューアを実装する
      • 6.5.1 実装方針
      • 6.5.2 最初の画像表示処理を実装する (iv_init)
      • 6.5.3 KBC 割り込み時の処理を実装する (iv_kbc_handler)
  • 付録 A 表紙について
    • A.1 フォントジェネレータ (create_font.sh)
  • 付録 B poiboot について
    • B.1 poiboot の構成
    • B.2 前著の + α (ExitBootServices)
    • B.3 UEFI のファイル読み出しが正しく動作しないケースがありました
  • 付録 C GPT フォーマット方法
  • おわりに
  • 参考情報
    • 参考にさせてもらった情報
    • 本シリーズの過去の著作