0

USB デバイスをテストするために、1 つの小さな usbtest ドライバーを作成しました。Linux カーネル バージョン 3.2.0 と ubuntu 12.04 を使用しています。

そのドライバーを問題なく PC に正常にロードでき、ロードされたドライバーを障害状態なしで使用できます。

私の Linux PC 情報 :: uname -a Linux ci5lub021305 3.2.0-29-generic-pae の出力 #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux

ドライバのロードに失敗した別の PC の Linux PC 情報 :: uname -a Linux ci5lub021302 3.2.0-51-generic-pae #77-Ubuntu SMP Wed Jul 24 20:40:32 UTC 2013 i686 i686 i386 GNU/Linux

しかし、そのドライバーをカーネルバージョンが異なる別のLinuxプラットフォームにロードしようとすると、そのドライバーのロード中に次のようになります。

insmod: 'usbtest.ko' の挿入エラー: -1 無効なモジュール形式

モジュールのバージョンに関するエラーを示す dmesg を見ました

usbtest: シンボル module_layout のバージョンについて意見が一致しません

この問題に関する別のフォーラムでも見たことがありますが、別の PC でドライバーを再度コンパイルすることを提案しています。しかし、それは私が考える適切な解決策ではありません。

クライアントが 2.6.30 から 3.9 カーネルまでの任意のカーネルのドライバーを必要としているため、このバージョンの依存関係の問題を解決する方法を知っている人はいますか?

そのため、特定のカーネル バージョンに応じて、コンパイルされたドライバーを任意の Linux カーネル バージョンにロードできるように、特定のソリューションが必要です。

これは私にとって重大な問題の 1 つであるため、上記の問題をできるだけ早く解決するのを手伝ってください。

ご支援いただきありがとうございます。

4

1 に答える 1

2

複数のバージョンのカーネルで動作するように意図されたモジュールを作成#ifdefしているため、コードを適切にビルドするためにマクロと構造を使用する必要がある可能性があります。

にある定義を利用する必要がありますlinux/version.h

于 2013-09-11T10:53:26.237 に答える