Ralink 148f:760b mt7601 驱动程序即使打了补丁也无法在 12.04 上构建

Ralink 148f:760b mt7601 驱动程序即使打了补丁也无法在 12.04 上构建

大家好,Ubuntu 粉丝们 ;)

我买了这个便宜的 Ralink wifi 适配器,以为它会像魔术一样工作,就像我习惯的 Ubuntu 一样。;) 但是,这个驱动程序安装给我带来的麻烦比我想象的要多得多。我花了几个小时在主板上搜索,尝试了所有方法。好吧...我从一开始就知道这是正确的方法(我的意思是答案):

Ralink MT7601U (148f:7601) Wi-Fi 适配器安装

但是,即使应用了补丁,我仍得到以下结果:

ahti@ahti:~/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913$ make
make -C tools
make[1]: Siirrytään hakemistoon "/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools"
gcc -g bin2h.c -o bin2h
make[1]: Poistutaan hakemistosta "/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools"
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools/bin2h
cp -f os/linux/Makefile.6 /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/Makefile
make -C /lib/modules/3.2.0-70-generic/build SUBDIRS=/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux modules
make[1]: Siirrytään hakemistoon "/usr/src/linux-headers-3.2.0-70-generic"
  CC [M]  /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o
In file included from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rtmp_os.h:44:0,
                 from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rtmp_comm.h:75,
                 from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rt_config.h:33,
                 from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:28:
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/os/rt_linux.h:282:2: virhe: unknown type name ”kuid_t”
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/os/rt_linux.h:283:2: virhe: unknown type name ”kgid_t”
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c: Funktio ”announce_802_3_packet”:
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:331:16: varoitus: käyttämätön muuttuja ”pAd” [-Wunused-variable]
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c: Funktio ”STA_MonPktSend”:
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:399:9: varoitus: format ”%d” expects argument of type ”int”, but argument 3 has type ”long unsigned int” [-Wformat]
make[2]: *** [/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o] Virhe 1
make[1]: *** [_module_/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux] Virhe 2
make[1]: Poistutaan hakemistosta "/usr/src/linux-headers-3.2.0-70-generic"
make: *** [LINUX] Virhe 2

抱歉,我的控制台输出是芬兰语(顺便问一下,我该如何将这些控制台输出改为英语?对于 apt 和构建工具来说,主要是如果不可能在终端会话中对所有内容都使用英语语言环境?不可能吗?)

但没错,这基本上就是我目前的状况。

我也尝试过使用ndis 包装器方法但是 unshield 无法提取 Windows 驱动程序可执行文件,而且我在任何地方都找不到 .sys/.inf 组合,所以这个想法被放弃了。

任何帮助都感激不尽。我知道这是用户命名空间问题,但我没有做过任何内核编码,尽管我是一名程序员,因此无法独自解决这个问题。

哦,如果需要的话,还有我的系统信息:Ubuntu 12.04(精确),内核:3.2.0-70-generic(#105-Ubuntu SMP Wed Sep 24 19:49:16 UTC 2014),GCC 版本:4.6(x86_64-linux-gnu),Gnome 3.4.2

提前谢谢了!

答案1

我回答我自己。

我太急于打补丁了。如果不打补丁,驱动程序就可以编译。但是,它似乎要么映射不正确,要么就是无法与我的 148f:760b(<- 注意是 b 而不是 1)USB 适配器配合使用。我甚至修改了设备列表以添加新别名,但即使在加载驱动程序或与之相关的一堆其他内容后,适配器仍然无法被识别。

但是当我在 Windows 7 中安装驱动程序(在 Windows XP 上似乎不起作用)并在安装过程完成后将位于 C:/ProgramData/Mediatek Driver/RT2870 Wireless LAN Card/Driver/ 的驱动程序文件夹复制到 Ubuntu 并使用 ndis 包装器和 ndiswrapper-dkms 包加载它时,适配器立即开始工作。实际上,在 Windows 端,出于某种原因它根本无法识别我的 wlan,但在 Ubuntu 上,只需单击一下,我就可以立即无线上网。

因此,虽然这里或那里存在奇怪的行为,但最终还是起作用了。

答案2

您可能不再使用 Ubuntu 12.04,但无论如何,以下是应用补丁时遇到的编译错误的解决方案:

该补丁仅适用于 Linux 内核 >=3.5. 使其与 Ubuntu 12.04 内核兼容3.2你必须做一个小小的更正:

在 中include/os/rt_linux.h,查找以下块。在我的版本中,它从第 280 行开始,但您的版本可能略有不同,具体取决于您从哪里获取源代码:

typedef struct _OS_FS_INFO_
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)
    uid_t               fsuid;
    gid_t               fsgid;
#else
    kuid_t              fsuid;
    kgid_t              fsgid;
#endif
    mm_segment_t    fs;
} OS_FS_INFO;

获取此行(在我的情况下为 282):

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)

并将其更改为

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)

现在尝试编译,它应该可以工作了:)

相关内容