前回、Timer Int を動作させようといいましたが、
そもそも、割り込みを使用したことなかったので、
まずは、Keyboard Intを使ってみよう!
で、GDT と、IDTと、PICを設定して、
いざ!!! 実行!・・・・・・・・・・・・・・・・・・・・
うごかねぇっす。 orz.....
いきなり、飛ばしすぎたか・・・まずは、GDTの設定から、
ちゃんと確認しながら進むことにします。
動作したら、ソース公開するっす。もうしばしお待ちを。
2007年10月29日月曜日
2007年10月25日木曜日
IDTを操作してみよう!
やっと、kernelが動作したので、次は、タスクスイッチ!!!!
と言いたいところなのですが、ただ、タスクスイッチするのも何だから、
Timerを実装しようかなぁ。
Timer実装するとなると、割込みが使えないとなぁ。
割込み使うためには、IDT設定しないとなぁ。
ということで、ちゃんと(?) IDT設定して、Interrupt handler 書いて、
Timerを動作させることを次の目標としました。
と言いたいところなのですが、ただ、タスクスイッチするのも何だから、
Timerを実装しようかなぁ。
Timer実装するとなると、割込みが使えないとなぁ。
割込み使うためには、IDT設定しないとなぁ。
ということで、ちゃんと(?) IDT設定して、Interrupt handler 書いて、
Timerを動作させることを次の目標としました。
2007年10月21日日曜日
floppy imageの作成 - その3
やっと、floppy image 作成完了して、kernel bootできました。
忘れぬうちに、手順を書きとめておく。
(1) VMware Player の導入
VMwareのWebサイトより、Windows用のVMware Playerをダウンロード、
インストールします。
(2) QEMU の導入(VMware の Disk Image作成のため)
qemu を ここ から取ってこよう。とってきたパッケージを適当なところへ
解凍すると、中に qemu-img.exe があるはず。
(3) Ubuntu の導入
日本語ローカライズされた VMwareイメージを ここ からダウンロードし、
解凍すれば、 そのまま、VMware Player で実行できます。
(4) Floppy disk image の作成
qemu-img create -f vmdk floppy0.bin 1440
Ubuntu で FAT Formatする。
mkdosfs /dev/fd0
(5) GRUBのインストール
まずは Floppy diskをマウント。
cd ~
mkdir ./floppy
sudo mount -t vfat /dev/fd0 ./floppy
次に、Ubuntu の GRUB をそのまま使っちゃおう。
mkdir ./floppy/boot
mkdir ./floppy/boot/grub
cp /boot/grub/stage1 /boot/grub/stage2 /boot/grub/menu.lst \\
./floppy/boot/grub/.
/usr/sbin/grub
grub> root (fd0)
grub> setup (fd0)
grub> quit
最後に menu.lst の編集。
Ubuntu用のエントリは全て削除して、下記エントリを追加。
# For booting Sample Kernel
title SampleKernel
root (fd0)
boot
(6) Sample Kernel のビルド
ここ に書いてある、multiboot.h、boot.S、kernel.c がソース。
Makefile が無いので、下記のように作成。
TARGET= kernel
MAPFILE= kernel.map
START= 0x100000
CC=/usr/bin/gcc
CFLAGS= -ffreestanding -nostdinc -nostdlib -fno-stack-protector -I.
LDFLAGS= -Ttext $(START) -e start -Map $(MAPFILE)
OBJS= boot.o kernel.o
.c.o:
$(CC) $(CFLAGS) -c $*.c
.S.o:
$(CC) $(CFLAGS) -c $*.S
all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $(OBJS)
clean::
rm -f $(TARGET) $(OBJS) *~
boot.o: Makefile boot.S multiboot.h
kernel.o: Makefile kernel.c multiboot.h
(7) Sample Kernel を Floppy diskへコピー
cp kernel ./floppy/boot/.
(8) Boot
Boot画面はこんなかんじ。
忘れぬうちに、手順を書きとめておく。
(1) VMware Player の導入
VMwareのWebサイトより、Windows用のVMware Playerをダウンロード、
インストールします。
(2) QEMU の導入(VMware の Disk Image作成のため)
qemu を ここ から取ってこよう。とってきたパッケージを適当なところへ
解凍すると、中に qemu-img.exe があるはず。
(3) Ubuntu の導入
日本語ローカライズされた VMwareイメージを ここ からダウンロードし、
解凍すれば、 そのまま、VMware Player で実行できます。
(4) Floppy disk image の作成
qemu-img create -f vmdk floppy0.bin 1440
Ubuntu で FAT Formatする。
mkdosfs /dev/fd0
(5) GRUBのインストール
まずは Floppy diskをマウント。
cd ~
mkdir ./floppy
sudo mount -t vfat /dev/fd0 ./floppy
次に、Ubuntu の GRUB をそのまま使っちゃおう。
mkdir ./floppy/boot
mkdir ./floppy/boot/grub
cp /boot/grub/stage1 /boot/grub/stage2 /boot/grub/menu.lst \\
./floppy/boot/grub/.
/usr/sbin/grub
grub> root (fd0)
grub> setup (fd0)
grub> quit
最後に menu.lst の編集。
Ubuntu用のエントリは全て削除して、下記エントリを追加。
# For booting Sample Kernel
title SampleKernel
root (fd0)
boot
(6) Sample Kernel のビルド
ここ に書いてある、multiboot.h、boot.S、kernel.c がソース。
Makefile が無いので、下記のように作成。
TARGET= kernel
MAPFILE= kernel.map
START= 0x100000
CC=/usr/bin/gcc
CFLAGS= -ffreestanding -nostdinc -nostdlib -fno-stack-protector -I.
LDFLAGS= -Ttext $(START) -e start -Map $(MAPFILE)
OBJS= boot.o kernel.o
.c.o:
$(CC) $(CFLAGS) -c $*.c
.S.o:
$(CC) $(CFLAGS) -c $*.S
all: $(TARGET)
$(TARGET): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $(OBJS)
clean::
rm -f $(TARGET) $(OBJS) *~
boot.o: Makefile boot.S multiboot.h
kernel.o: Makefile kernel.c multiboot.h
(7) Sample Kernel を Floppy diskへコピー
cp kernel ./floppy/boot/.
(8) Boot
Boot画面はこんなかんじ。
2007年10月19日金曜日
floppy image の作成 - その2
昨日のつづきだが、 まずは、 floppy disk image を作成しよう!
これは、qemu-img を使えば簡単なはず。
まずは、qemu を ここ から取ってこよう。
とってきたパッケージを適当なところへ解凍すると、中に qemu-img.exe があるはず。
raw image ならば、下記のように作成する。
qemu-img create floppy0.bin 1440
ここまでは、あっさりと成功したが・・・・問題はこの後。
この、floppy disk image を どーやって FAT formatするのだ???
Linux とかだったら、 mkdosfs とかで楽勝なのだが・・・・・・
Windows の Format って、 disk image file に対しては動作しないだろうし・・・
Cygwin とか導入しちゃうか??? それなら、Linux 入れた方が良さそうだなあ。
とか、ぐちぐち 言っていますが、今後 GRUB をインストールしなきゃいけない
ことを考えると、Linux 入れた方が良さそうですねぇ。
これは、qemu-img を使えば簡単なはず。
まずは、qemu を ここ から取ってこよう。
とってきたパッケージを適当なところへ解凍すると、中に qemu-img.exe があるはず。
raw image ならば、下記のように作成する。
qemu-img create floppy0.bin 1440
ここまでは、あっさりと成功したが・・・・問題はこの後。
この、floppy disk image を どーやって FAT formatするのだ???
Linux とかだったら、 mkdosfs とかで楽勝なのだが・・・・・・
Windows の Format って、 disk image file に対しては動作しないだろうし・・・
Cygwin とか導入しちゃうか??? それなら、Linux 入れた方が良さそうだなあ。
とか、ぐちぐち 言っていますが、今後 GRUB をインストールしなきゃいけない
ことを考えると、Linux 入れた方が良さそうですねぇ。
2007年10月18日木曜日
floppy image の作成
Floppy Disk からカーネル起動するぞ! と意気込んだのは良かったのですが・・・・・・・
いきなり、つまずいてます。。。。 orz
Windows だけだと、いろいろと面倒なんですよねぇ。
準備したい環境は・・・
- デバッグは、QEMU or VMWarePlayer を使用して行う
- Kernel コンパイルは MinGW 使う
- ファイルシステムは FAT12 (floppyだからね)
- Boot loader は GRUB
ということで、最初に GRUB を導入した floppy disk image を作成
したいのだが・・・・・Windowsだと面倒くさい。
作成するには下記の2通りだと思うのだが。。
(1) FAT format した 本物の Floppy disk に GRUBインストールし
その Floppy disk image を吸い出す。
-> 本物の Floppy 使うのって格好わるいよねぇ。
それに、image吸い出すツールが見つからない。。
(2) qemu-img 使って Floppy disk image を作成。
その image に GRUBインストール。
-> imageに対して GRUBインストールが出来ない。。
PC Unix ならば、楽勝なのだが・・・・
ん~、、、、Ubuntuでもインストールしちゃうか?
それも面倒だしねぇ。。。。。悩み中。
---------------------------------------------------
2007.10.19 追記
(1)はあまりに格好悪いので、(2)を採用!
いきなり、つまずいてます。。。。 orz
Windows だけだと、いろいろと面倒なんですよねぇ。
準備したい環境は・・・
- デバッグは、QEMU or VMWarePlayer を使用して行う
- Kernel コンパイルは MinGW 使う
- ファイルシステムは FAT12 (floppyだからね)
- Boot loader は GRUB
ということで、最初に GRUB を導入した floppy disk image を作成
したいのだが・・・・・Windowsだと面倒くさい。
作成するには下記の2通りだと思うのだが。。
(1) FAT format した 本物の Floppy disk に GRUBインストールし
その Floppy disk image を吸い出す。
-> 本物の Floppy 使うのって格好わるいよねぇ。
それに、image吸い出すツールが見つからない。。
(2) qemu-img 使って Floppy disk image を作成。
その image に GRUBインストール。
-> imageに対して GRUBインストールが出来ない。。
PC Unix ならば、楽勝なのだが・・・・
ん~、、、、Ubuntuでもインストールしちゃうか?
それも面倒だしねぇ。。。。。悩み中。
---------------------------------------------------
2007.10.19 追記
(1)はあまりに格好悪いので、(2)を採用!
2007年10月17日水曜日
Grub から自作 kernel起動の例
grub のドキュメントにも載っているが、実際 bootしてみた人がいた。
ちょっと、途方に暮れていたので、とても助かった。
http://d.hatena.ne.jp/Yusuke_Yamamoto/20061002
これは、まず HDD Imageで grub boot環境をつくっておいて、そこから、FDにある、 kernelをロードするのかぁ。
結構面倒。。。。。全部 FD内に収まらないのだろーか?
http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=Grub%A4%F2%BB%C8%A4%C3%A4%BFOS%B3%AB%C8%AF
をっ! これは、FDに全て収める方式ですね。すばらしい、これを真似してみよう!
ちょっと、途方に暮れていたので、とても助かった。
http://d.hatena.ne.jp/Yusuke_Yamamoto/20061002
これは、まず HDD Imageで grub boot環境をつくっておいて、そこから、FDにある、 kernelをロードするのかぁ。
結構面倒。。。。。全部 FD内に収まらないのだろーか?
http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=Grub%A4%F2%BB%C8%A4%C3%A4%BFOS%B3%AB%C8%AF
をっ! これは、FDに全て収める方式ですね。すばらしい、これを真似してみよう!
2007年10月16日火曜日
まずは、環境整備&ブートローダー
まずは、開発環境を整えなくてはならないのだが・・・・・
それよりも先に、ブートローダーについて考えなくてはならない。
?なぜ先ブートローダー? と思われる方もいらっしゃるとおもうので、説明しましょう。
ブートローダーは出来るだけ既存のものを使用しようと思っているのです。
というのも、このブログは OSつくるのが目的であって、ブートローダーをつくるのが目的ではないからです。
よって、出来るだけブートシーケンスを意識せずに済むようなブートローダーを望みました。
そこで、なんとも頼もしいブートローダーに出会います。 その名も・・・・
Grub
A20の Enable も、プロテクトモードへの移行も grub がやっちゃってくれます。
しかも、grub がサポートしているファイルシステムからならば、カーネルをファイル
としてロードが可能なのです。
なんとも、夢のよう!!!!!! が、しか~し、そんなにうまくはいきませぬ。
この、grub、Windows環境だと めちゃくちゃ扱いにくい。だからといって、
grubのためだけに 開発環境を Linuxや、FreeBSDにするのはねぇ。。。。。
うまーいこと、Windowsから、grub 使えないかなぁ。
それよりも先に、ブートローダーについて考えなくてはならない。
?なぜ先ブートローダー? と思われる方もいらっしゃるとおもうので、説明しましょう。
ブートローダーは出来るだけ既存のものを使用しようと思っているのです。
というのも、このブログは OSつくるのが目的であって、ブートローダーをつくるのが目的ではないからです。
よって、出来るだけブートシーケンスを意識せずに済むようなブートローダーを望みました。
そこで、なんとも頼もしいブートローダーに出会います。 その名も・・・・
Grub
A20の Enable も、プロテクトモードへの移行も grub がやっちゃってくれます。
しかも、grub がサポートしているファイルシステムからならば、カーネルをファイル
としてロードが可能なのです。
なんとも、夢のよう!!!!!! が、しか~し、そんなにうまくはいきませぬ。
この、grub、Windows環境だと めちゃくちゃ扱いにくい。だからといって、
grubのためだけに 開発環境を Linuxや、FreeBSDにするのはねぇ。。。。。
うまーいこと、Windowsから、grub 使えないかなぁ。
2007年10月12日金曜日
OSでも作ってみるかなぁ。
”車輪の再発明” なのですが、勉強&趣味を兼ねて OSでも作ってみようかなぁ と思い立ちました。
単なる、思いつきなので、いつやめるかわかりませんが・・・・・・・・
で、まずは、参考になる本が必要なわけで・・・
さすがに、30日じゃぁきびしいが、とても読みやすく、とっつきやすい。
まずは、この HariboteOS をベースに(ぱくるだけだが・・・・)、作っていこう!
登録:
投稿 (Atom)