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->termiosttytty_struct。 Linux 3.6では、ポインタは別の構造内の構造になりました。

tty->termiosコード全体を変更することでこの問題を解決できます。tty.termiosしかし、これが唯一の問題ではないでしょう。製造元に問い合わせて、更新されたドライバを要求する必要があります。

答え3

あなたの答えをテストしましたが、実際に次の行を書き直すことで問題が解決しました。

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

vizzini.koドライバはうまくコンパイルされ、insmodを使用してロードできます。

関連情報