[PR]当たる!無料占いで仕事鑑定:大人気!無料占い『スピリチュアルの館』

32 bitモードに移行しても、nasm で開発していたのでは 労力は軽減されません。
できれば、gcc などのコンパイラを利用したいところです。
では、具体的にどのようにすれば利用できるのでしょうか。
gcc が出力するコード自体は通常のマシン語です。
WindowsやLinuxといった特定のOS以外では動かない、 ということはありません。
OSに依存するのはライブラリや例外処理などです。
したがって、これらを使わなければ 独自カーネルの開発にも利用できます。

gcc が出力する実行ファイルは通常、 ヘッダ、コード、データなどを1つのファイルにまとめたものです。
通常、OS はヘッダを解析して実行ファイルを読み込み、 再配置など必要な追加処理を適用してからエントリポイントにジャンプします。
しかし、 カーネルの読み込みはアセンブラで書く必要がありますので、 複雑なヘッダ処理などは極力避けたいところです。
複雑な処理を避けるには、次のようにします。


後はこれらの条件を満たすように、gccのマニュアルなどを参照して コマンドラインオプションを記述します。
例えば MinGW や cygwin の場合はリンク時に次のコマンドを実行します。

ld で一度Windowsバイナリ(pei-i386)を出力し、 その後objcopyで生のバイナリに変換しています。
mystartup.o は先頭にカーネルのエントリポイントを含む .o ファイルです。
mykernel にはカーネルのファイル名を指定し、 ...の部分には必要な .o ファイル名を列挙します。
ldで使うldscriptファイルは、メモリのレイアウトを細かく指定するものです。
ここでは次のものを与えます。
ファイル中で作成したシンボル「bss_end」は、gccから見えます。



2005-8-30: ページ作成 (最終更新)
Copyright (C) 2005 hoverkid, all rights reserved.
[PR]看護師の好条件求人なら:転職活動不安ですか?なんでも相談OK!