C言語で0から作るOSを開発について説明していきます。このシリーズではカーネルの開発について説明しています。
今回は前回作成したブートローダーから起動するカーネルローダーを作成していきます。カーネルを読み込むため32ビットのプロテクティッドモードへ移行し、A20を有効にして4GBのメモリー空間を使用できるようにします。その後FATからカーネルイメージを読み込み、カーネルを起動していきます。
【注意】本書のカーネルローダーはnasmでプログラムを行っていますが、アセンブラーの構文などは詳細に説明できておりません。別途アセンブラーの文法などを学習する必要があります。しかし、本書を読むことでカーネルローダーの基本的な設計はできるようになると思います。
[目次]
前回までの内容
メモリマップ
OS(カーネル)ロードの問題点
カーネルローダーをロードする
はじめてのカーネルローダ
1段階目のブートローダーからカーネルローダーへ
32ビットレジスター
プロテクティッドモード
プロテクティッドモードへの移行
プロテクティッド用のメモリーアクセス設定 GDT(Global Descriptor Table)
GDT(Global Descriptor Table)
GDTとセグメントレジスターの役割
論理アドレスとリニアーアドレス
セグメントセレクターとしてのセグメントレジスター
セグメントディスクリプター
GDTの作成とロード
Nullディスクリプター
コードセグメントディスクリプター
データディスクリプター
TEMPORARYディスクリプターについて
GDT設定のまとめ
プロテクティッドモードへの移行
制御レジスターCR0
32ビットプログラム
ハードウェア制御とA20
システムアーキテクチャー(フロントサイドバス)
アドレスバス(Address Bus)
制御バス(Control Bus)
I/Oデバイス
I/Oデバイスへのアクセス
8042キーボードコントローラー
8042キーボードコントローラーでA20を有効にする
ライトアウトプットポートコマンド
リードアウトプットポートコマンド
A20を有効にするまとめ
カーネルローダー メインを作っていく
最初に作成したStarting.asmファイル
スタックの初期化とGDTの設定を追加する
Starting.asmファイル
カーネルのロード
ルートディレクトリ領域でカーネルイメージファイルを探す
Starting.asmファイル
Fat12.incファイル
BPB.incファイル
common.incファイル
カーネルイメージを読み込む
Starting.asmファイルの続き
Fat12.incファイル
プロテクティッドモードへの移行
カーネルイメージのコピーとカーネル起動
今回は前回作成したブートローダーから起動するカーネルローダーを作成していきます。カーネルを読み込むため32ビットのプロテクティッドモードへ移行し、A20を有効にして4GBのメモリー空間を使用できるようにします。その後FATからカーネルイメージを読み込み、カーネルを起動していきます。
【注意】本書のカーネルローダーはnasmでプログラムを行っていますが、アセンブラーの構文などは詳細に説明できておりません。別途アセンブラーの文法などを学習する必要があります。しかし、本書を読むことでカーネルローダーの基本的な設計はできるようになると思います。
[目次]
前回までの内容
メモリマップ
OS(カーネル)ロードの問題点
カーネルローダーをロードする
はじめてのカーネルローダ
1段階目のブートローダーからカーネルローダーへ
32ビットレジスター
プロテクティッドモード
プロテクティッドモードへの移行
プロテクティッド用のメモリーアクセス設定 GDT(Global Descriptor Table)
GDT(Global Descriptor Table)
GDTとセグメントレジスターの役割
論理アドレスとリニアーアドレス
セグメントセレクターとしてのセグメントレジスター
セグメントディスクリプター
GDTの作成とロード
Nullディスクリプター
コードセグメントディスクリプター
データディスクリプター
TEMPORARYディスクリプターについて
GDT設定のまとめ
プロテクティッドモードへの移行
制御レジスターCR0
32ビットプログラム
ハードウェア制御とA20
システムアーキテクチャー(フロントサイドバス)
アドレスバス(Address Bus)
制御バス(Control Bus)
I/Oデバイス
I/Oデバイスへのアクセス
8042キーボードコントローラー
8042キーボードコントローラーでA20を有効にする
ライトアウトプットポートコマンド
リードアウトプットポートコマンド
A20を有効にするまとめ
カーネルローダー メインを作っていく
最初に作成したStarting.asmファイル
スタックの初期化とGDTの設定を追加する
Starting.asmファイル
カーネルのロード
ルートディレクトリ領域でカーネルイメージファイルを探す
Starting.asmファイル
Fat12.incファイル
BPB.incファイル
common.incファイル
カーネルイメージを読み込む
Starting.asmファイルの続き
Fat12.incファイル
プロテクティッドモードへの移行
カーネルイメージのコピーとカーネル起動