Ubuntu 18.04.1 LTSでやる 30日OS本 〜3日目〜

Ubuntu 18.04.1 LTSでやる 30日OS本、3日目です。 他の章へのリンクはここにあります。

1. さあ本当のIPLを作ろう〜4. 10シリンダ分を読んでみる

本文のとおりにやる。

5. OS本体を書き始めてみる

Makefileharibote.imgのところを以下のようにしました。

haribote.img: ipl.bin haribote.sys Makefile
    mformat -f 1440 -B ipl.bin -C -i haribote.img ::
    mcopy haribote.sys -i haribote.img ::

6. 〜 8.

はい。

9. ついにC言語導入へ

Cコンパイラgccを使いました。

C言語ではHLTが使えない!」←__asm__("HLT");

機械語にするプロセスは次のように変更しました。 まずリンカスクリプトとしてhttps://vanya.jp.net/os/haribote.html#gcchrbの「gccで.hrb形式に対応」にあるOS用リンカスクリプトをお借りしました。 これをos.ldsとして保存し、

$ gcc -fno-pie -march=i486 -m32 -masm=intel -nostdlib -T har.lds bootpack.c -o bootpack.hrb

としました。-masm=intelすればintel syntaxが使えるので万が一__asm__することになっても安心です(?)。これで一気に.hrbができます。 あとはこれとasmhead.binを単純につなげば良いのでcat asmhead.bin bootpack.hrb > haribote.sysとすると目的のファイルが得られます。

10. とにかくHLTしたい

naskfunk.nasは(naskを使ってないので)nasmfunk.asmに改名し、[~~~]となっている行をすべて削除して[SECTION .text]の代わりにsection .textを置きました。 これをnasm -felf nasmfunc.asm -o nasmfunc.o -l nasmfunc.lstアセンブルします。[FORMAT ~~~]の役割はオプションの-felfが果たします。 あとはbootpack.hrbを作るときのgccbootpack.cと一緒にnasmfunc.oを渡してやれば良いです。