我在QEMU的1.4.0模拟器Ubuntu发行版上为13.04运行了beagleboard-xm的Linux映像(内核3.2.8) . 我的图像是使用Buildroot beagle_defconfig创建的 . 我添加了一些pkgs以便能够稍微调试一下 .
QEMU调用cmd:
`$ sudo qemu-system-arm -M beaglexm -m 1024 -sd ./test.img -clock unix -serial stdio -device usb-mouse -device usb-kbd -serial pty -serial pty`
[sudo] password for emperador:
char device redirected to /dev/pts/3 (label serial1)
char device redirected to /dev/pts/4 (label serial2)
我想要做的是在客人和主机之间进行通信,连接客人端的4个不同的ttyO . QEMU提供将流量重定向到主机端的某些设备的工具 . 我的问题是这样的:
在客户端内核启动我能看到我的UART启用了
[ 2.682040] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 2.777947] omap_uart.0: ttyO0 at MMIO 0x4806a000 (irq = 72) is a OMAP UART0
[ 2.794967] omap_uart.1: ttyO1 at MMIO 0x4806c000 (irq = 73) is a OMAP UART1
[ 2.814942] omap_uart.2: ttyO2 at MMIO 0x49020000 (irq = 74) is a OMAP UART2
[ 2.966825] console [ttyO2] enabled
[ 2.984777] omap_uart.3: ttyO3 at MMIO 0x49042000 (irq = 80) is a OMAP UART3
事实上,当我看到 /proc/tty/driver
并且我在OMAP-SERIAL上做了一只猫我能看到这个serinfo:1.0驱动程序版本:
0: uart:OMAP UART0 mmio:0x4806A000 irq:72 tx:0 rx:0 CTS|DSR|CD
1: uart:OMAP UART1 mmio:0x4806C000 irq:73 tx:0 rx:0 CTS|DSR|CD
2: uart:OMAP UART2 mmio:0x49020000 irq:74 tx:268 rx:37 RTS|CTS|DTR|DSR|CD
3: uart:OMAP UART3 mmio:0x49042000 irq:80 tx:0 rx:0 CTS|DSR|CD
我知道ttyO2正在运行,因为我的控制台已被重定向到它 . 事情是在任何ttyO上做一个set serial我得到以下消息:
[root@enu driver]# setserial -a /dev/ttyO0
/dev/ttyO0, Line 0, UART: undefined, Port: 0x0000, IRQ: 72
Baud_base: 3000000, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal
ttyO2也是如此 . 我尝试使用 setserial
为任何ttyO设置一些设置,但我总是得到相同的消息:
[root@enu ~]# setserial /dev/ttyO0 uart 8250
setserial: can't set serial info: Invalid argument
[root@enu ~]# setserial /dev/ttyO0 port 0x4806a000
setserial: can't set serial info: Invalid argument
看着客人 /proc/tty/drives
这就是我们所看到的
/dev/tty /dev/tty 5 0 system:/dev/tty
/dev/console /dev/console 5 1 system:console
/dev/ptmx /dev/ptmx 5 2 system
/dev/vc/0 /dev/vc/0 4 0 system:vtmaster
sdio_uart /dev/ttySDIO 249 0-7 serial
acm /dev/ttyACM 166 0-31 serial
ttyprintk /dev/ttyprintk 5 3 console
OMAP-SERIAL /dev/ttyO 253 0-3 serial
serial /dev/ttyS 4 64-95 serial
pty_slave /dev/pts 136 0-1048575 pty:slave
pty_master /dev/ptm 128 0-1048575 pty:master
unknown /dev/tty 4 1-63 console
基本上我想在来宾和主机之间 Build 串行通信,但客户端的串口没有很好地配置 .
/sys/class/tty
显示tty驱动程序已链接到串行设备 .
我之前出现过,只有omap uarts已初始化并附加到ttyO * . 请注意,控制台已被内核配置重定向到ttyO2 . 但是因为我添加了 -serial stdio
,控制台被重定向到调用QEMU的终端 .
如果我首先使用 -serial pty
而不是 -serial stdio
重定向控制台,我可以通过打开主机端创建的pty来提示微控制台中的控制台 . 在主机端创建的其他端口上仍然没有任何事情发生在其他端口之间进行通信 .
在主机端我用minicom打开 /dev/pts/3
和 /dev/pts/4
或者在它们上面做 cat
在客人方面:
当我做 echo "test" > /dev/ttyO0
或1或3没什么 . 但是当我在ttyO2上执行此操作时,在控制台终端上显示"test"(这是正常的) .
现在使用任何ttyS时:
echo "test" > /dev/ttyS0
我明白了
-bash: echo: write error: Input/output error
我对这个错误进行了一些研究,我发现的可能是很多东西 . 但有一件事我注意到,串口旁边没有设备被分配给ttyS . 并查看/ proc / tty / driver / serial我们看到:
serinfo:1.0 driver revision:
0: uart:unknown port:00000000 irq:0
1: uart:unknown port:00000000 irq:0
2: uart:unknown port:00000000 irq:0
3: uart:unknown port:00000000 irq:0
还 setserial -a /dev/ttyS0
确认这个:
/dev/ttyS0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
Baud_base: 0, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal
我设法在x86架构上与muliples ports usig grml image进行串行通信 . 所以看来我的东道主很好 .
如果有人曾经在QEMU -M beaglexm或任何其他ARM架构上做过这样的工作,我很乐意接受所用VM的任何细节,QEMU的版本和发行版以及所使用的内核细节和图像配置 .
1 回答
我发现我的问题是什么,QEMU没有映射任何额外的-serial pty的序列chardev .
执行此Invoke命令后:
我们可以看到使用标签序列1和2创建的2个额外序列号 . 但是如果我查看树信息
我们清楚地看到只有标签
serial0
附加到uart(设置为控制台的那个) . 其他标签(serial1和serial2)无处可寻 .有了grof的工作形象,jofel真的很高兴告诉我,我们看到了这个:
所有3个连续的lebels都附在一个chardev上 .
现在我只需要问一个关于如何让QEMU将这些标签链接到我的beagleboard uarts的新问题 .
另外我想补充一点,我认为setserial没有输出关于ttyO 's because it doesn' t支持omap uarts的任何信息 .
setserial ?
显示支持的设备 . 在ttyS的情况下,我认为它是因为安装了tty驱动程序,但在QEMU中没有其他类型的uarts bisede omap uarts模拟bealgeboard .非常感谢大家看看这个问题,特别是jofel .