aarch64 virt 中没有 FDT 引导参数

问题描述 投票:0回答:1

我跑步

qemu-system-aarch64 -s -S \
     -machine virt,gic_version=2,virtualization=on,secure=off \
     -cpu cortex-a72 \
     -m 2G \
     -kernel mykernel.elf \
     \
     -chardev stdio,mux=on,id=char0 \
     -mon chardev=char0,mode=readline \
     -serial chardev:char0 \
     \
     -device virtio-net-pci,mac=ca:fe:00:ba:be:01,netdev=net0 \
     -netdev bridge,br=br0,id=net0 \
     \
     -nographic \
     -device virtio-gpu-pci \
     \
     -device virtio-rng-pci

我使用

gdb-multiarch
target remote :1234
连接到最初停止的访客。使用
info reg
我看到寄存器 X0 为零。我一直以这种方式使用 gdb 进行调试,单步调试内核等,已经持续了数周,并取得了巨大成功。我确信它显示的是真实的寄存器值。

为什么 qemu 不将 FDT 指针传递给 guest 虚拟机?我如何获得 FDT?

virtual-machine qemu arm64 fdt
1个回答
0
投票

https://www.qemu.org/docs/master/system/arm/virt.html#hardware-configuration-information-for-bare-metal-programming的文档说:

QEMU 支持两种类型的 virt 虚拟机映像启动,并且虚拟机代码定位 dtb 二进制文件的方式不同:

  • 对于使用 Linux 内核引导协议的客户机(这意味着传递给 QEMU -kernel 选项的任何非 ELF 文件),DTB 的地址在寄存器中传递(对于 32 位客户机,为 r2;对于 64 位客户机,则为 x0)客人)

  • 对于以“裸机”(任何其他类型的启动)启动的来宾,DTB 位于 RAM 的开头 (0x4000_0000)

您正在传递一个 ELF 文件,因此您是这两个类别中的第二个。您将在 0x4000_0000 处找到 DTB(假设您的 ELF 文件已链接,因此它不会与该内存范围重叠)。地址不是在寄存器中传递的:它只是位于已知位置。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.