私はx86ベースのマイクロコントローラであるVortex86DX CPUベースのボードを持っています。 5つの16550A UARTがあり、そのうち4つ(COM1-COM4)は共通ioポートアドレス(0x3f8、0x2f8、0x3e8、0x2e8)にありますが、5番目(COM9)は0x010、irq 9にあります。
最初の4つのUARTが検出され、問題はありません。問題は、5番目のCOM9(COM9)をLinuxで動作させることができないことです。 COM9はスタンドアロンDOSアプリケーションで動作しますが、Linuxではこれを検出することはできません。
これまで私がしたこと:
追加UARTを次に追加します。/ドライバ/tty/シリアル/8250/
DEBUG_AUTOCONFを有効にする/drivers/tty/serial/8250/8250.cこれにより、いつどのアドレスが閲覧されるかを確認できます。
編集済み/arch/x86/kernel/setup.cこれはioポート0x010がdma1用に予約されている既存のゾーンと重複しているためです。
結果:カーネルはアドレス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%互換ではありません。