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
và /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 .