Linux

Fedora 16 串列緩衝區溢出

  • June 29, 2012

我在 Fedora 16 和我的串口上遇到了腦殘問題。

我使用串口來監控我正在開發的機頂盒。STB 在 Linux 上執行,啟動時,我通過串列介面啟動正在處理的程序。

現在,我的程序在調試時會輸出大量跟踪資訊,並且buffer overrundmesg.

這使得調試應用程序變得一團糟,因為串列輸出變得不可讀。

所以,困擾我的是,當我在 Fedora 15 上執行時,根本沒有緩衝區溢出

有關我的設置的更多詳細資訊:

  • Fedora Core 16 下 Cinnamon / gnome-terminal 為​​串口。姓名:3.2.6-3.fc16.x86_64
  • 要連接串列埠,我使用以下命令:screen -R -d -t "Serial" /dev/ttyS0 115200

知道如何解決這個問題嗎?

(更多細節:)

$ cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:3395 rx:11899157 fe:6 brk:4 oe:3496 RTS|DTR
###                                                               ^^^^^^^
###                                                            overflow errors
1: uart:16550A port:0000EC98 irq:17 tx:32 rx:0 CTS|DSR|CD
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3

典型的 dmegs 輸出:

[370425.080452] ttyS0: 24 input overrun(s)
[370426.092382] ttyS0: 30 input overrun(s)
[370427.109291] ttyS0: 36 input overrun(s)
[370428.173344] ttyS0: 28 input overrun(s)
[370429.583198] ttyS0: 26 input overrun(s)
[370430.638700] ttyS0: 32 input overrun(s)

:( :( :(

輸出sudo setserial -v -a -g /dev/ttyS0

/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
   Baud_base: 115200, close_delay: 50, divisor: 0
   closing_wait: 3000
   Flags: spd_normal skip_test low_latency

根據 Fedora 16 文件/etc/rc.serial負責設置串列線路。

您的 15 和 16 安裝之間有什麼變化嗎?

設置“低延​​遲”和“rx/tx_trigger”(如果可能)可能會有所幫助。

我記得 16550A 有一個 15 字節的輸入緩衝區。不知何故,您可以設置在哪個填充級別生成中斷 - 我使用 7 個字節來權衡可靠性和速度(使用 DOS)。也許 rx/tx-trigger about 做了類似的調整。

2012-03-12 更新:

我剛剛檢查了我的工作站(CentOS5 - 應該與 Fedora 相當):

rpm -qd setserial顯示可用的文件。有一個自述文件和一個範例rc.serial文件 - 請參閱自述文件。

除此之外 - 我再次查看了您的輸出:spd_normal對我來說看起來不太好。你想要 115 kb - 所以你應該設置spd_vhi(見 man setserial)。原因是您不能請求超過 38.4 kb,因為 UART 標準不允許更多。後來是 57.6kb,然後是 115kb——也必須有一個“技巧”來設置這些速度。

引用自:https://unix.stackexchange.com/questions/33239