uchan-nos / mikanos-build

Build and run scripts for MikanOS
Apache License 2.0
307 stars 79 forks source link

ブートローダーのビルド #6

Closed tyaiga closed 3 years ago

tyaiga commented 3 years ago

WSL2にて、「ブートローダーのビルド」内のbuildコマンドを実行すると

/hoge/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc(...): error 4000: Instance of library class [RegisterFilterLib] is not found
        in [/hoge/edk2/MdePkg/Library/BaseLib/BaseLib.inf] [X64]
        consumed by module [/hoge/edk2/MikanLoaderPkg/Loader.inf]

と表示されビルドが失敗してしまいます。 もしかしたら原因は「ansible-playbook -K -i ansible_inventory ansible_provision.yml」を実行したときの

TASK [check whether qemu-system-gui exists] ****************************************************************************fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["dpkg-query", "--show", "qemu-system-gui"], "delta": "0:00:00.006472", "end": "2021-04-08 17:14:46.277047", "msg": "non-zero return code", "rc": 1, "start": "2021-04-08 17:14:46.270575", "stderr": "dpkg-query: no packages found matching qemu-system-gui", "stderr_lines": ["dpkg-query: no packages found matching qemu-system-gui"], "stdout": "", "stdout_lines": []}

かもしれませんが対処法が分かりません。 解決策はありますでしょうか。

よろしくお願いします。

tyaiga commented 3 years ago

Ubuntu20.04で実行しても同じエラーが生じてしまいました。

tyaiga commented 3 years ago

ubuntu20.04の方でやり直したのですが、

TASK [check whether qemu-system-gui exists]

の箇所は解決しました。 しかし、

WORKSPACE = $HOME/edk2
EDK_TOOLS_PATH = $HOME/edk2/BaseTools
CONF_PATH = $HOME/edk2/Conf
PYTHON_COMMAND = /usr/bin/python3.8

Processing meta-data .
Architecture(s) = X64
Build target = DEBUG
Toolchain = CLANG38

Active Platform = $HOME/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc

build.py...
$HOME/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc(...): error 4000: Instance of library class [RegisterFilterLib] is not found
in [$HOME/edk2/MdePkg/Library/BaseLib/BaseLib.inf] [X64]
consumed by module [$HOME/edk2/MikanLoaderPkg/Loader.inf]

の部分が残ったままになっています。

tyaiga commented 3 years ago

調べてみたところ、 mikanos-build/devenv/ansible_provision.yml 内で https://github.com/tianocore/edk2.git をcloneしていますが、13h前にclone元の edk2/MdePkg/Library/BaseLib/BaseLib.inf に変更が加えられており、これがエラーの原因となっていると考えられます。

具体的な変更についてはここに書かれています。 History for edk2/MdePkg/Library/BaseLib/BaseLib.inf

uchan-nos commented 3 years ago

まず、以下のエラーは無視してよいエラーです TASK [check whether qemu-system-gui exists]

参考 https://github.com/uchan-nos/os-from-zero/issues/24#issuecomment-808726258

EDK IIに加えられたら変更が原因かどうかを見るために、変更が加えられる前のバージョンに切り替えてからbuildを試してみてもらえますか?

バージョンの切り替えは git checkout 希望のコミットID でできます

tyaiga commented 3 years ago

「開発ツールの導入」内の

$ sudo apt install ansible
$ cd $HOME/osbook/devenv
$ ansible-playbook -K -i ansible_inventory ansible_provision.yml

の後に

$ cd $HOME/edk2
$ git checkout 4ac0296

を追加することでビルドが完了しました。 この4ac0296は前述の History for edk2/MdePkg/Library/BaseLib/BaseLib.inf 内の4/6のcommit IDです。

なので4/8変更分でエラーが発生するようです。

tandasat commented 3 years ago

ちなみにMikanLoaderPkg.dscに以下を追加することでビルドできるようになります。

  RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf

ただしRegisterFilterLibはedk2-stable202105以降にしか存在しないので、Ansibleスクリプトの変更も必要です。