Ralink RT2870用のドライバのコンパイル中にエラーが発生しました。

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

答え1

問題は、最近の3.xカーネルでカーネルヘッダ/インタフェースの1つが変更されたことです。 UID/GID の値はもともと正規整数と呼ばれていましたが、今は単一要素を持つ構造です。以前の定義に依存するすべてのコードは、新しいカーネルヘッダーと一致するように更新されるまでコンパイルされません。

現在、Ubuntuのインストールのためにvirtualbox-guest-utilsで同様のバグをパッチしようとしています。理論的には、エラーに報告された行番号で->i_uid =with->i_uid.val =またはwith->i_gid =のインスタンスを見つけて置き換えることで->i_gid.val =問題は解決されます(しかしそれはできません)。この時点で、関係のない他のエラーが原因でコンパイルが失敗したことを保証します。

最善の方法は、コードの元の作成者に連絡して、最新のカーネルのソースコードの更新版を入手することです。

答え2

このサイトの他のドライバでコンパイルエラーの修正が見つかりました。 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;

答え3

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

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

デフォルトでは、コードはバグがあるか、プラットフォームには適していませんが、make正常に動作します。

答え4

このソリューションは私にとって効果的です。私が従う手順は次のとおりです。

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

  2. 製造元のLinuxドライバ(CDにデバイスに含まれています)を保存し、フォルダに解凍しました。

  3. makeそのフォルダに(as)を入力しましたが、rootエラーが発生しました。それで上記のように修正したところ効果がありました。

  4. make install(例:)と入力してrootコンピュータを再起動しましたが、ワイヤレスインターフェイスが認識されました。私はそれを整理し、働いた。 ;)

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

関連情報