为Ralink RT2870编译驱动程序时出错


14

我试图在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

我认为您可能需要某些版本的东西,也许是编译器?
PlasmaPower 2014年

附带说明一下,为什么Linux新手会摆弄Kali?多数民众赞成在安全测试和攻击的发行,与低级工具。当然不是意味着一个没有经验的Linux用户
MestreLion

Answers:


19

问题在于,内核头文件/接口之一在最近的3.x内核中已更改。在最初将UID / GID值称为正整数的情况下,它们现在是具有单个元素的结构。现在,依赖于较早定义的所有代码都将无法编译,直到对其进行更新以匹配新的内核头文件为止。

我目前正在尝试为我的Ubuntu安装补丁virtualbox-guest-utils中的类似错误。理论上定位和更换的情况下,->i_uid =->i_uid.val =->i_gid =->i_gid.val =上线人数报告错误应该可以解决这个问题(但我不能保证,在这个时间编译现在没有在一个不同的,不相关的,错误对我来说)。

最好的选择是与代码的原始作者联系,以获取与较新内核兼容的源代码的更新版本。


7
经过测试!这确实有效!我改current_fsuid()current_fsuid().val
乔纳森

1
对我来说,我还必须更改current_fsgid()current_fsgid().val
我想

@JonathanLeaderstouché谢谢。但是,将补丁转换intkuid_t似乎也可以解决问题。
热情

10

我在此网站的另一个驱动程序中找到了针对编译错误的修复程序: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;

1
这对于MT7601U驱动程序是一个很好的工作解决方案,该驱动程序也用于Mediatek / Ralink 148F:7601芯片组。(是的,出于搜索引擎优化的原因,我只是添加这些关键字。)
billyjmc

对于Fedora 27上的我的内核4.13.16-302.fc27.x86_64,此功能不再起作用。失败,出现编译错误。
kmonsoor

@billyjmc:刚才注意到,截至-是,这种解决方案并不为内核工作<3.5,其中kuid_tkgid_t进行了介绍。对于这些,k必须丢弃,例如uid_t fsuid;gid_t fsgid;
MestreLion

2

make 仅报告错误,但实际上它们是来自编译器的错误(可能是gcc):

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

基本上,您的代码有错误或不适合您的平台,但make可以正常运行。


1

这个解决方案对我有用。我遵循的过程是:

  1. 我从这里开始进行分发(Debian Jessie)的步骤。

  2. 我保存了制造商的Linux驱动程序(CDROM中的设备随附),然后将其解压缩到文件夹中。

  3. 在该文件夹中,我输入make(为root),但出现错误。因此,我做了上面的修改,并奏效了。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.