1

我正在尝试使用 QEMU 模拟裸机 Microblaze 代码,但没有从“打印”功能获得任何输出。microblaze 是从 xilinx 项目生成的,这会生成一个 .dts 文件,该文件用于制作一个用于 QEMU 的 .dtb。我正在使用Xilinx 的 QEMU 分支

我使用以下命令运行 QEMU

~/.local/bin/qemu-system-microblazeel -M microblaze-fdt -dtb system-top.dtb -m 256 -serial mon:stdio -display none -kernel ./workspace/app_0/Debug/app_0.elf -s -S -nographic

我可以连接 gdb,并逐步执行代码,它清楚地写入地址 0x40600004,这是 UART TX 数据 FIFO,但在 QEMU 终端上仍然没有看到任何内容。我什至在 QEMU xilinx UART 模型中添加了一些调试,它已注册但在代码运行时从未调用过。

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"

int main()
{
    init_platform();

    print("Hello World\n\r");

    cleanup_platform();
    return 0;
}

这是 .dts 文件中的 UART 节点

top_axi_uartlite_0: serial@40600000 {
        clock-frequency = <294999169>;
        clocks = <&clk_bus_0>;
        compatible = "xlnx,axi-uartlite-2.0", "xlnx,xps-uartlite-1.00.a";
        current-speed = <115200>;
        device_type = "serial";
        interrupt-names = "interrupt";
        interrupt-parent = <&top_axi_intc_0>;
        interrupts = <1 0>;
        port-number = <0>;
        reg = <0x40600000 0x10000>;
        xlnx,baudrate = <0x1c200>;
        xlnx,data-bits = <0x8>;
        xlnx,odd-parity = <0x0>;
        xlnx,s-axi-aclk-freq-hz-d = "294.999169";
        xlnx,use-parity = <0x0>;
    };

QEMU 监视器显示以下内存空间

address-space: memory
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000fffffff (prio 0, ram): memory@0

address-space: I/O
  0000000000000000-000000000000ffff (prio 0, i/o): io

address-space: cpu-memory-0
  0000000000000000-000000000fffffff (prio 0, ram): memory@0
4

0 回答 0