osdev-jp の紹介

uchan は2019年現在「osdev-jp」というコミュニティを運営しています。このコミュニティは「30 日でできる!OS 自作入門」の読者などが集まっていて、OS や低レイヤ技術に関する話題を扱っています。もしよかったらそちらも覗いてください!

https://osdev.jp/

普段は主に Slack で会話してます。Slack への参加申請やその他ご質問は Twitter @uchan_nos まで!

uchan について

「30 日でできる!OS 自作入門」の校正を手伝った人です。出版当時は高校生、今は IT 系の会社でソフトウェアエンジニアをしています。

以外、とても古い記事ですが、記念で残してます。

MinGW(C++言語使用)ではりぼてをコンパイルしよう

といっても、数個の実行ファイルをMinGWから抜き出してtolsetにコピーするだけ(基本的には)なのですけど。

本格的にC++を使うなら純粋仮想関数への対応やグローバル変数コンストラクタなどへの対応が必要です。スライド書きました。 C++でできる!OS自作入門
以下の記述は古いですが、一応残しておきます。 (2014/01/16追記)

必要なファイル

インストール

  • MinGW-5.0.2.exe
    • 実行してDownload onlyを選択(インストールしたい人はご自由に。)
    • MinGW base toolsとg++ compilerを選択
    • binutils-2.15.91-20040904-1.tar.gzとgcc-g++-3.4.2-20040916-1.tar.gzを解凍
    • bin/as.exe, bin/c++.exe, libexec/gcc/mingw32/3.4.2/cc1plus.exeをz_toolsにコピー

Makefile設定

  • app_make.txt, haribote/Makefile
    • 以下のように変更・追記
      #INCPATH  = ../../z_tools/haribote/
      INCPATH  = ../../z_tools/haribote
       ・
       ・
      #CC1PLUS  = $(TOOLPATH)cc1plus.exe -I$(INCPATH) -Os -Wall -quiet
      CPP      = $(TOOLPATH)c++.exe -I$(INCPATH) -Os -Wall -B$(TOOLPATH) -c
       ・
       ・
      %.obj : %.cpp ../apilib.h Makefile ../app_make.txt
      	$(CPP) -o $*.obj $*.cpp
      こんな感じに変更する
    • これで完了です

注意)必要なら各種ヘッダに

extern "C" {
 ・
 ・
}

と書いたりしてくださいね。そこは各自で。

C言語の罠

  • 演算子の優先順位
    int a = 0xaa;
    if ( a & 0xff == 0xaa ) {
      printf("a & 0xff == 0xaa !!");
    }
    というコードで、実は
    printf("a & 0xff == 0xaa !!");
    は実行されない。
    • 解答
      if ( a & 0xff == 0xaa )
         ↓
      if ( (a & 0xff) == 0xaa )

VESA2.0が起動したノートPC情報募集

なんで募集するのか。それは、はりぼてOSで高解像度&多色化改造をしても、せっかく買った実験用ノートPCがVESA1.2だったりするとがっくりってことがあるので、そんなことを少しでも回避出来るように情報を集めようと。
結局、僕がノートPCを買うときの参考にしたいわけです(すみません)。

ということで、もし「VESA2.0対応のノートPC」がありましたらここに投稿お願いします。

  • 募集する規格
    • VESA2.0対応であること。(「はりぼてOS」が高解像度(320x 200より高い解像度)で動けばVESA2.0対応と見なして良い)
    • CD-ROMドライブは無くても良い。
    • フロッピーディスクドライブがあると良い。
    • 現在中古PC市場に出回っているとなお良い。

動作報告欄

  • ノートPC買ってしまったので報告。「はりぼてOS」起動&動作確認。VersaProNX VA50J -- uchan 2007-03-11 (日) 08:03:23
  • HariboteOSがXGAで起動OK。CDやFDはウルトラベースX2使用で使えます。機種名:IBM ThinkPad X22 -- mac 2007-03-11 (日) 14:18:24

コメントお名前NameLink

IPLを1から書いててはまったバグ(というか作成ミス)

SSに0x100, SPに0を入れていた。→SSに0,SPに0x1000(0x100×16)を入れたら直った。つまり、スタックって設定した番地からどんどん引き算して使うから、普通のセグメントと逆だと勘違いしてた。(冷静に考えれば全然違うのにね。)

OS開発にQEMUのデバッグモードを活用しよう

OSを作っていると、AXやDSなどのレジスタの中身や、メモリの内容を表示したいときが有ります。そんなとき、QEMUが使える環境なら、いとも簡単に実現できます。

やり方:
QEMUが起動したらCtrl + Alt + 2を押すと「QEMU 0.6.1 monitor ...」と1行目に書かれた画面になります。 そこがデバッグモード(名称は僕が考えました。正しくは知りません)の画面になります。書かれたとおり「help」と入力すると、使えるデバッグ用のコマンドがずらっと出てきます。

以下は僕がよく使うコマンド

コマンド意味オプションオプション補足
x /fmt addraddrアドレスのメモリの内容を表示/fmt/b:1byte表示 /h:2byte表示 (/bx, /hxとすると、強制的に16進数表示モードになります)
/i:アセンブラ命令表示モード(mov %ax,%dsなどと表示してくれて便利)
info subcmd様々な情報表示subcmdregisters:レジスタの中身を一覧表示

ここの「3.5 QEMUモニター 3.5.1 コマンド 」に詳しい解説がありました。(2006/10/17追記)

VMwareでharib18dのcrack1を起動してみるテスト

QEMUでcrack1をやると、QEMUのバグのせいでcrack1が正常終了し、dirコマンドも正常に打てます。繰り返しますがQEMUのバグです。
んで、VMwareでやったらどうなるのかなぁと思って(実機でやる勇気は無いです。)VMwareで初号機起動実験crack1起動実験をしてみました。

結果:
crack1と入力してEnterを押すと、VMwareのメッセージボックスが開き、

*** 仮想マシン カーネルスタック障害(ハードウェアリセット) *** ……

などと書かれていました。
OKボタンを押したら強制的にOSが再起動しちゃいました。恐るべしcrack1! (悪さをさせないように改造したら余計被害が大きくなる典型(?))
VMwareはQEMUより細かいところまで行き届いているなぁ。

VMwareでharib18eのcrack1を起動してみるテスト

QEMUだとcrack1を起動したところで何のメッセージも出ませんが、VMwareで実験をすると

0x0D :
 General Protected Exception.

キターって感じです。一般保護例外という、とてつもなく致命的なエラーが表示されて喜ぶのって、結構特殊だと思ったり(笑)

こめんと+α

  • だって一応商品ですからね -- 名無しさん 2006-03-25 (土) 22:14:27
  • C++で作ってみました。 http://d.hatena.ne.jp/Bayside/20060518/p1 -- bayside 2006-05-18 (木) 14:26:28
  • vmware.zipのリンクで404食らいましたよw -- Flast 2007-06-23 (土) 07:32:27
  • すんませんです。自宅サーバーがダウンしてデータ消失しました。 -- uchan 2007-06-23 (土) 17:18:24

コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2019-02-01 (金) 09:28:19 (2506d)