異常な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シリーズハウツー詳細については。

おすすめ記事