Ubuntu 18.04.1 LTSでやる 30日OS本 〜3日目〜
Ubuntu 18.04.1 LTSでやる 30日OS本、3日目です。 他の章へのリンクはここにあります。
1. さあ本当のIPLを作ろう〜4. 10シリンダ分を読んでみる
本文のとおりにやる。
5. OS本体を書き始めてみる
Makefile
のharibote.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言語では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
を作るときのgccにbootpack.c
と一緒にnasmfunc.o
を渡してやれば良いです。