我正在尝试在 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
这个解决方案对我有用。我遵循的程序是:
我按照我的发行版(Debian Jessie)的步骤进行操作这里。
我保存了厂商的Linux驱动程序(光盘中设备附带),并将其解压到一个文件夹中。
在该文件夹中,我输入
make
(asroot
),但出现错误。于是,我做了上面的修改,结果成功了。我输入
make install
(如root
),重新启动计算机,无线接口被识别。我配置了它并且它起作用了。 ;)
我的系统是:Debian Jessie,内核3.16.0-4-amd64,使用gnome。