Open3

MikanOSをもくもくする

0Yu0Yu

[参考文献]
https://github.com/uchan-nos/mikanos-build
https://zenn.dev/karaage0703/articles/1bdb8930182c6c#1.4-エミュレータでのやり方

[環境]
Windows WSL(Ubuntu20.04LTS)

1日目

書籍
1.4 エミュレータでのやり方
に沿って行う

  1. リポジトリのダウンロード
$ sudo apt update
$ sudo apt install git
$ cd $HOME
$ git clone https://github.com/uchan-nos/mikanos-build.git osbook
  1. 開発ツールの導入
$ 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
  1. バイナリを写経する
    あるいは、書籍のバイナリファイルの場所に移動する
$ 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のインストールとセットアップを行う

  1. Extra settingsの一番下にあるAdditional parameters for VcXsrvに-acと入力(パブリックアクセスを許可するコマンド)
  2. Finish configurationのSave configurationを押してconfigファイルを生成
    Windowsキー + Rキーを押す→shell:startupと入力→表示されたスタートアップフォルダにconfigを移して保存
  3. vimで~/.bashrcを開く→ export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0を追記して保存→$ source ~/.bashrcで設定を反映
  4. 下記のコマンドからX11をインストールする
    $ sudo apt-get -y install x11-apps
    下記のコマンドからGUIが起動することを確認
    $ xeyes
  5. ここで、Error: Can't open display: aaa.bb.ccc.d:0というエラーが出た場合、ファイアウォールの設定が原因.
    コントロールパネルを起動→Windowsファイヤーウォールによるアプリケーションの許可をクリック→VcXsrv windows xserverのプライベートとパブリック両方にチェックが入っているか確認する.
    Windowsファイヤーウォールによるアプリケーションの許可
    [参考]
    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

https://zoomadmin.com/HowToInstall/UbuntuPackage/okteta

0Yu0Yu

2日目 EDKⅡ入門とメモリマップ

0Yu0Yu
  1. 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
  1. ハローワールドプログラムのソースコードをビルドする
$ 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.txtMikanLoderPkgをビルド対象として指定する
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
  1. 起動する
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!

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