在Qemu中重定向多个UART

时间:2016-09-07 14:55:59

标签: linux arm embedded qemu uart

我正在模拟具有多个UART / USART的芯片。我想要做的是将UART3重定向到主机上的/ dev / uart3,将uart7重定向到主机上的/ dev / uart7等。我似乎无法找到处理多个uart的示例或指南,以及示例我发现似乎甚至没有选择他们倾倒到控制台/插座/其他什么uart。 (他们中的一些使用“id = id”,但我不知道这意味着什么,Qemu文档似乎没有涵盖它。)

2 个答案:

答案 0 :(得分:1)

man qemu说:

  

-serial dev

     

将虚拟串行端口重定向到主机字符设备dev。默认设备在图形模式下为“vc”,在非模式下为“stdio”   图形模式。此选项可以多次用于模拟向上   到4个串口端口。

另外,您可以添加虚拟USB串口:

  

-usbdevice serial:[vendorid = vendor_id] [,productid = product_id]:dev

对于dev,在两种情况下,您都会以/dev/ttyXXX的形式替换主机的串口

您可以省略供应商和产品ID规范。在这种情况下,qemu将使用Virto'ID

创建通用串行USB设备

答案 1 :(得分:1)

通过使用不读取/写入标准输入/输出的“ shell”程序启动xterm实例来创建TTY设备。创建xterm窗口,(隐式)分配一个PTY设备,并打印该设备的路径:

xterm -e /bin/sh -c 'while true; sleep 100; done' & ps --ppid $!

重复您需要连接到Qemu的尽可能多的串行输入/输出。

然后使用以下内容启动Qemu:-serial /dev/pts/N -serial /dev/pts/M ...,其中-serial的数量与仿真机定义的数量相同。然后,xterm窗口将显示输出,还将接受并重定向输入。 QEMU监视器提示将在运行QEMU的终端窗口中自动打开,并在目标执行时在那里保持可用。这样,就有可能使用Ctrl-C中断/中断GDB内部运行的QEMU进程,如果使用'mon:stdio',则对我而言不起作用。

串行外设的数量及其地址在Qemu源代码中进行了硬编码。例如,对于Xilinx Zynqmp,将有两个串行设备,您可以使用两个-serial选项重定向到stdio / tty:qemu/hw/arm/xlnx-zynqmp.c

static const uint64_t uart_addr[XLNX_ZYNQMP_NUM_UARTS] = { 0xFF000000, 0xFF010000 }