Microblaze на QEMU не производит последовательный вывод - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь сымитировать код 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
...