現在の私の仕事は、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 実行可能ファイルを作成することです。後者のアプリケーションが目的の構成のポートを認識できることを願っています。
ありがとうございました。