2007年10月29日月曜日

Keyboard Intを動作させよう

前回、Timer Int を動作させようといいましたが、

そもそも、割り込みを使用したことなかったので、

まずは、Keyboard Intを使ってみよう!

で、GDT と、IDTと、PICを設定して、



いざ!!! 実行!・・・・・・・・・・・・・・・・・・・・



うごかねぇっす。 orz.....

いきなり、飛ばしすぎたか・・・まずは、GDTの設定から、

ちゃんと確認しながら進むことにします。

動作したら、ソース公開するっす。もうしばしお待ちを。

2007年10月25日木曜日

IDTを操作してみよう!

やっと、kernelが動作したので、次は、タスクスイッチ!!!!



と言いたいところなのですが、ただ、タスクスイッチするのも何だから、

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画面はこんなかんじ。

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 入れた方が良さそうですねぇ。

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)を採用!

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に全て収める方式ですね。すばらしい、これを真似してみよう!

2007年10月16日火曜日

まずは、環境整備&ブートローダー

まずは、開発環境を整えなくてはならないのだが・・・・・

それよりも先に、ブートローダーについて考えなくてはならない。

?なぜ先ブートローダー? と思われる方もいらっしゃるとおもうので、説明しましょう。



ブートローダーは出来るだけ既存のものを使用しようと思っているのです。

というのも、このブログは OSつくるのが目的であって、ブートローダーをつくるのが目的ではないからです。

よって、出来るだけブートシーケンスを意識せずに済むようなブートローダーを望みました。

そこで、なんとも頼もしいブートローダーに出会います。 その名も・・・・

Grub

A20の Enable も、プロテクトモードへの移行も grub がやっちゃってくれます。

しかも、grub がサポートしているファイルシステムからならば、カーネルをファイル

としてロードが可能なのです。

なんとも、夢のよう!!!!!! が、しか~し、そんなにうまくはいきませぬ。

この、grub、Windows環境だと めちゃくちゃ扱いにくい。だからといって、

grubのためだけに 開発環境を Linuxや、FreeBSDにするのはねぇ。。。。。

うまーいこと、Windowsから、grub 使えないかなぁ。

2007年10月12日金曜日

OSでも作ってみるかなぁ。

”車輪の再発明” なのですが、勉強&趣味を兼ねて OSでも作ってみようかなぁ と思い立ちました。

単なる、思いつきなので、いつやめるかわかりませんが・・・・・・・・



で、まずは、参考になる本が必要なわけで・・・

これ
さすがに、30日じゃぁきびしいが、とても読みやすく、とっつきやすい。
まずは、この HariboteOS をベースに(ぱくるだけだが・・・・)、作っていこう!