Ich habe ein Linux Image (Kernel 3.2.8) für beagleboard-xm auf QEMUs 1.4.0 Emulator Ubuntu Distribution für 13.04 . Mein Bild wird mit Buildroot beagle_defconfig erstellt. Ich habe ein paar pkgs hinzugefügt, um ein wenig debuggen zu können.ttyO Ports haben nicht die gute Portadresse auf QEMU 1.4.0 laufendes Image für beagleboard-xm
QEMU Aufruf 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)
Was mag ich eine Kommunikation zwischen Gast zu tun haben und Host über serielle die 4 differents auf dem Gast ttyO zu präsentieren. QEMU bietet Möglichkeiten, um den Verkehr zu einem Gerät auf der Host-Seite umzuleiten. Mein Problem geht so:
Am Gast Kernel-Boot Im fähig, zu sehen, dass mein UART wo
[ 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
In der Tat aktiviert, wenn ich gehen sehen, um /proc/tty/driver
und ich habe eine Katze, die auf OMAP-SERIEN Im der Lage, diese serinfo zu sehen: 1.0 Treiberversion:
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
ich weiß, dass ttyO2 arbeitet, weil meine Konsole es umgeleitet worden ist. Die Sache ist, dass auf einem der ttyO einen Satz Serien tun ich die folgende Meldung:
[[email protected] 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
Das gleiche mit ttyO2 geht. Ich habe versucht, mit setserial
einige Einstellungen zu einem der ttyO zu setzen, aber ich immer die gleiche Meldung:
[[email protected] ~]# setserial /dev/ttyO0 uart 8250
setserial: can't set serial info: Invalid argument
[[email protected] ~]# setserial /dev/ttyO0 port 0x4806a000
setserial: can't set serial info: Invalid argument
Während seiner Zeit bei Gast suchen /proc/tty/drives
das ist, was wir
/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
Grundsätzlich sehe ich möchte Stellen Sie eine serielle Kommunikation zwischen einem Gast und einem Host her, aber die seriellen Ports auf der Gastseite sind nicht gut konfiguriert.
/sys/class/tty
zeigen, dass tty Treiber mit einem seriellen Gerät verknüpft wurden.
habe ich schon früher gezeigt, nur omap-uarts wurden initialisiert und an ttyO * angehängt. Beachten Sie, dass die Konsole ttyO2 von Kernel-Konfigurationen umgeleitet wurde. Aber weil ich -serial stdio
hinzugefügt habe, wurde die Konsole zu dem Terminal umgeleitet, das QEMU aufgerufen hat.
Wenn ich die Konsole mit zuerst -serial pty
anstelle von -serial stdio
umleiten, kann ich die Konsole in Minicom durch Öffnen der Pty auf der Host-Seite erstellt. Immer noch passiert nichts auf den anderen Seiten, die auf der Host-Seite erstellt wurden, um über andere Ports zu kommunizieren.
Auf Host-Seite öffnen ich /dev/pts/3
und /dev/pts/4
mit minicom oder durch cat
auf sie zu tun
Auf Gästeseite:
Whent ich echo "test" > /dev/ttyO0
oder 1 oder 3 nichts. aber wenn ich es auf ttyO2 mache, erscheint die Eingabeaufforderung "test" auf dem Konsolen-Terminal (was normal ist).
jetzt, wenn eine der ttyS mit:
echo "test" > /dev/ttyS0
ich
-bash: echo: write error: Input/output error
ich einige der Forschung über diesen Fehler gemacht und was ich gefunden habe ist, dass es viele Dinge sein könnte. Aber eine Sache, die mir aufgefallen ist, war, dass ttyS kein Gerät neben serial zugewiesen wurde. und Blick auf/proc/tty/driver/serial wir sehen:
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
auch setserial -a /dev/ttyS0
diese confrim:
/dev/ttyS0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
Baud_base: 0, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal
ich die serielle Kommunikation mit muliples Ports Usig grml Bild auf einer x86-Architektur zu tun verwaltet . Es scheint also, dass meine Gastgeberseite in Ordnung ist.
Wenn jemand jemals so etwas auf QEMU-Beaglexm oder einer anderen ARM-Architektur gemacht hat, würde ich gerne alle Details über die verwendete VM, die QEMU-Version und -Distribution sowie die Kernel-Details und Image-Konfigurationen nehmen .