ttyS1/uart1 が初期化されましたが、/dev/ttyS1 からアクセスできません。

ttyS1/uart1 が初期化されましたが、/dev/ttyS1 からアクセスできません。

どのレベルで問題があるのか​​よくわかりません。

システムは、TIの独自のSDK/LSP/BusyBoxカーネルを実行するLeopardBoard DM368です。コアLinuxカーネルは2.6.xなので、serial_core.cドライバモデルが使用されます。

デフォルトでは、システムにはアクティブなUARTであるUART0が1つあります。これはマウント後に/dev/ttyS0bootargsを使用して呼び出すこともできますconsole=ttyS0,115200n8 earlyprintk

UART1を有効にしようとしているので、/dev/ttyS1ピンマックス、クロックなどを設定する低レベルのボード初期化コードが完成しました。

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

[    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/(as /dev/ttyS1)には表示されず、ステータス(フロー制御ビット)に違いがあるため、ポートが中断または送信されないと思われます。

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: can't open '/dev/ttyS1': No such file or directory

奇妙なことに、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に保持し、セカンダリ通信にはttyS1を使用するのが最善です。

私はserial_core.cにいくつかのprintkを挿入しましたが、uart_open()はttyS1に対して呼び出されないようです。 Linux init / startupシーケンスで修正する必要がある部分があるようです。

編集済み:自分をだまして作って作って、echo >/dev/ttyS1また作ったから文書という/dev/ttyS1問題がやや曖昧になりました。今99%確信し/dev/ttyS1ていますいいえ作られた。

答え1

mknod /dev/ttyS1 c 4 65

/dev読み取り専用の場合は、オプションなしでインストールされている書き込み可能ディレクトリを使用してくださいnodev。)

ノードがエラーなしで作成された場合は、パッチがノードを読み書きするかどうかを確認するか、端末エミュレータを使用できます。

問題は、ノードが作成されないことです。

自動マジックを使用してファイルシステムを動的に開発するdevfs場合udev登録する途中で質問があります。しかし、ほとんどのコードがttyS0を呼び出すのと同じであるため、シリアルポートを追加することは、いくつかのプラットフォームファイルの配列に設定行を追加するのと同じだと思います。

このようにdev fsを使用しない場合は、MAKEDEVビルドツリーに新しいデバイスを静的に作成するために手動で行を追加できるファイルがある可能性があります。また、initスクリプトによって開発ノードが生成されるシステムも見たことがあります。

関連情報