0

これがこの質問の間違った場所である場合はお詫びします。現在、問題がどのレベルにあるかがわからないため、賭けを少しヘッジしています.

システムは、TI 独自の SDK / LSP / BusyBox カーネルを実行する LeopardBoard DM368 です。

デフォルトでは、システムには 1 つの UART が有効な UART0 があり、これは /dev/ttyS0 としてマウントされ、これも bootargs を介して使用/起動されますconsole=ttyS0,115200n8 earlyprintk

UART1 を /dev/ttyS1 として有効にしたいので、pinmux、クロックなどを設定する低レベルのボード初期化コードを実行しました。

起動時に、低レベルの init が (私が追加した printk を介して) UART1 が有効になっていることを報告し、ドライバー コードも幸福を報告します。

[    0.547812] serial8250.0: ttyS0 at MMIO 0x1c20000 (irq = 40) is a 16550A
[    0.569849] serial8250.0: ttyS1 at MMIO 0x1d06000 (irq = 41) is a 16550A

ただし、ポートは (確実に) /dev/ に表示されず、ステータス (フロー制御ビット) に不一致があり、ハングしたり、送信されなかったりする可能性があると思われます。

cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x01C20000 irq:40 tx:97998 rx:0 CTS|DSR
1: uart:16550A mmio:0x01D06000 irq:41 tx:0 rx:0 DSR

コマンドラインから変更しようとすると、エラーが発生します。

>: stty -F /dev/ttyS1
stty: /dev/ttyS1: Inappropriate ioctl for device

奇妙なことに、bootargs をconsole=ttyS1,115200n8 earlyprintkポートに変更すると完全に機能し、ttyS0 も正しく初期化されて機能します。

cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x01C20000 irq:40 tx:0 rx:0 CTS|DSR
1: uart:16550A mmio:0x01D06000 irq:41 tx:11563 rx:0 RTS|DTR|DSR

これで問題ありませんが、ブートローダは UART0 を使用する必要があるため、すべてのコンソールを ttyS0 に保持し、2 次通信用に ttyS1 を使用するとよいでしょう。

追加する編集: いくつかの printk を serial_core.c に挿入しましたが、ttyS1 に対して uart_open() が呼び出されないようです。Linux の init/startup シーケンスで変更が必要なものだと思いますか?

私は頑固な Linux ハッカーではないので、カーネル コードや初期化シーケンスなどで明らかな/ばかげたことを見逃している可能性は十分にあります。

どんな考えでも大歓迎です!

4

1 に答える 1

0

Linux ボードの素敵な章が解決しましたmknod /dev/ttyS1 c 4 65。どこかに挿入する必要があります。

これが(どうやら)ttyS0どのポートで発生するのかconsole、私にはわかりませんが、今のところ重要なのはそれが機能することだけです!

コメント/理由に関する詳細情報は、私自身の知識/将来の世代にとって歓迎されます.

于 2013-10-17T12:45:01.163 に答える