uchan-nos/os-from-zero

osbook_day02b メモリマップの確認 QEMU起動時のエラー

ninokin25 opened this issue · 4 comments

@uchan-nos 様、C++とOSの勉強を兼ねて本書を読み始めたものです。下記章でエラーが起きたため、サポートいただきたく存じます。

Overview

osbook_day02の「2.7 メモリマップの確認」工程で、QEMUでLoader.efiの起動を試みたところ、下記のようなエラーが発生しました。

failed to open file '\kernel.elf' : Not Found

image

こちらを解決したいのですがアドバイスいただけないでしょうか?もしくはこの時点でこのような表示が出るのは想定ないでしょうか?(この先進めていくと解決するエラーでしょうか?)その前の手順までは上手く動いていたので、いきなりこのような表示が出て気になった次第です。

Local machine environment

  • WSL2 - Ubuntu18.04
  • uchan-nos/mikanos-build: 古いバージョンを使用 (SHA-1: 8d4882122ec548ef680b6b5a2ae841a0fd4d07a1)

@uchan-nos
その前のページで実施したHello, World!mikanos-buildに記載されたMikanOSのビルド時のQEMU表示(こちら)は問題なく表示できました。

@uchan-nos
「3.3 osbook_day03」のリンク処理のところでエラーが発生してしまいます。何か気になる点があればアドバイスいただけると幸いです。

$ ld.lld-7 --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o
Stack dump:
0.      Program arguments: ld.lld-7 --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o 
LLVMSymbolizer: error reading file: No such file or directory
#0 0x00007fbfaf79be8a llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/usr/lib/x86_64-linux-gnu/libLLVM-7.so.1+0x908e8a)
#1 0x00007fbfaf79a544 llvm::sys::RunSignalHandlers() (/usr/lib/x86_64-linux-gnu/libLLVM-7.so.1+0x907544)
#2 0x00007fbfaf79a682 (/usr/lib/x86_64-linux-gnu/libLLVM-7.so.1+0x907682)
#3 0x00007fbfb2d7d980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#4 0x00007fbfae823461 (/lib/x86_64-linux-gnu/libc.so.6+0x18e461)
#5 0x00007fbfb09904a9 (/usr/lib/x86_64-linux-gnu/libLLVM-7.so.1+0x1afd4a9)
#6 0x00007fbfb0992216 llvm::DWARFDebugLine::LineTable::getFileLineInfoForAddress(unsigned long, char const*, llvm::DILineInfoSpecifier::FileLineInfoKind, llvm::DILineInfo&) const (/usr/lib/x86_64-linux-gnu/libLLVM-7.so.1+0x1aff216)
#7 0x000055d23ae7c830 (ld.lld-7+0xeb830)
#8 0x000055d23ae97210 (ld.lld-7+0x106210)
#9 0x000055d23ae9e8df (ld.lld-7+0x10d8df)
#10 0x000055d23af93795 (ld.lld-7+0x202795)
#11 0x000055d23afa166b (ld.lld-7+0x21066b)
#12 0x000055d23af37446 (ld.lld-7+0x1a6446)
#13 0x000055d23af506db (ld.lld-7+0x1bf6db)
#14 0x000055d23af51fe8 (ld.lld-7+0x1c0fe8)
#15 0x000055d23ae688b4 (ld.lld-7+0xd78b4)
#16 0x000055d23ade744d (ld.lld-7+0x5644d)
#17 0x000055d23ae6a2aa (ld.lld-7+0xd92aa)
#18 0x000055d23ade5c7f (ld.lld-7+0x54c7f)
#19 0x00007fbfae6b6c87 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21c87)
#20 0x000055d23aded8ca (ld.lld-7+0x5c8ca)
Segmentation fault

@uchan-nos
とりあえず mikanos/kernel配下で make allを実行したら処理はpassしkernel.elfは生成されましたがいまいちこれでいいのか(逆になぜテキストのコマンドでできないか)が気になっています。。

そしてこちらの処理がpassしたからといってQEMUの実行画面では変わらず、下記エラーが表示されたままです。

failed to open file '\kernel.elf' : Not Found

ちょっと状況がよく分かりませんが、一つ言えるのは failed to open file '\kernel.elf': Not found の原因は当該ファイルがディスクイメージ(の適切な場所)に無いからだと思います。
エラーが出ている行はここです。 https://github.com/uchan-nos/mikanos/blob/b5f7740c04002e67a95af16a5c6e073b664bf3f5/MikanLoaderPkg/Main.c#L336