異常なioポートアドレスで16550A UARTを初期化/検出できません。

異常なioポートアドレスで16550A UARTを初期化/検出できません。

私はx86ベースのマイクロコントローラであるVortex86DX CPUベースのボードを持っています。 5つの16550A UARTがあり、そのうち4つ(COM1-COM4)は共通ioポートアドレス(0x3f8、0x2f8、0x3e8、0x2e8)にありますが、5番目(COM9)は0x010、irq 9にあります。

ボルテックス86DX

最初の4つのUARTが検出され、問題はありません。問題は、5番目のCOM9(COM9)をLinuxで動作させることができないことです。 COM9はスタンドアロンDOSアプリケーションで動作しますが、Linuxではこれを検出することはできません。

これまで私がしたこと:

結果:カーネルはアドレス0x010からUARTを取得できません。

そのため、ioポート0x010から直接データを読み取るioポートプロービングユーティリティを作成しましたが、0x010〜0x017領域で16550Aレジスタを検出できませんでした。そこには何もないようでした。スクラッチパッド(オフセット+ 7)からデータを書き込んで再読み込みしようとしましたが、アドレス0x017では何も取得できませんでした。

CPUのデータシートには多くの内容が記載されていません。これは、COM9に対して「何か」を実行するサウスブリッジ・レジスタに制御ビットがあることを示します。私はこのビットを書くためにPCIユーティリティを書いていますが、ioポートスキャンを実行するときにCOMポートを有効にしたり何も変更しないようです。

この時点で助けてくれてありがとう。

答え1

なぜ、標準外のシリアルI / OポートとIRQのサポートを追加するためにカーネルソースコードを変更するのに苦労したのかわかりません。プログラムsetserial(8)がこれを構成できる必要があります。このような:

# setserial ttyS4 address 0x10 irq 9

バラよりLinuxシリーズハウツー詳細については。

答え2

BIOSまたはLinuxがSouthbridgeレジスタのCOM9ポートを無効にしたようです。

登録する:

  • 「内部UART9制御レジスタ」をデフォルト値:0x00810010にリセットする必要があります。
  • COM9を再度イネーブルするには、オンチップデバイス制御レジスタのビット9をクリアする必要があります。

なぜかどこでこれが無効になったのかわかりません。

デバイスドライバでCOM9 UARTを標準値に設定すると検出できます。

LinuxにはVortex86DX用の新しいx86チップタイプが必要です。 100%互換ではありません。

関連情報