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