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

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

1. とにかくやるのだぁ

バイナリエディタはhexeditを利用しました。 本文に従って、選択してコピペを繰り返しつつ168000まで頑張るとイメージファイルができます。

本にはフロッピーディスクに書き込んで、とありますが別にUSBメモリに書き込んでも起動できました。 それでもフロッピーでやりたい場合は秋葉原あたりに行くと良いと思います(2019年1月時点では購入できました)。

ディスクへのイメージの書き込みは次のように行ないました。

  1. 書き込みたいディスクのデバイス名を調べる。具体的には接続する前後でls /dev/sd*の結果を比較すれば良い(以下この結果を/dev/sd●とする)。
  2. sudo dd if=helloos.img of=/dev/sd●

これを起動するためにはBIOSの設定のBoot ConfigurationあたりでLegacy BIOSに切り替える必要があります(2020年にはこれが消えてしまうらしい→参考)。 うまく行けば作成したOSが起動しますが、シャットダウンする方法はないので確認が終わったら電源ボタン長押しなどで電源を切りましょう。

QEMUを利用する場合はQEMUをインストールしてqemu-system-i386 -fda helloos.img。ここで-no-frameというオプションをつけるとウィンドウの枠が消えるので、いい感じのスクショが撮りやすくなります。 そのままの場合と-no-frameをつけた場合、それぞれについて[Alt]+[Prt Sc]で撮ったスクショを載せておきます。

f:id:wisteria0410ss:20190206170617p:plain
枠あり
f:id:wisteria0410ss:20190206170621p:plain
枠なし(-no-frame指定)

なお、QEMUのウィンドウ枠内をクリックするとマウスが吸われますが、[Ctrl]+[Alt]で脱出できます。

[追記(2019/02/10)]-enable-kvmを付けないと今後うまく動かない場面が出てくるかも知れません。13日目参照。

[追記(2019/02/15)]上の方法だと

WARNING: Image format was not specified for 'helloos.img' and probing guessed raw.
         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
         Specify the 'raw' format explicitly to remove the restrictions.

のような警告が出ます。これを出さないようにするには、-fda helloos.img-drive file=helloos.img,format=raw,if=floppyとすれば良いようです。 つまり、エミュレータで実行するコマンドは(メモリサイズを32 MiBに指定するとして)

qemu-system-i386 -m 32 -drive file=helloos.img,format=raw,if=floppy -enable-kvm

となります。

2. 結局何をやったのだろうか?

本文のとおりです。

3. アセンブラ初体験

アセンブラはnaskではなくnasmを使いました。nasm helloos.asm helloos.imgでOK。 またRESB nに関して警告が出ますが、これはtimes n db 0とすれば良いです。

4. もうちょっと書き直してみる

RESB 0x1fe-$times 0x1fe-($-$$) db 0に変更。