🙆‍♀️

「ゼロからのOS自作入門」の リベンジ Part1🍊

1 min read

最初に

「ゼロからOS自作入門」をいつも初回ページだけやるが、めんどくさくて毎回
途中で挫折をしていたが、がんばる・・・
※ Part1 だからって、1日目しかやっていないわけではないよ・・・

やっていく

環境構築

https://omiomiso.hatenadiary.jp/

共有フォルダ機能を使用して、ホストOS上に存在するソースコードをビルドするとすると
カーネルだけがなぜかうまくいかないので、ゲストOS側で完結させることをおすすめ

第1章 PCの仕組みとハローワルド

めんどくさいから簡単な方法でやっていく

Windows の Bz で Hello world のコードを書いていく。
出来た hello.efi(実行ファイル) を実行する(UEFI BIOS がそのファイルを読みっとて実行してくれる)
※ 本に書いてあったバイナリエディタは、個人的には使いにくかった…

$HOME/osbook/devenv/run_qemu.sh hello.efi

<C言語版で実施する場合>

 clang -target x86_64-pc-win32-coff -mno-red-zone -fno-stack-protector -fshort-wchar -Wall -c hello.c 
 lld-link /subsystem:efi_application /entry:EfiMain /out:hello.efi hello.o
 $HOME/osbook/devenv/run_qemu.sh hello.efi

lld-link は、coff形式[1]のものを、PE形式[2]のファイルを出力するためのもの

hello.efi の中身について

CPUが読むための命令

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:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

UFEI BIOS について

そもそも BIOS とは?

BIOSは、Basic input Output systemの略。基本的な入出力機能、特にOS起動前にコンピュータ内部を初期化したり、ブートーローダ(OS)を呼び出す。
今回作ったのは、UEFI アプリケーション。

https://www.pc-koubou.jp/magazine/1257

話を戻す

UFEI BIOS は、拡張可能なファームウェア

実行ファイルが実行される大まかな流れ(ざっくり)

  1. 電源起動
  2. CPUがBIOS起動
  3. BIOSの初期化
  4. BIOSは実行ファイルを見つけ、メインメモリへ読出し
  5. CPUがBIOSを中断し、項目4で読みだしたファイルを実行し、開始する
脚注
  1. COFF形式はオブジェクトファイル形式の一式。PE形式ファイルを作るための中間生成物 ↩︎

  2. 機械語プログラムからなる実行ファイルのための形式で、Windows標準。Linux は, ELF形式(ELFは、オブジェクトファイル形式、実行ファイル形式両方使える) ↩︎

Discussion

ログインするとコメントできます