明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

U-Boot (aarch64) on Qemu を動作させたい (2)

とりあえず、期待通り U-Boot の entry point である 0x80000 (_start) に制御が移っているのか?ということの確認を目指してみる。

qemu 自体を gdb で解析してみる。

gdb --args qemu-system-aarch64 -machine raspi3 -kernel u-boot/u-boot -nographic

途中 (qemu/boot.c) に

    /* Assume that raw images are linux kernels, and ELF images are not.  */
    kernel_size = arm_load_elf(info, &elf_entry, &elf_low_addr,
                               &elf_high_addr, elf_machine);

というコメントもあったので、読み込むバイナリは elf (≠ u-boot.bin) で問題なさそう。 (事実 is_linux フラグは false となる)

arm_load_kernel_notify() あたりまで u-boot の読み込み処理を追いかけた結果、ファイルのロードや entry point が 0x80000 となることなどは期待通り動作していそう。

次は、リセット時に entry point にジャンプできているか見ていく。

`do_cpu_reset()' (qemu/boot.c) に break point を設定して追いかけてみる。

do_cpu_reset() から aarch64_cpu_set_pc() が呼ばれて、 env.pc に entry point (0x80000) が設定されていることは確認できた。

ここからがわからない。。 qemu/target/arm/machine.c や qemu/target/arm/translate-a64.c あたりに処理が移るのか?実際に PC を処理しているところはどこだろう??