-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
day03a以降、カーネルの起動まで進まない #134
Comments
まず、clang と lld のバージョン 7 か 10 でビルドを試してみてもらえないでしょうか。
についてですが、GetMemoryMap と ExitBootServices の間にメモリマップを変化させるような処理をすると ExitBootServices が失敗します。 |
もし clang 14 でビルドした Loader.efi と kernel.elf を添付していただけたら、手元の QEMU で起動実験をしてみたいと思います。 |
ありがとうございます。こちらにclang14でビルドしたバイナリを上げます。 clang/lddの7を試してみて、動くか確認したいと思います。 |
@mj-hd
ぱっと見た感じ、レジスタの状態も同じところで止まって(永久ループして)いるようです。 Clang や LLD のバージョンを変えたら挙動が変わったということで、それを手がかりに深掘れば原因を究明できるような気はします。もし mj-hd さんが興味あればサポートしたいと思います。今のところ調査する気は無いということでしたら、Issue をクローズしていただければ。 |
ありがとうございます、空いたタイミングでみてみたいと思います。 |
色々試してみて、kernel.elfのリンカがlld14の場合は起動に失敗、lld7の場合は起動に成功となっているようでした。
恐らくこの辺りの問題ではないかなと思っていて、更に調査してみたいと思いますが、この時点で何かヒントなどあれば教えていただけると嬉しいです。 両バージョンでリンクしたkernel.elf: kernel_artifacts.zip |
@mj-hd 解決おめでとうございます。 おそらくこれと同根の原因だろうとおもいます。 カーネルの読み込みも直さないといけないですね。 |
同じく問題生じたものです. |
@Maststu 章を進めて、ELFローダを実装することで正常に動くかと思います
|
day03a以降、カーネルへ処理を移していると思いますが、この章から先が全て動いておらず、何かご助言いただけないでしょうか。
ソースコード: uchan-nos/mikanos, branch: osbook_day03a
edk2: https://github.com/tianocore/edk2/tree/4ac02962017c77bf38b462f970c884c2dc7931cf (gcc12で動くようこのパッチを当てています)
clang: 14.0.6
カーネルビルドコマンド:
QEMU起動コマンド:
$ ./devenv/run_qemu.sh edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi kernel/kernel.elf
QEMU起動後の様子:

レジスタの値を確認してみると、以下のようになっています(RIPはkernelまで到達できていなそうでした):
試しに、以下のようにPrint文を仕込んでみると、先ほどとは変わってエラーメッセージが出力されるようになります:
QEMU起動後の様子:

The text was updated successfully, but these errors were encountered: