OS自作本
https://scrapbox.io/files/67dedd45ac9aff4eb23094cf.jpg
これ
2025-03-20
大学生なのにOSを作った経験が無い..??それはいけない()と思い、急いで進める
まず環境を構築しないと毎日ちょっとずつ進めるということが出来ないので環境構築が急務である
毎回1章3節のバイナリをUSBに書き込んで実機で動かすところが動かずに「やめた!」を繰り返しているのでそこは飛ばしてエミュで進める。
そもそもUSB持ってないし。
https://scrapbox.io/files/67decfe3603442c6caf6dbff.png
よくわからんが
cat /etc/os-release
が
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
なので、
$ cd osbook
$ git checkout 8d4882122ec548ef680b6b5a2ae841a0fd4d07a1
した。
ansible初めて使ったなーー
terraformとansibleの違いいまいちわかってない。リソースの確保とかVMの設定とかがterraformでその上で動くソフトウェアの構成がansibleのイメージはある。
Clang:「クラン」って読むんだよねーー
EDK IIとは????
## とりあえずHello, world!
https://scrapbox.io/files/67decff0d5d6537fa8e9ab09.png
Hello, world!が出たことも嬉しいけど、WSLg何気に初めてで感動
(1章を読み進める)
## UEFIアプリ
- SDK を使わない
- gnu-efi
- EDK II
gnu-efi は UEFI API を叩くアプリケーションを作るためのものです。使い方が結構シンプルなようで、これを用いたサンプルを多く見かけます。ただ、命名規則 や ABI が UEFI の公式とはちょっと違ったり、UEFI で規定されている API のうちよく使うものしか実装されてなかったりして、使いこなすうちに物足りなくなることもあると教えてもらいました。gnu-efi については id:tnishinaga さんの記事 gnu-efiを使ってAARCH64/ARM64のUEFIサンプルアプリを動かしてみる が参考になるでしょう。 EDK II は元々、UEFI の開発に深くかかわっている Intel が作っていた SDK です。gnu-efi が「UEFI アプリケーション」専用なのに対し、EDK II は UEFI アプリはもちろん、周辺のライブラリや、UEFI ファームウェアそのものを開発するための SDK という役割も持っており、超高機能です。高機能ゆえに UEFI アプリを作るという目的のためには複雑すぎてとっつきにくい印象があります。が、フル装備の SDK ですから、慣れておけば後々困ることもないと思います。ということで、この記事では EDK II への入門を目指します。 あーーー「EDK IIはUEFIアプリを作るSDK」なのか!!理解した
てか、What does SDK stand for??
あーーSoftware Development Kitか
うぇーいおもしろそう
進振りの参考にしよう
必要な物は PE32+ executable を作るためのクロスコンパイラです。
## 1.7 UEFI BIOSによる起動
## 1.9 C言語でハローワールド
### 気づいたこと
普段CやC++使うときは #include <stdio.h>や、#include <bits.h>などしている。これらはOSが提供している機能に依存している(推測。ほんと?要調査)ので、OS自体を作るときには使えない。が、逆に言うと、一切依存の無いCプログラムは一切依存の無い機械語を生成できる(=トラストアンカー的なものになれる)。C言語はコンパイラで機械語に変換されるので当たり前なのだが。そのすごさを理解した。なるほどこれはPythonには出来ない芸当(Rustにはできるのか?)。今まで俺は、#includeの無いC言語でなにが出来るねんと思っていた。
この関数は、普通のプログラミングで登場するmain()と同じように、プログラムが起動したときに最初に実行される関数です。UEFIアプリケーションだというのをわかりやすくするためにこの名前にしてみました。
main()じゃなくていいの??
mainじゃなきゃいけないと習ったのだが。
UEFIの仕様を読めばわかりそう
「してみました」←好きに決められるの?
この関数の中でも「SystemTable->ConOut...」という1行が、
-> (アロー演算子)
https://scrapbox.io/files/67ded00679619e980e230424.png
あーーなるほど(*構造体ポインタ型変数).メンバ名 = 構造体ポインタ型変数->メンバ名 なのか
C言語自体の勉強が足りない
## コラム1.1 PEとCOFFとELF
はじめ、
機械語はCPUが直接実行できる
機械語はCPU依存のものなのだな
同じCPU(例えばIntel Core)で異なるOS(Win,Mac,Linux)を動作させられる
なのに、機械語のファイル形式はOSによって違うの!?
となったが、
動画や音声ファイルの「コンテナ」と「コーデック」の関係に近いのかなと解釈した。
例)mp4コンテナの中にH.264コーデックの映像とAACコーデックの音声が入っている
↕
例)PEというコンテナに、x86-64CPU用の機械語が入っている
2025-03-22
## 2.1 EDK II入門
EDK IIはもともとIntelがUEFIとその周辺のプログラムを実装し、それが後にオープンソースとして
長い文章をスマホで打っていると途中で文字が