パターンが一致しない場合は、Linuxで既存のドライバを使用して新しいデバイスを設定できますか?

パターンが一致しない場合は、Linuxで既存のドライバを使用して新しいデバイスを設定できますか?

Ubuntu 20.04.3用のUSBデバイスがあります。メーカーはライブラリとドライバを提供しています。

ドライバをインストールしてデバイスを操作できますが、カーネルが更新されるたびにドライバを新しいツリーに再インストールする必要があります。私はこれがdkmsの仕事であることを知っていて、あまりにも難しく見えなかったので、この問題を解決するために働き始めましたが、一歩後退してデバイスを操作するより簡単で/より良い方法があるかどうか疑問に思いました。ほとんどの人はユーザーベースはWindowsなので、Linux側には開発時間があまり与えられません。とにかく、私はLinuxがどのように仕事をしているのかをもっと知りたいです。

彼らが提供するドライバはわずかに修正されたExarドライバです。バージョンとネイティブExarドライバの違いを見てみると、基本的に彼らがすることは、ベンダ番号と製品ID番号をコードに追加することでデバイスがドライバと互換性があると認識され、適切にコードブロック(特定のデバイスがデバイス記述子と一致するときに使用されます)するExarチップです。

に基づいてこの非常に便利なページそして、インターネットの他のソースから私が理解したように、各ドライバには、デフォルトで許可されているデバイスの種類に関する規則を持つmodule.aliasファイルがあります。デバイスが接続されると、システムはデバイスから情報を抽出し、デバイスのモダリアファイルを生成します。次に、デバイスモードエイリアスをmodule.aliasファイルのルールと一致させる最も具体的な最初のドライバは、デバイスに割り当てられたドライバです。

したがって、私のデバイスにExarチップがあると仮定し、ドライバがそれを受け入れてデフォルトでExarチップとして認識した場合、Exarドライバを使用して動作させることができます。ただし、製造元が独自のカスタムデバイス記述子を配置したため、modprobeはそのデバイスがネイティブExarドライバと互換性があることを認識しません。

デバイスがデフォルトのExarドライバと実際に互換性があるか、ドライバをコピーしてシステムがそれを尊重するように少し変更することに加えて、Exarデバイスが隠されているかどうかをシステムに知らせる方法はありますか?サブデバイス? modprobeに関する限り、デバイス記述子のエイリアスのようなものですか?

それとも、コードを複製するのではなく、デフォルトのexarドライバを活用し、すべてをここに渡してこのデバイス用の他のドライバを書く方法はありますか?これにより、チップメーカーからアップデートの恩恵を受けることができます。

それともメーカーのアプローチが最善の方法なので、dkmsを使い続けるべきですか?

私はudevルールを使ってドライバをデバイスにバインドしてアンバインドする方法の例を見ましたが、ドライバが一致しない場合はとにかくバインドされないと思いました。それでも、それが「最善の」方法でしょうか?

ベストアンサー1

@ReedGhostがコメントで非常に便利に提案したように(ありがとう!)これこれが私がやりたいことです。組み込みxr_serialモジュールを見つけ、デバイスベンダーと製品IDをnewidファイルに反映しました。内蔵ドライバは、デバイスを互換デバイスとして認識して接続したときにロードされました。

ただし、組み込みのexarドライバは異なる製品IDを持つ複数のデバイス用に作成されているため、特定のユースケースは解決されません。各特定の製品IDに対して実行される特定のコードブロックを指定するif-then-elseチェーンがあります。したがって、一部の機能は、私のデバイスIDのために他のセクションの1つを実行する必要がありますが、コードのelseセクションに移動するため、まだ機能しません。

ドライバが認識できるように新しいチップを追加するのではなく、デバイスIDを使用している特定のチップのIDになりすましたり交換したりする必要があることに気づきました。

編集:実際には、製造元から提供されたドライバを使用しているデバイス用に別のドライバを作成してみることもできます。そうすることは、アップデートの利点を得るためのより正しい方法であるようです。この問題そして この問題これはこれを発見し、同じ問題があるすべての人にとって良い出発点のようです。これまで私が使用したdkmsドライバを更新するだけです。

おすすめ記事