Open3
MikanOSをもくもくする
[参考文献]
[環境]
Windows WSL(Ubuntu20.04LTS)
1日目
書籍
1.4 エミュレータでのやり方
に沿って行う
- リポジトリのダウンロード
$ sudo apt update
$ sudo apt install 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
$HOME/edk2というディレクトリが生成されていることを確認
$ iasl -v
$ ls $HOME/edk2
設定を反映
$ source $HOME/.profile
- バイナリを写経する
あるいは、書籍のバイナリファイルの場所に移動する
$ cd ~/osbook/day01/bin
BOOTX64.EFIを含んだディスクイメージを作成、次にQMENUにそのディスクイメージを読み込ませて起動する2工程を行う.
まず、qmenu-imgコマンドで200MBの空のファイルを作ってFAT形式でフォーマットし、そこにBOOTX64.EFIファイルを書き込む
最終的にBOOTX64.EFIを含んだdis.imgファイルが生成される
$ qemu-img create -f raw disk.img 200M
$ mkfs.fat -n 'MIKAN OS' -s 2 -f 2 -R 32 -F 32 disk.img
$ mkdir -p mnt
$ sudo mount -o loop disk.img mnt
$ sudo mkdir -p mnt/EFI/BOOT
$ sudo cp hello.efi mnt/EFI/BOOT/BOOTX64.EFI
$ sudo umount mnt
作ったディスクイメージを下記のコマンドからQMENUで起動する
$ qemu-system-x86_64 -drive if=pflash,file=$HOME/osbook/devenv/OVMF_CODE.fd -drive if=pflash,file=$HOME/osbook/devenv/OVMF_VARS.fd -hda disk.img
[VcXsrvの設定]
QMENUの起動に使うため、VcXsrvのインストールとセットアップを行う
- Extra settingsの一番下にあるAdditional parameters for VcXsrvに
-acと入力(パブリックアクセスを許可するコマンド) - Finish configurationのSave configurationを押して
configファイルを生成
Windowsキー + Rキーを押す→shell:startupと入力→表示されたスタートアップフォルダにconfigを移して保存 - vimで
~/.bashrcを開く→export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0を追記して保存→$ source ~/.bashrcで設定を反映 - 下記のコマンドからX11をインストールする
$ sudo apt-get -y install x11-apps
下記のコマンドからGUIが起動することを確認
$ xeyes - ここで、
Error: Can't open display: aaa.bb.ccc.d:0というエラーが出た場合、ファイアウォールの設定が原因.
コントロールパネルを起動→Windowsファイヤーウォールによるアプリケーションの許可をクリック→VcXsrv windows xserverのプライベートとパブリック両方にチェックが入っているか確認する.

[参考]
https://qiita.com/ryoi084/items/0dff11134592d0bb895c
ファイアウォールのissue
https://github.com/microsoft/WSL/issues/4139
https://takake-blog.com/windows-subsystem-for-linux-2-wsl2gui/
[okteta(バイナリエディタ)のインストール]
$sudo apt-get update -y
$sudo apt-get update -y
$okteta hogehoge.efi
2日目 EDKⅡ入門とメモリマップ
- MikanOS のソースコードの入手
// ファイルを変更しながらブランチをcheckoutしたい場合はFork推奨
やり方は
https://github.com/uchan-nos/mikanos/blob/master/docs/how-to-send-pull-request.md
参照
$ cd $HOME
$ git clone https://github.com/<my_user_name>/mikanos.git
- ハローワールドプログラムのソースコードをビルドする
$ cd $HOME/mikanos
$ git checkout osbook_day02a
$ cd $HOME/edk2
$ ln -s $HOME/mikanos/MikanLoaderPkg ./
-
ln -sはシンボリックリンク、Windowsでいえばショートカットのようなものを作るコマンド. $HOME/mikanos/MikanLoaderPkgを指すシンボリックリンクが作成される.
$ source edksetup.sh
Loading previous configuration from /home/denham/edk2/Conf/BuildEnv.sh
Using EDK2 in-source Basetools
WORKSPACE: /home/denham/edk2
EDK_TOOLS_PATH: /home/denham/edk2/BaseTools
CONF_PATH: /home/denham/edk2/Conf
-
sourceコマンドでedksetup.shファイルを読み込むと、Conf/target.txtファイルが(存在しない場 合に)自動的に生成される. -
Conf/target.txtでMikanLoderPkgをビルド対象として指定する
ACTIVE_PLATFORM = MikanLoaderPkg/MikanLoaderPkg.dsc
TARGET = DEBUG
TARGET_ARCH = X64
TOOL_CHAIN_TAG = CLANG38
$ cd $HOME/edk2
$ buld
- ビルド成功
エラーが出たら
- シンボリックリンクは適切に張れているか?
例
build.py...
: error 000E: File/directory not found in workspace
/home/denham/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc (Please give file in absolute path or relative to WORKSPACE)
など
(ln -s ~ でタイポがあり、MikanLoaderPkgへのシンボリックリンクが適切に張れていなかったケース)
- シンボリックリンクの解除は
unlink hogehoge
- 起動する
ls Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi
で、$HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efiに目的のファイルが出力されていることを確認する→うまくいっていたらビルド成功
これをQEMU(~/osbook/devenv/run_qemu.sh)で起動させる
$ ~/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi

「Hello,Mikan World!」と表示される