OSを自作してみる2 ~32ビットOSの作成~



今回はOS本体を作成し起動確認まで行う。

※過去回の記事とソースコードは下記から入手できる
https://github.com/Shadow5523/osdev/blob/master/README.md
また、ここで使用するコードはGitHubからダウンロードできる。
https://github.com/Shadow5523/osdev/releases/tag/version0.1.0

これからいよいよOSのほうの製作に着手していく。まず、生成するファイルは以下の通り。

boot.s CPUにカーネルが存在する場所をおしえるプログラム(GASで記述)
kernel.c カーネルプログラム本体
kernel.h kernel.cのヘッダファイル
terminal.c 画面に文字等の表示を制御するファイル
terminal.h terminal.cへのヘッダファイル
vga.h terminal.hへのヘッダ。こちらも画面表示の制御系のファイル
linker.ld 上の2つのファイルをリンクしていくためのスクリプト
Makefile 分割したソースファイルを一気にコンパイルしisoファイル作成までやるファイル

また今回OSをロードするためのブートローダはGRUB2を使用する。

1.boot.sを作成する。ちなみに”.section .bss”の所はスタック領域を書いていていて、16kBの領域を確保している。

 

3.画面の表示を制御するterminal.cとterminal.h、vga.hを作成する。
//terminal.h

 

//terminal.c

 

//vga.h

 

4.OSのメインのファイルとなるkernel.hとkernel.cを作製する。

//kernel.h

//kernel.c

 

4.つぎに生成したオブジェクトファイルをリンクするスクリプトを書いていく

 

5.grubの設定 “isodir/boot/grub/grub.cfg”を作成し、以下を記述する。
//grub.cfg

 

6.最後にこのソースファイルたちを一気にビルドするMafileを作成する。(Makefileのインデントはタブで記述すること)
//Makefile

 

7.Makefileを作成したディレクトリで以下のコマンドを実行する。コマンドの実行が完了するとmyos.isoがカレントディレクトリへ作成される

# make

生成されたmyos.isoをusbなどの記憶領域に書き込んでbootドライブに選択すると自作で作った今回のOSが起動する。
しかし、いちいちPCの電源を落としたり入れたりするのは面倒なので仮想マシンを使用して起動確認する。今回は手頃に確認ができる「qemu」をwindowsにインストールして確認する。(VMWare Playerなどを使っても確認はできるが、CPUやメモリなどのハードウェア資源を割り当てる設定がめんどくさいから今回は使用しない。)
※qemuのインストール方法は割愛します
 

8.コマンドプロンプトを開きqemuを以下の構文で実行する。パスは各自違うと思うので確認して絶対パスで指定する。

C:\Users\shadow>”D:\Program Files (x86)\qemu\qemu-system-i386.exe” –cdrom Z:\myos.iso

 

9.上のソースコードを流用した場合、下記のような結果になれば成功。

いろいろ説明は省いてきたが結構長くなってしまった…。
次回の記事はどうするかな… 64bit OSの作成か今回作成したOSにいろいろ機能を追加するか…

Leave a Reply

Your email address will not be published. Required fields are marked *