Я пытаюсь сымитировать код Microblaze без оболочки с помощью QEMU, но не получаю никакого вывода от функции "print". Microblaze создается из проекта xilinx, в результате создается файл .dts, который используется для создания .dtb для использования с QEMU. Я использую вилку 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, который является FIFO данных UART TX, но на терминале 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;
}
Это узел UART из файла .dts
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