2

現在の私の仕事は、QNX から Linux に 16550 互換チップのドライバを移植することです。このチップはいくつかの UART を提供し、それぞれが標準の 16550 シリアル ポートと見なされますが、いくつかの拡張機能があります。

現在、QNX では、デバイス ドライバー全体がスタンドアロンの実行可能ファイルにパックされています。これは、ドライバーとして、および提供された UART (ボー レート、ループバック モードなど) の初期コンフィギュレーターとして機能します。デバイス ドライバーがあるため、これは QNX では当然のことです。ユーザー空間で実行され、標準の実行可能ファイルにすぎません。

Linux の OTOH では、ドライバーはカーネル モジュールとして実装され、自由にロードできます。さらに、そのモジュールはプロデューサーによって提供されるため、あまり変更したりパッチを当てたりしたくありません。

私にとっての残りのタスクは、それらの UART のパラメーターを設定するためのメカニズムを提供することです。それらは /dev/ttyPREFIXX デバイスとして認識されます。私は、対象のシリアル ポートで標準の termios (つまり、tcsetattr() または ioctls) を呼び出す標準の C プログラム実行可能ファイルを介してそれを行うつもりです。

私のアプローチは正しいですか?はいの場合、永続的な構成を実現する方法は? 私が事実を認識しているように (この例から: http://www.easysw.com/~mike/serial/serial.htmlから)、termios 関数は OPEN デバイスで動作します。つまり、デバイスを開き、パラメーターを設定し、読み取りまたは書き込みを行ってから、ポートを閉じます。ポートを閉じた後、設定 (ボーレートなど) が失われますか? すでにハードウェアに保存されているため、そうでないことを願っています。

誰かが構成が永続的であることを確認できますか? そうでない場合、そのポートを再度開き、事前に確立されたパラメーターでそれを期待する将来のアプリケーションのために、その永続性を達成する方法は? そうでない場合は、モジュール カーネルを変更していくつかのパラメーターを受け入れ、ロード時に構成を行う必要がありますか?

私が現在意図しているアプローチは、ポートを開き、構成を設定し、ポートを閉じる C 実行可能ファイルを作成することです。後者のアプリケーションが目的の構成のポートを認識できることを願っています。

ありがとうございました。

4

2 に答える 2

1

と を参照してsttyくださいsetserial。由緒あるSerial-HOWTO (うわー、最後に HOWTO を誰かに勧めたのはいつですか?) もおそらく良い出発点です。

于 2012-08-15T20:53:22.887 に答える
0

ここで答えを見つけました: http://www.gnu.org/software/libc/manual/html_node/Mode-Functions.html#Mode-Functions

引用: 「tcgetattr と tcsetattr はファイル記述子で端末デバイスを指定しますが、属性は端末デバイス自体のものであり、ファイル記述子のものではありません。これは、端末属性の変更の影響が持続することを意味します。別のプロセスが端末を開いた場合、ファイルを後で変更すると、属性の変更で最初に指定した開いているファイル記述子とは関係なくても、変更された属性が表示されます。」

これで問題は解決します。

于 2012-08-17T19:10:40.267 に答える