2013-06-08 22 views
5

Tôi đang chạy Linux Image (kernel 3.2.8) cho beagleboard-xm trên bản phân phối Ubuntu giả lập 1.4.0 của QEMU cho 13.04 . Hình ảnh của tôi được tạo bằng cách sử dụng Buildroot beagle_defconfig. Tôi đã thêm một số pkg để có thể gỡ lỗi một chút.cổng ttyO không có địa chỉ cổng tốt trên QEMU 1.4.0 chạy hình ảnh cho beagleboard-xm

gọi 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) 

Những gì tôi muốn làm là phải có một giao tiếp giữa khách và máy chủ trên sê-ri 4 differents ttyO trình bày trên vị khách. QEMU cung cấp các cơ sở để chuyển hướng các tập tin vào một số thiết bị ở phía máy chủ. Vấn đề của tôi đi như thế này:

Đồng khởi động hạt nhân của khách Im thể thấy rằng UART của tôi, nơi cho phép

[ 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 

Trong thực tế khi tôi đi xem để /proc/tty/driver và tôi làm một con mèo trên Im OMAP-SERIAL có thể nhìn thấy serinfo này: phiên bản trình điều khiển 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 

tôi biết rằng ttyO2 đang làm việc vì giao diện điều khiển của tôi là được chuyển hướng đến nó. Vấn đề là làm một bộ nối tiếp trên bất kỳ ttyO nào tôi nhận được thông báo sau:

[[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 

Tương tự với ttyO2. Tôi cố gắng để thiết lập một số cài đặt với bất kỳ ttyO với setserial nhưng tôi luôn luôn nhận được cùng một thông điệp:

[[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 

Trong khi nhìn vào khách /proc/tty/drives đây là những gì chúng ta thấy

/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 

Về cơ bản tôi muốn thiết lập một giao tiếp nối tiếp giữa một khách và một máy chủ, nhưng các cổng nối tiếp ở phía khách không được cấu hình tốt.

/sys/class/tty cho thấy trình điều khiển tty đã được liên kết với thiết bị nối tiếp.

tôi đã hiển thị trước đây, chỉ có các uart omap đã được khởi tạo và được gắn với ttyO *. lưu ý rằng giao diện điều khiển được chuyển hướng ttyO2 bằng cấu hình kernel. nhưng vì tôi đã thêm -serial stdio, bảng điều khiển được chuyển hướng đến thiết bị đầu cuối đã gọi QEMU.

Nếu tôi chuyển hướng bảng điều khiển bằng cách sử dụng lúc đầu tiên -serial pty thay vì -serial stdio, tôi có thể nhắc bảng điều khiển trong minicom bằng cách mở pty được tạo ở phía máy chủ. Vẫn không có gì xảy ra trên các pty khác được tạo ra ở phía máy chủ để giao tiếp trên các cổng khác.

Về phía chủ nhà tôi mở /dev/pts/3/dev/pts/4 với minicom hoặc bằng cách làm cat trên chúng

Về phía khách mời:

Whent tôi làm echo "test" > /dev/ttyO0 hoặc 1 hoặc 3 gì cả. nhưng khi tôi làm điều đó trên ttyO2, "kiểm tra" nhắc trên thiết bị đầu cuối giao diện điều khiển (đó là bình thường).

bây giờ khi sử dụng bất kỳ ttyS:

echo "test" > /dev/ttyS0 

tôi nhận được

-bash: echo: write error: Input/output error 

tôi đã thực hiện một số nghiên cứu về lỗi này và những gì tôi thấy là đó là có thể là nhiều thứ. Nhưng một điều mà tôi nhận thấy là không có thiết bị nào bên cạnh serial được gán cho ttyS. và nhìn vào/proc/tty/lái xe/serial chúng ta thấy điều này:

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 
cũng

setserial -a /dev/ttyS0 Xác nhận số này:

/dev/ttyS0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0 
    Baud_base: 0, close_delay: 50, divisor: 0 
    closing_wait: 3000 
    Flags: spd_normal 

tôi quản lý để làm truyền thông nối tiếp với cổng muliples usig grml hình ảnh trên một kiến ​​trúc x86 . Vì vậy, có vẻ như bên máy chủ của tôi là tốt.

Nếu có ai từng thực hiện công việc này trước khi sử dụng QEMU -M beaglexm hoặc bất kỳ kiến ​​trúc ARM nào khác, tôi vui lòng lấy bất kỳ chi tiết nào trên VM được sử dụng, phiên bản và phân phối của QEMU cũng như chi tiết hạt nhân và cấu hình hình ảnh được sử dụng .

Trả lời

2

Tôi đã tìm thấy vấn đề của mình là gì, QEMU không lập bản đồ chardev nối tiếp của bất kỳ pty phụ nào khác.

Sau khi thực hiện lệnh này Invoke:

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) 

Chúng ta có thể thấy rằng 2 serial thêm nơi tạo ra với các nhãn nối tiếp 1 và 2. Nhưng nếu tôi nhìn vào các thông tin cây

(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 

Chúng tôi thấy rõ ràng rằng chỉ có nhãn serial0 được gắn vào một uart (cái được đặt là giao diện điều khiển). Các nhãn khác (serial1 và serial2) không tìm thấy nơi nào.

Với hình ảnh làm việc của grml rằng jofel là thực sự tốt đẹp để cho tôi biết chúng tôi thấy điều này:

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 

tất cả 3 lebels sê-ri đã được gắn liền với một chardev.

Bây giờ tôi chỉ cần đặt một câu hỏi mới về cách làm cho QEMU liên kết những lables đó với các bartboard của tôi.

Ngoài ra tôi muốn thêm Tôi nghĩ rằng bộ sưu tập đã không xuất ra bất kỳ thông tin nào về ttyO vì nó không hỗ trợ omap uarts. setserial ? cho biết thiết bị nào được hỗ trợ. Trong trường hợp của ttyS, tôi nghĩ rằng nó bởi vì các trình điều khiển tty được cài đặt nhưng không có loại khác của uarts bisede omap uarts mô phỏng cho bealgeboard trong QEMU.

Cảm ơn rất nhiều vì mọi người đã xem qua câu hỏi này và jofel đặc biệt.

Các vấn đề liên quan