0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゼロからのOS自作入門 メモ #1

Posted at

前置き

本記事は「ゼロからのOS自作入門」のメモになります。
仕事上OSの知識があってもいいなと思って、取り組むことにしました。
各章に対し、1記事をOutputする予定です。

メモ本編

目標

Hello WorldをUEFIで表示させる。

やったことメモ

まず、前提として開発環境の用意が必要。

ほかの環境でも使っていたもの

WindowsならWSL2を使うと新しいPCを用意しなくてもよくて楽。
BZEditorを導入。BOOTをBinaryで書くため。

本環境に必要なもの

QEMU

X Serverのインストールがまず必要。以下でダウンロードできる。
https://sourceforge.net/projects/vcxsrv/
ダウンロードしたインストーラを起動し、そのままインストール。
いったん起動し、以下の通りにする。

  • GUIの選択では、Multiple Windowsを選択
  • GUIアプリを起動するか問われるので、Start No cliaentを選択
  • Extra SettingのDisable Access ControlにCheckを入れる
  • 起動するよと言われるので、そのまま完了
  • Windowsのセキュリティ画面が出てくるので、「パブリックネットワークでの接続のところにCheckを入れ、アクセス許可をする <-実際やったときは、見逃していた

quemをインストール。ここは特に何も情報がなかった。

sudo apt install qemu-utils
sudo apt install quem-system-x86

Build環境などの用意

GithubのMikanOSのところにあるレポジトリを、指示に従ってダウンロードする
https://github.com/uchan-nos/mikanos-build
行うのは以下の通り

sudo apt update
sudo apt install git (gitをインストールしていればやらなくてよい)
cd #HOME
git clone https://github.com/uchan-nos/mikanos-build.git osbook

開発ツールをインストールする。

sudo apt install ansible
cd $HOME/osbook/devenv
ansible-playbook -K -i ansible_inventory ansible_provision.yml

isalというコマンドがインストールされ、HOME/edk2というディレクトリが生成される。
HOME/.profileDISPLAY環境変数が追加される(こともある)ため、反映させる。

source $HOME/.profile

これ以降は実行はしたが、今は必要なさそうだった。

実際に行ったこと

Boot Loaderをバイナリで記述する。
今回は本の通りにBZ Editorを使った。
400-420の部分がHello, World!という文字列に対応している。

00:0000 4D 5A 00 00 00 00 00 00-00 00 00 00 00 00 00 00
*
00:0030 00 00 00 00 00 00 00 00-00 00 00 00 80 00 00 00
*
00:0080 50 45 00 00 64 86 02 00-00 00 00 00 00 00 00 00
00:0090 00 00 00 00 F0 00 22 02-0B 02 00 00 00 02 00 00
00:00A0 00 02 00 00 00 00 00 00-00 10 00 00 00 10 00 00
00:00B0 00 00 00 40 01 00 00 00-00 10 00 00 00 02 00 00
00:00C0 00 00 00 00 00 00 00 00-06 00 00 00 00 00 00 00
00:00D0 00 30 00 00 00 02 00 00-00 00 00 00 0A 00 60 81
00:00E0 00 00 10 00 00 00 00 00-00 10 00 00 00 00 00 00
00:00F0 00 00 10 00 00 00 00 00-00 10 00 00 00 00 00 00
00:0100 00 00 00 00 10 00 00 00-00 00 00 00 00 00 00 00
*
00:0180 00 00 00 00 00 00 00 00-2E 74 65 78 74 00 00 00
00:0190 14 00 00 00 00 10 00 00-00 02 00 00 00 02 00 00
00:01A0 00 00 00 00 00 00 00 00-00 00 00 00 20 00 50 60
00:01B0 2E 72 64 61 74 61 00 00-1C 00 00 00 00 20 00 00
00:01C0 00 02 00 00 00 04 00 00-00 00 00 00 00 00 00 00
00:01D0 00 00 00 00 40 00 50 40-00 00 00 00 00 00 00 00
*
00:0200 48 83 EC 28 48 8B 4A 40-48 8D 15 F1 0F 00 00 FF
00:0210 51 08 EB FE 00 00 00 00-00 00 00 00 00 00 00 00
*
00:0400 48 00 65 00 6C 00 6C 00-6F 00 2C 00 20 00 77 00
00:0410 6F 00 72 00 6C 00 64 00-21 00 00 00 00 00 00 00
*
00:0600

確認のために、Check sumを使う

sum BOOTX64.EFI

これで12430が出てこればOK.
なお、WSLで行う場合は、BOOTLOADERをUSBに移す必要はない。(後々出てくるのかもしれないが)
一般的に、WSLはWindowsを/mnt/cでマウントしているので、そこからBOOTX64.EFIを引っ張ってくる。
作業ディレクトリ直下においておく。
その後、書籍の通りにコマンドを実行する。
qemu-system-x86-64を実行するShellを用意してくれるので、それを実行するだけでよくなる。

後半は、C言語でハローワールドする。
先ほどのバイナリのデータ自体はEfiMain()で実装されたものだとネタ晴らし。
clanglld-linkを使って作れるという実践を行う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?