我正在尝试使用 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