非情報系インフラエンジニアの情報系お勉強

OS自作、ネットワーク、セキュリティの備忘録

OS自作入門 0.5日目/30日(環境構築WSL、QEMU)

1.はじめに

0日目では、VMware上でOSを動作させていたが、今回は、WSL上でimgファイルまで作成し、実行はWindows上で実行する環境を構築する。WSL上完結したかったが、QEMUを動作させることができなかった。
※WSLを導入した理由は、個人の自己満足及びLinuxのコマンドの学習のためであり入れる必要はない

2.WSLの導入とツールのインストール

下記サイトを参考にWSLとWSL上にubuntuを導入する。 www.atmarkit.co.jp

WSL上で下記のツールをインストール

$ sudo apt install nasm

3.WindowsQEMUのインストール

下記サイトからQEMUをダウンロード www.qemu.org

環境変数のPathにQEMUをインストールしたフォルダパスを追記
※自動でパスを通してくれないため

4.アセンブリ&実行

使用するソースプログラムは projects\01_day\helloos2\helloos.nas
アセンブルには nasm を使用するので拡張子を .asm へ変更
そのままアセンブリするとエラーになるため、ソースファイルの下記命令を変更

RESB を TIMES へ変更
例.RESB 18 → TIMES 18 DB 0

TIMES命令とは?
TIMES n 命令・・・n回命令を繰り返す
例はDBを18回繰り返す意味

RESB 0x1fe-$ → TIMES 0x1fe-($-$$) DB 0
0x001feまでを0x00で埋める命令

NASMには2つの特別なシンボル($、$$)があり、
$は使用された行の先頭アドレスを、$$は使用されたセクションの先頭アドレスを意味する。
がよくわからない。。。
$及び$$の意味について詳しく知りたい場合は下記を参照

NASM - The Netwide Assembler

環境が整ったので、下記コマンドをWSLで実行

$ nasm -o helloos.img helloos.asm

helooos.imgが出力されるので、Windwos上で

>qemu-system-i386 helloos.img

WARNING出力するがとりあえずOK

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.

動作確認完了。