为 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 内核中的内核标头/接口之一发生了更改。 UID / GID 值最初被称为常规整数,现在它们是具有单个元素的结构。现在,任何依赖旧定义的代码都将无法编译,直到更新以匹配新的内核头。

我目前正在尝试为我的 Ubuntu 安装修补 virtualbox-guest-utils 中的类似错误;理论上,在错误中报告的行号上查找和替换->i_uid =with->i_uid.val =->i_gid =with的实例->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驱动程序(光盘中设备附带),并将其解压到一个文件夹中。

  3. 在该文件夹中,我输入make(as root),但出现错误。于是,我做了上面的修改,结果成功了。

  4. 我输入make install(如root),重新启动计算机,无线接口被识别。我配置了它并且它起作用了。 ;)

我的系统是:Debian Jessie,内核3.16.0-4-amd64,使用gnome。

相关内容