2013-06-08 9 views
5

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 .

Antwort

2

Ich fand, was mein Problem war, QEMU nicht die serielle Chardev eines extra-seriell pty zuordnen.

Nach dem diesem INVOKEBefehl tun:

sudo qemu-system-arm -M beaglexm -m 1024 -sd ./test.img -clonix -serial stdio -device usb-mouse -device usb-kbd -serial pty -serial pty -monitor pty 
char device redirected to /dev/pts/5 (label compat_monitor0) 
char device redirected to /dev/pts/7 (label serial1) 
char device redirected to /dev/pts/10 (label serial2) 

Wir können sehen, dass 2 weitere Serien, wo mit dem Etikett erstellt seriellen 1 und 2 Aber wenn ich mir den Baum info

(qemu) info qtree 

dev: omap_uart, id "uart4" 
    revision = 82 
    mmio_size = 4096 
    baudrate = 812500 
    chardev = uart4 
    irq 3 
    mmio 0000000049042000/0000000000001000 
    dev: omap_uart, id "uart3" 
    revision = 82 
    mmio_size = 4096 
    baudrate = 812500 
    chardev = serial0 
    irq 3 
    mmio 0000000049020000/0000000000001000 
    dev: omap_uart, id "uart2" 
    revision = 82 
    mmio_size = 4096 
    baudrate = 812500 
    chardev = uart2 
    irq 3 
    mmio 000000004806c000/0000000000001000 
    dev: omap_uart, id "uart1" 
    revision = 82 
    mmio_size = 4096 
    baudrate = 812500 
    chardev = uart1 
    irq 3 
    mmio 000000004806a000/0000000000001000 

Wir sehen deutlich, dass nur das Label serial0 an eine Uart (die als Konsole eingestellt wurde) angehängt wurde. Die anderen Labels (serial1 und serial2) sind nicht zu finden.

Mit dem Arbeitsbild von grml dass Jofel wirklich schön war mir zu sagen, sehen wir folgendes:

dev: i440FX-pcihost, id "" 
    irq 0 
    bus: pci.0 
     type PCI 
     dev: PIIX3, id "" 
     addr = 01.0 
     romfile = <null> 
     rombar = 1 
     multifunction = on 
     command_serr_enable = on 
     class ISA bridge, addr 00:01.0, pci id 8086:7000 (sub 1af4:1100) 
     bus: isa.0 
      type ISA 
      dev: isa-serial, id "" 
      index = 2 
      iobase = 0x3e8 
      irq = 4 
      chardev = serial2 
      wakeup = 0 
      isa irq 4 
      dev: isa-serial, id "" 
      index = 1 
      iobase = 0x2f8 
      irq = 3 
      chardev = serial1 
      wakeup = 0 
      isa irq 3 
      dev: isa-serial, id "" 
      index = 0 
      iobase = 0x3f8 
      irq = 4 
      chardev = serial0 
      wakeup = 0 
      isa irq 4 

alle drei seriellen lebels wurden einem chardev angebracht.

Jetzt muss ich nur eine neue Frage darüber stellen, wie QEMU diese Etiketten mit meinen Beagleboard-Uarts verknüpft.

Auch ich möchte hinzufügen, ich denke, dass setserial keine Informationen über ttyO's outputed hat, weil es nicht omap uarts unterstützt. setserial ? zeigt an, welche Geräte unterstützt werden. Im Fall der TtyS, denke ich, weil die Tty-Treiber installiert sind, aber es gibt keine andere Art von Barede-Omap-Uarts, die in QEMU emuliert werden.

Vielen Dank für alle, die einen Blick auf diese Frage und vor allem Jofel.