U-Boot (aarch64) on Qemu を動作させたい (2)
とりあえず、期待通り U-Boot の entry point である 0x80000 (_start) に制御が移っているのか?ということの確認を目指してみる。
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 を処理しているところはどこだろう??