ゼロからのOS自作入門 ubuntu on Mac [環境構築,第1章]
「ゼロからのOS自作入門」を購入したので,OS初心者がとりあえずmacで頑張ってみる.
enviroment
- MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)
- Processer 2.4 GHz Quad-Core Intel Core i5
- Memory 16 GB 2133 MHz LPDDR3
- Graphics Intel Iris Plus Graphics 655 1536 MB
- macOS Big Sur Version 11.2.3 (2021/08/25 時点)
参考になりそう
参考サイトをもとに,EDK IIというものから準備してみる.git checkout
はブランチがなかったので無視した.マージされた?
makeできたっぽい
$ cd $HOME
$ git clone https://github.com/tianocore/edk2.git
$ cd edk2
$ git submodule init
$ git submodule update
$ cd BaseTools/Source/C
$ make
:
gcc -o ../bin/DevicePath DevicePath.o UefiDevicePathLib.o DevicePathFromText.o DevicePathUtilities.o -L../libs -lCommon
Finished building BaseTools C Tools with HOST_ARCH=X64
「mikanos-build リポジトリの準備」も完了した.
次にmac.patch
を作っていく.これは差分を見て実装するってことかな?
そのままコピペして実行.ちょっと怖い.
% patch -p1 < mac.patch
patching file devenv/make_image.sh
patching file devenv/mount_image.sh
patch unexpectedly ends in middle of line
patch: **** malformed patch at line 46:
brewでqemu
からのllvm
,nasm
をインストール.
llvmインストールしたらpath通せと出たので,pathを通す.
To use the bundled libc++ please add the following LDFLAGS:
LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"
llvm is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have llvm first in your PATH, run:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
For compilers to find llvm you may need to set:
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
For compilers to find llvm you may need to set
はもしかしたらmacのcompilerと衝突する可能性があるからexport
しといた方がいいかもってことかな?
見つけられなかった時に入れるか
dosftools
とbinutils
をインストール
binutils
でpath通せと出たので通す.
==> binutils
binutils is keg-only, which means it was not symlinked into /usr/local,
because Apple's CLT provides the same tools.
If you need to have binutils first in your PATH, run:
echo 'export PATH="/usr/local/opt/binutils/bin:$PATH"' >> ~/.zshrc
For compilers to find binutils you may need to set:
export LDFLAGS="-L/usr/local/opt/binutils/lib"
export CPPFLAGS="-I/usr/local/opt/binutils/include"
「2.2 EDK II でハローワールド」をビルドする
で,git checkout osbook_day02a
としてるのは何故なんだろう.そのブランチなさそうなので,無視していいかな.
とりあえずマージされたと信じて無視する.「2.2 EDK II でハローワールド」をビルドする
のシンボリックシンクを設定してsource
コマンドを実装するところまでできた.
% ln -s ~/Documents/selfos/mikanos/MikanLoaderPkg .
% source edksetup.sh
Using EDK2 in-source Basetools
WORKSPACE: /Users/kanekou/edk2
EDK_TOOLS_PATH: /Users/kanekou/edk2/BaseTools
CONF_PATH: /Users/kanekou/edk2/Conf
Copying $EDK_TOOLS_PATH/Conf/build_rule.template
to /Users/kanekou/edk2/Conf/build_rule.txt
Copying $EDK_TOOLS_PATH/Conf/tools_def.template
to /Users/kanekou/edk2/Conf/tools_def.txt
Copying $EDK_TOOLS_PATH/Conf/target.template
to /Users/kanekou/edk2/Conf/target.txt
Conf/target.txt
の設定をイジイジ.その後$build
を実行.
ファイルできてるか確認.
% ls $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
/Users/kanekou/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
おおお,できてる!
QEMUで実行する.
% $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
+ '[' 1 -lt 1 ']'
++ dirname /Users/kanekou/osbook/devenv/run_qemu.sh
+ DEVENV_DIR=/Users/kanekou/osbook/devenv
+ EFI_FILE=/Users/kanekou/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
+ ANOTHER_FILE=
+ DISK_IMG=./disk.img
+ MOUNT_POINT=./mnt
+ /Users/kanekou/osbook/devenv/make_image.sh ./disk.img ./mnt /Users/kanekou/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
+ '[' 3 -lt 3 ']'
++ dirname /Users/kanekou/osbook/devenv/make_image.sh
+ DEVENV_DIR=/Users/kanekou/osbook/devenv
+ DISK_IMG=./disk.img
+ MOUNT_POINT=./mnt
+ EFI_FILE=/Users/kanekou/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi
+ ANOTHER_FILE=
+ '[' '!' -f /Users/kanekou/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi ']'
+ rm -f ./disk.img
+ qemu-img create -f raw ./disk.img 200M
Formatting './disk.img', fmt=raw size=209715200
+ mkfs.fat -n 'MIKAN OS' -s 2 -f 2 -R 32 -F 32 ./disk.img
/Users/kanekou/osbook/devenv/make_image.sh: line 23: mkfs.fat: command not found
うそん,怒られた.
https://zenn.dev/kanekou/scraps/7d37b75d076228 にあるように,binutils
が他のライブラリのコンパイル時に影響を及ぼすので消した.
これ,できればmacに入れたくないなあ.今までとは別のアプローチでできないか模索してみよう
vmでubuntu起動してうまくできないかな?やってみよう.
macで直接動かすのは一旦やめて,vmで始めから試してみる.
virtual boxで環境を構築しよう
ここからダウンロード
仮想マシンの作成
そのままです.
以下もそのまま.ハードディスクの容量迷ったけど,あと200GBあるから大丈夫と思って12GB確保した.
次にUbuntuのisoイメージファイルをダウンロードする.
現時点の最新版(2021/09/01)は20.04.1 LTS
なのでこれを利用する.
ダウンロードした.
virtual boxのstartボタンを押してみると,Kernel driver not installed (rc=-1908) Make sure the kernel module has been loaded successfully.
,というエラーが発生.
secirity & privacyで許可を取ればいいらしい
再起動しスタートボタンを押すとディスクの選択画面まで進んだ
ディスク選択画面でAddボタンを押すとクラッシュする.
Failed to open a session for the virtual machine mikanos.
The VM session was aborted.
Result Code: NS_ERROR_FAILURE (0x80004005)
Component: SessionMachine
Interface: ISession {c0447716-ff5a-4795-b57a-ecd5fffa18a4}
setting -> strageで先にディスクを選択しておくか
ディスク選択でubuntuを指定し,Startボタンを押すとうまく起動した.
あとはこのサイトを参考にインストールしてみる.
keyboard設定では,usキーボードを使用しているのでEnglishを指定した.
日本語入力なくても問題ないと思う(多分)
問題なく起動した
スナップショットの作成まで進んだ.
設定の確認まで終えた.
最後にmacとubuntuの共有フォルダの設定を調べる
こちらのサイトを見て共有フォルダを設定した.
自分で適当に作って良い
後は↓の通りに設定する
設定した.
HELLO WORLD✋
$HOME/osbook/devenv/run_qemu.sh
スクリプトがEFIファイルを実行する上で便利
一生終わった! 章ごとにscrap書いていこうと思うのでcloseします