-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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: