Linux USB ドライバのコンパイル

Linux USB ドライバのコンパイル

私は Linux Mint 15 を使用しています。ここで提供されているカーネル v3.5.0 以降の EXAR UART ドライバー ファイル バージョンをコンパイルしようとすると、次のようになります。 http://www.exar.com/connectivity/uart-and-bridging-solutions/usb-uarts/xr21v1410

次のエラーが発生します:

v@lenovo-linux ~/Downloads/xr21v141x-lnx-3.5-pak $ sudo make
make -C /lib/modules/3.8.0-19-generic/build M=/home/v/Downloads/xr21v141x-lnx-3.5-pak
make[1]: Entering directory `/usr/src/linux-headers-3.8.0-19-generic'
  LD      /home/v/Downloads/xr21v141x-lnx-3.5-pak/built-in.o
  CC [M]  /home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.o
/home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.c: In function ‘xr21v141x_tty_set_termios’:
/home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.c:1104:22: error: invalid type argument of ‘->’ (have ‘struct ktermios’)
make[2]: *** [/home/v/Downloads/xr21v141x-lnx-3.5-pak/vizzini.o] Error 1
make[1]: *** [_module_/home/v/Downloads/xr21v141x-lnx-3.5-pak] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.8.0-19-generic'
make: *** [all] Error 2

このエラーを解決するにはどうすればよいですか?

答え1

私は通常、まずウェブサイト上のフォーラムを探して、そこで質問します。これがうまくいかない場合は、自分で修正しようとしますが、通常、このようなエラーがさらに発生し、数回発生したら諦めてしまいます。

これを修正するには:

  1. /home/v/Downloads/xr21v141x-lnx-3.5-pak/ に移動します。
  2. vizzini.c を開く
  3. 1104行目へ
  4. 次のようなものがあるはずだwhatever->whatever
  5. そうでない場合は、ここにその行を投稿してください
  6. はいの場合は、変更してwhatever.whatever再度makeを試してください。

ところで、なぜ root としてビルドするのですか?

答え2

Linuxカーネルのインターフェースは頻繁に変更されます。

  • コードをカーネルに戻し、その後互換性を壊した人がドライバーを修正する必要があります。
  • または、互換性のないインターフェースの変更に対応するためにドライバーを進化させる必要があります。

xr21v1410ドライバはLinux 3.5用に作成されました。1104行目のメッセージは、vizzini.c構造体型の変数が使用されていることを示しています。ソースを見ると、ここはtty->termiosttyです。tty_structLinux 3.6 あたりで、ポインターは別の構造体内の構造体になるように変更されました。

tty->termiosコード全体をに変更することで、この問題を修正できますtty.termios。ただし、これが唯一の問題である可能性は低いです。製造元に連絡して、更新されたドライバーを要求する必要があります。

答え3

あなたの回答をテストしたところ、実際にこの行を書き直すと問題は解決しました。

//  cflag = tty->termios->c_cflag;
cflag = tty->termios.c_cflag;

vizzini.ko ドライバーは正常にコンパイルされ、insmod でロードできます。

関連情報