読者です 読者をやめる 読者になる 読者になる

tatsumack blog

エンジニアによる雑記です

はりぼてOSをNASM・GCCで動かす(Mac OSX)

「30日でできる!OS自作入門」を読んだ。

30日でできる! OS自作入門

30日でできる! OS自作入門

この本で開発する「HariboteOS」は作者の独自ツールを使って動かしているが、GNUのツール群で置き換えてビルドできるようにしてみた。

環境

Mac OSX El Capitan(10.11.2)

NASM(Netwide Assembler)に置き換える

作者独自ツールのNASKをNASMに置き換える。
主要なアセンブラとして、NASMの他にGAS(GNU Assembler)が挙げられるが、GASの構文はNASKと大きく異なるので、NASMで置き換えることにした。
参考: Linux のアセンブラー: GAS と NASM を比較する

下記のページに記載のある通り、置き換えをすればアセンブラできるようになる。
http://hrb.osask.jp/wiki/?tools/nask

対応コミット
Replace nask with nasm · tatsumack/HikariOS@877ec9d · GitHub

GCC

C言語で実装されたファイルも作者の独自ツールを使ってコンパイルされていたので、GCCに置き換えてみた。

GCCのビルド

hrb形式のファイルを作成するためには、リンカスクリプトを作成しリンカに渡す必要があるが、
Mac OSXのデフォルトのリンカ(ld)はリンカスクリプトを受け付けるオプションがないので、クロスコンパイラなGCCをビルドする必要がある。
ビルド手順についてはQiitaにまとめた。
qiita.com

その他にやったことの箇条書き

・nasmの出力形式をwin32からelfに変更
・.hrb形式のリンカスクリプト作成
・naskfunc.nasの関数のシンボル名のprefixの_を削除
・色々とライブラリがないので、自作OS本付属のomake/tolsrc/go_0023s/golibcから静的ライブラリを作成し、リンクする
・__builtin_stdarg_startを__builtin_va_startにrename

対応コミット
Replace gocc with gcc · tatsumack/HikariOS@ab4b5d4 · GitHub