どのレベルで問題があるのかよくわかりません。
システムは、TIの独自のSDK/LSP/BusyBoxカーネルを実行するLeopardBoard DM368です。コアLinuxカーネルは2.6.xなので、serial_core.cドライバモデルが使用されます。
デフォルトでは、システムにはアクティブなUARTであるUART0が1つあります。これはマウント後に/dev/ttyS0
bootargsを使用して呼び出すこともできます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スクリプトによって開発ノードが生成されるシステムも見たことがあります。