我正在尝试在我的计算机上编译 Realtek 驱动程序,但出现以下错误:
make -C /lib/modules/3.11.0-12-generic/build M=/home/david/Downloads/rtl8188ce-linux-driver modules
make[1]: Entering directory `/usr/src/linux-headers-3.11.0-12-generic'
CC [M] /home/david/Downloads/rtl8188ce-linux-driver/base.o
/home/david/Downloads/rtl8188ce-linux-driver/base.c: In function ‘rtl_action_proc’:
/home/david/Downloads/rtl8188ce-linux-driver/base.c:885:32: error: ‘struct ieee80211_conf’ has no member named ‘channel’
rx_status.freq = hw->conf.channel->center_freq;
^
/home/david/Downloads/rtl8188ce-linux-driver/base.c:886:32: error: ‘struct ieee80211_conf’ has no member named ‘channel’
rx_status.band = hw->conf.channel->band;
^
/home/david/Downloads/rtl8188ce-linux-driver/base.c: In function ‘rtl_send_smps_action’:
/home/david/Downloads/rtl8188ce-linux-driver/base.c:1451:24: error: ‘struct ieee80211_conf’ has no member named ‘channel’
info->band = hw->conf.channel->band;
^
make[2]: *** [/home/david/Downloads/rtl8188ce-linux-driver/base.o] Error 1
make[1]: *** [_module_/home/david/Downloads/rtl8188ce-linux-driver] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.11.0-12-generic'
make: *** [all] Error 2
我怎样才能解决这个问题?
答案1
显然,自 13.04 以来,Linux 标头已经发生了足够多的变化,以致于破坏了此驱动程序。经过多日的努力,我终于修复了编译问题并让驱动程序正常运行。您可以在我的 Github 存储库中找到修复后的驱动程序,以及我对 Realtek 发布的原始版本所做的所有更改的详细信息: https://github.com/FreedomBen/rtl8188ce-linux-driver
对于那些感兴趣的人,最大的变化是删除了create_proc_entry()
将调试信息放入目录的其他相关函数/proc
。我还没有转换代码以使用替换函数,所以到目前为止不会报告调试信息。但这不会以任何方式影响驱动程序的性能。
另一个重大变化是重组struct ieee80211_hw
,struct ieee80211_conf
,并添加struct cfg80211_chan_def
它取代了以前的channel
成员ieee80211_conf
。
还有一个新的辅助功能cfg80211_get_chandef_type()
用于检索通道类型,而不是旧的直接方法。
答案2
rtl8188ce 不再支持内核 3.9 及更高版本。
我的台式机有同样的WIFI卡。
我现在使用的对开源支持最好的卡是 Atheros。
选项#1 使用“Ubuntu 12.04 LTS”,因为它通过 rtl8192ce 驱动程序支持 rtl8188ce。
选项#2 研究支持开源内核的 wifi 卡。
选项#3 经过研究后,使用可与最新内核 3.12 及更高版本兼容的卡。
有了 Realtek 的体验后,我不会再使用它们了,因为 rtl8188ce 对于 Windows 和 Linux 来说是一张糟糕的卡。