web-dev-qa-db-ja.com

Ralink RT2870のドライバーのコンパイルエラー

Kali Linuxにrosewill RNX-N600UBEワイヤレスカード(Ralink RT2870チップセット)のドライバーをインストールしようとしています。ドライバーをウェブサイトからダウンロードして解凍/解凍しましたが、「make」コマンドを実行しようとすると、このエラーが発生します。

/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.c:1156:20: error: incompatible types when assigning to type ‘int’ from type ‘kuid_t’
/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.c:1157:20: error: incompatible types when assigning to type ‘int’ from type ‘kgid_t’
make[4]: *** [/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux/../../os/linux/rt_linux.o] Error 1
make[3]: *** [_module_/home/fox/System/2011_0427_RT3572_Linux_STA_v2.5.0.0.DPO/os/linux] Error 2
make[2]: *** [sub-make] Error 2
make[1]: *** [all] Error 2
14
Fox

問題は、カーネルヘッダー/インターフェースの1つが最近の3.xカーネルで変更されたことです。 UID/GID値が最初は通常の整数と呼ばれていたところ、現在は単一の要素を持つ構造体になっています。古いカーネル定義に依存するコードは、新しいカーネルヘッダーに一致するように更新されるまで、コンパイルに失敗します。

現在、Ubuntuのインストール用にvirtualbox-guest-utilsの同様のエラーにパッチを適用する実験を行っています。理論的には、エラーで報告された行番号で->i_uid =のインスタンスを->i_uid.val =に、または->i_gid =->i_gid.val =に置き換えて、問題を解決する必要があります(ただし、現時点では、コンパイルは別の無関係なエラーで失敗しているため)。

あなたの最善の策は、新しいカーネルで動作するソースの更新バージョンについて、コードの元の作者に連絡することです。

19
Jason Musgrove

このウェブサイトの別のドライバーでコンパイルエラーの修正を見つけました: http://www.arnelborja.com/compiling-rt2870-wifi-driver-in-Fedora/

以下はパッチの内容です:

--- include/os/rt_linux.h   2013-09-12 13:27:14.000000000 +0800
+++ include/os/rt_linux.h.patched   2014-03-23 11:45:03.907628847 +0800
@@ -279,8 +279,8 @@ typedef struct file* RTMP_OS_FD;

 typedef struct _OS_FS_INFO_
 {
-   int             fsuid;
-   int             fsgid;
+   kuid_t              fsuid;
+   kgid_t              fsgid;
    mm_segment_t    fs;
 } OS_FS_INFO;
10
Geert Kroone

makeはエラーのみを報告しますが、実際にはコンパイラー(おそらくgcc)からのエラーです。

error: incompatible types when assigning to type ‘int’ from type ‘kuid_t’ 

基本的に、コードはバグがあるか、プラットフォームにとって不適切ですが、makeは正しく機能します。

2
lgeorget

この解決策は私にとってうまくいきました。私が従った手順は:

  1. 私は here から私のディストリビューション(Debian Jessie)の手順に従いました。

  2. メーカーのLinux用ドライバー(CDROMに同梱されています)を保存し、フォルダに解凍しました。

  3. フォルダーにmakerootとして)と入力したところ、エラーが発生しました。だから、私は上記の修正を行い、それはうまくいきました。

  4. make installrootとして)、コンピューターを再起動し、ワイヤレスインターフェイスが認識されました。私はそれを設定し、それは働いた。 ;)

私のシステムは、Debian Jessie、カーネル3.16.0-4-AMD64、gnomeを使用しています。

1
Isaias Soares