Fedora 16とシリアルポートに問題があります。
私は私が開発しているセットトップボックスを監視するためにシリアルポートを使用しています。 STBはLinux上で実行され、起動時にシリアルインタフェースを介して作業しているプログラムを起動します。
今私のプログラムはデバッグするときbuffer overrun
とdmesg
。
シリアル出力が読み取れなくなるため、アプリケーションのデバッグがめちゃくちゃになります。
だから私を悩ませるのは、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
答え1
Fedora 16の文書によると/etc/rc.serialシリアルラインの設定を担当します。
バージョン15とバージョン16のインストール間に変更はありますか?
「低レイテンシ」と「rx/tx_trigger」(可能な場合)を設定すると便利です。
16550Aには15バイトの入力バッファがあったことを覚えています。割り込みが発生するパディングレベルを何らかの方法で設定できます。私は安定性と速度をトレードオフするために7バイトを使用しました(DOSを使用)。おそらくrx / tx-triggerも同様に調整されます。
2012年3月12日更新:
私はワークステーションを確認しました(CentOS5 - Fedoraに似ている必要があります)。
rpm -qd setserial
利用可能な文書を表示します。 Readmeファイルと例があります。rc.シリアルドキュメント - Readmeファイルを参照してください。
それ以外は - あなたの結果を見直しました。通常速度私は良く見えません。 115kbが欲しいので設定する必要があります。spd_vhi(man setserialを参照)これは、UART標準がそれ以上を許可しないため、要求されたサイズが38.4kbを超えることができないためです。後には57.6kb、その後は115kbでした。これらの速度も設定するには「トリック」が必要です。
答え2
同様の問題が発生しました。ダウンタイムを競い合う他のデバイスからそれを隔離することができました。私の場合、ラップトップのSDカードリーダーがシリアルデバイスと時間をかけて競っていました。カードリーダードライバ(rmmod)を無効にすると、オーバーランが消えました。以下を使用して、同じIRQにあるデバイスを表示できます。cat /proc/interrupts