Closed32

ゼロからの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からのllvmnasmをインストール.
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しといた方がいいかもってことかな?
見つけられなかった時に入れるか

dosftoolsbinutilsをインストール
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で始めから試してみる.

仮想マシンの作成

そのままです.


以下もそのまま.ハードディスクの容量迷ったけど,あと200GBあるから大丈夫と思って12GB確保した.


ダウンロードした.
virtual boxのstartボタンを押してみると,Kernel driver not installed (rc=-1908) Make sure the kernel module has been loaded successfully.,というエラーが発生.
secirity & privacyで許可を取ればいいらしい

https://www.nemotos.net/?p=3707

再起動しスタートボタンを押すとディスクの選択画面まで進んだ

ディスク選択画面で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で先にディスクを選択しておくか

keyboard設定では,usキーボードを使用しているのでEnglishを指定した.
日本語入力なくても問題ないと思う(多分)

問題なく起動した

設定の確認まで終えた.
最後にmacとubuntuの共有フォルダの設定を調べる

設定した.

HELLO WORLD✋

$HOME/osbook/devenv/run_qemu.sh スクリプトがEFIファイルを実行する上で便利

一生終わった! 章ごとにscrap書いていこうと思うのでcloseします

このスクラップは2021/09/09にクローズされました
ログインするとコメントできます