2017-09-05 71 views
0

我最近买了一台联想500-15ACZ笔记本,并在其上安装了Ubuntu 16.04。安装后,我发现我无法连接到Wifi。当我搜索这个问题时,这似乎是Broadcom无线网卡的常见问题。我在askubuntu上找到this question,并按照路易斯阿尔瓦拉多的回答的步骤。
命令lspci -nn -d 14e4:告诉我,我的设备的pci.id是14e4:43ae rev 02,这在Linux中还不支持。
然而,在GIT中,试图通过反向移植来解决这个脚本(link to project):Broadcom 14e4的Backport安装脚本:43ae wifi控制器故障

 #!/bin/bash 

cd /tmp 
git clone https://github.com/kvalo/ath10k-firmware.git 
cd ath10k-firmware/QCA9377/hw1.0 
sudo mkdir -p /lib/firmware/ath10k/QCA9377/hw1.0 
sudo cp board.bin /lib/firmware/ath10k/QCA9377/hw1.0 
sudo cp firmware-5.bin_WLAN.TF.1.0-00267-1 /lib/firmware/ath10k/QCA9377/hw1.0/firmware-5.bin 
sudo modprobe -r ath10k_pci 
cd /tmp 
wget https://www.kernel.org/pub/linux/kernel/projects/backports/2015/11/20/backports-20151120.tar.gz 
tar -xf backports-20151120.tar.gz 
cd backports-20151120 
make defconfig-ath10k 
make 
sudo make install

但是,当我试图运行此,make引发了以下错误:

 

     Building backport-include/backport/autoconf.h ... done. 
     CC [M] /tmp/backports-20151120/compat/main.o 
     In file included from /tmp/backports-20151120/backport-include/backport/backport.h:7:0, 
     from :0: 
     ./include/asm-generic/qrwlock.h: In function ‘__qrwlock_write_byte’: 
     /tmp/backports-20151120/backport-include/linux/kconfig.h:25:28: error: implicit declaration of function ‘config_enabled’ [-Werror=implicit-function-declaration] 
     #define IS_BUILTIN(option) config_enabled(option) 
            ^
     ./include/asm-generic/qrwlock.h:156:26: note: in expansion of macro ‘IS_BUILTIN’ 
     return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); 
           ^
     ./include/asm-generic/qrwlock.h:156:37: error: ‘CONFIG_CPU_BIG_ENDIAN’ undeclared (first use in this function) 
     return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); 
              ^
     /tmp/backports-20151120/backport-include/linux/kconfig.h:25:43: note: in definition of macro ‘IS_BUILTIN’ 
     #define IS_BUILTIN(option) config_enabled(option) 
               ^
     ./include/asm-generic/qrwlock.h:156:37: note: each undeclared identifier is reported only once for each function it appears in 
     return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); 
              ^
     /tmp/backports-20151120/backport-include/linux/kconfig.h:25:43: note: in definition of macro ‘IS_BUILTIN’ 
     #define IS_BUILTIN(option) config_enabled(option) 
               ^
     cc1: some warnings being treated as errors 
     scripts/Makefile.build:294: recipe for target '/tmp/backports-20151120/compat/main.o' failed 
     make[6]: *** [/tmp/backports-20151120/compat/main.o] Error 1 
     scripts/Makefile.build:567: recipe for target '/tmp/backports-20151120/compat' failed 
     make[5]: *** [/tmp/backports-20151120/compat] Error 2 
     Makefile:1524: recipe for target '_module_/tmp/backports-20151120' failed 
     make[4]: *** [_module_/tmp/backports-20151120] Error 2 
     Makefile.build:6: recipe for target 'modules' failed 
     make[3]: *** [modules] Error 2 
     Makefile.real:88: recipe for target 'modules' failed 
     make[2]: *** [modules] Error 2 
     Makefile:40: recipe for target 'modules' failed 
     make[1]: *** [modules] Error 2 
     Makefile:30: recipe for target 'default' failed 
     make: *** [default] Error 2 
     CC [M] /tmp/backports-20151120/compat/main.o 
     In file included from /tmp/backports-20151120/backport-include/backport/backport.h:7:0, 
     from :0: 
     ./include/asm-generic/qrwlock.h: In function ‘__qrwlock_write_byte’: 
     /tmp/backports-20151120/backport-include/linux/kconfig.h:25:28: error: implicit declaration of function ‘config_enabled’ [-Werror=implicit-function-declaration] 
     #define IS_BUILTIN(option) config_enabled(option) 
            ^
     ./include/asm-generic/qrwlock.h:156:26: note: in expansion of macro ‘IS_BUILTIN’ 
     return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); 
           ^
     ./include/asm-generic/qrwlock.h:156:37: error: ‘CONFIG_CPU_BIG_ENDIAN’ undeclared (first use in this function) 
     return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); 
              ^
     /tmp/backports-20151120/backport-include/linux/kconfig.h:25:43: note: in definition of macro ‘IS_BUILTIN’ 
     #define IS_BUILTIN(option) config_enabled(option) 
               ^
     ./include/asm-generic/qrwlock.h:156:37: note: each undeclared identifier is reported only once for each function it appears in 
     return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); 
              ^
     /tmp/backports-20151120/backport-include/linux/kconfig.h:25:43: note: in definition of macro ‘IS_BUILTIN’ 
     #define IS_BUILTIN(option) config_enabled(option) 
               ^
     cc1: some warnings being treated as errors 
     scripts/Makefile.build:294: recipe for target '/tmp/backports-20151120/compat/main.o' failed 
     make[5]: *** [/tmp/backports-20151120/compat/main.o] Error 1 
     scripts/Makefile.build:567: recipe for target '/tmp/backports-20151120/compat' failed 
     make[4]: *** [/tmp/backports-20151120/compat] Error 2 
     Makefile:1524: recipe for target '_module_/tmp/backports-20151120' failed 
     make[3]: *** [_module_/tmp/backports-20151120] Error 2 
     Makefile.build:6: recipe for target 'modules' failed 
     make[2]: *** [modules] Error 2 
     Makefile.real:88: recipe for target 'modules' failed 
     make[1]: *** [modules] Error 2 
     Makefile:40: recipe for target 'install' failed 
     make: *** [install] Error 2 

**Does anyone know how to fix this?** 
Please let me know if you need any other info. 
Thanks in advance!  

更新: 我安装了broadcom- sta-dkms包如你所建议的。不幸的是,你是对的。这没有奏效。
当我试图WL驱动,dmesg | grep -i wl回到

[

12.459884] wl: loading out-of-tree module taints kernel. 
    [ 12.459890] wl: module license 'MIXED/Proprietary' taints kernel. 
    [ 12.468203] wl: module verification failed: signature and/or required key missing - tainting kernel 
    [ 12.487603] wl driver 6.30.223.271 (r587334) failed with code 1001 
    [ 12.487606] ERROR @wl_cfg80211_detach : 
    [ 12.487607] NULL ndev->ieee80211ptr, unable to deref wl 

但是,我怕我不知道这意味着什么。对于其他车手,dmesg什么也没有返回。

回答

0

那么,我会建议保持一致。您有一个Wi-Fi设备,并且您知道它的PCI供应商ID(位于冒号前面)和设备ID - 14e4:43ae。在您的问题中,您没有提供您的lspci的完整摘录,因此您的设备是否确实被确定为Broadcom尚不清楚。但是,如果我们假设它是真的,我们可以搜索它。

这里是WikiDevi page说:

802.11a/b/g/n/ac WLAN + Bluetooth 4.0 NGFF 2230 Mini Card 
WI1 chip1: Broadcom BCM43162 
Probable Linux driver unknown 
PCI ID not yet observed in any mainline kernel/this list 

所以,你可能会看到,这个页面揭示了类似的芯片命名和这样的PCI ID的内核代码认识当前观察这样重要的事情光。后者意味着,根据他们的研究,主内核树中没有一个驱动程序在对应的PCI ID表中具有这样的ID,借助于该ID,内核决定探测给定设备的特定驱动程序。没有关于PCI ID的信息。

但是现在我们确信这个确实是一个Broadcom设备。 看着你摘自脚本(你正试图利用)令我感到困惑了很多,因为它是高通Atheros博通。它尝试从(可能)不受信任的存储库获取QCA固件并编译ath10k反向驱动程序。所以,在这一点上,我们知道仅仅关于编译错误的问题从一开始就是无益的。但是,当然,可以假设没有安装Linux内核头文件包,或者反向移植版本ath10k与您当前的内核不兼容。而已。

因此,很明显我们会寻找Broadcom驱动程序(可能还有Broadcom固件)。从这个角度来看,我可以告诉您,Broadcom设备有三种类型的驱动程序:b43(主要是遗留的),供应商许可的broadcom-stawl)和树中的brcm80211。后者是brcmsmacbrcmfmac的通用名称。 这里有权威页面最多最新信息:

B43 - http://linuxwireless.org/en/users/Drivers/b43/

brcm80211 - https://wireless.wiki.kernel.org/en/users/drivers/brcm80211

而且,或多或少的描述页供应商许可wl

https://wiki.debian.org/wl

我无法在任一页上找到您的PCI ID。这确实证实相应的支持尚未添加。但是,我们可以通过尝试手中的驱动程序来进一步证实这一点。很显然,内核b43brcm80211不适合你,但看看dmesg可能会有用 - 也许,加载了brcm80211但无法找到FW。 如果找不到任何有用的信息,那么尝试wl会很好。该驱动程序通过broadcom-sta包(Debian,Ubuntu)发布,我可以在Ubuntu网站上提及相应的description。 因此,要尝试wl,您需要确保您有适当的Linux标头,然后只需安装broadcom-sta-dkms包。

apt-get update 
apt-get install linux-headers-$(uname -r) 
apt-get install broadcom-sta-dkms 

希望它能编译和安装它。然后,您应该重新启动并查看Wi-Fi会发生什么情况。最有可能的是,这不会有帮助(因为我认为你的设备真的不被支持),但是如果它有效,你将能够使用它。即使您确定您的设备确实无法与wl一起使用,例如brcm80211的情况,也需要查看dmesg的输出结果。然而,例如,寻找一个有效的FW图像(如果dmesg抱怨)是一个单独的问题,应该相应地讨论。

此外,我可以在这个主题上进行扩展,并提到在网络上的某些邮件列表中,一些人已经询问了有关为此设备添加支持的计划。这里是one的链接。因此,如果brcm80211wlbroadcom-sta-dkms)均不能帮助您,您可以考虑发送电子邮件给brcm80211支持者之一。他们的名字和电子邮件地址在page上列出。其中有Broadcom员工。如果你问他们一个好的建议,你也会帮助其他人。

UPDATE

所以,你说b43(也b43_legacy)和brcm80211保持沉默,在dmesg。这可能意味着您的PCI ID不受这些驱动程序的支持。

什么是对wl输出,我可以分享我的输出进行比较:

wl: loading out-of-tree module taints kernel. 
wl: module license 'MIXED/Proprietary' taints kernel. 
Disabling lock debugging due to kernel taint 
wlan0: Broadcom BCM43a0 802.11 Hybrid Wireless Controller 6.30.223.271 (r587334) 

这显然意味着,你的产出减去这一项又给出了某种沉默。但是,要确定您的设备是否不受支持或存在某些固件版本问题,这太晦涩难懂了。

所以,好像没有选择继续留在这里。 但是,您仍然可以考虑ndiswrapper解决方案。在两个词,这是一个特殊的工具/驱动器,可以安装一个适当的INFSYS从Windows驱动程序文件(即你应该得到它你的卡的地方,例如,从CD中提取或来自Broadcom下载网站),以便驱动程序可以像在Windows环境中一样在Linux中运行。这种类型的解决方案有其缺点和局限性。首先,只有无线驱动程序的Windows XP版本都支持,所以如果你有,比如,从供应商的网站一个ZIP压缩包,您需要从Windows XP后命名的目录中提取INFSYS文件(而不是Vista/7/10),并且需要注意CPU架构选择(32位/ 64位)。这里是来自Debian的article,它可能适合Ubuntu。但是总体上这种解决方案可能会面临一些额外的缺点和突然的不良操作(这是单独讨论的话题),并且一般而言,它被认为是缺少驱动程序的不好解决方案。所以,在这种情况下,许多人只是喜欢将其不支持的卡与其他卡交换,或者等到将缺少的支持添加到本地驱动程序之一。随你便。

+0

感谢详细的解答!我目前正在工作,但当我回家时我会尝试你的建议。至于剧本,我试图用这个,因为这个项目的描述说:“_A很小的脚本,应使件14e4:在Linux上43ae博通的Wi-Fi芯片组,我已经使用这个对我的联想IdeaPad 500S在的Wi- Fi在Linux上无法使用。“ – deadpool

+0

不客气。是的,我还在Github上看到过这样的脚本,他们提到了Broadcom,但实际上下载了QCA软件包。这太奇怪了!我无法得到它。另外,请注意,由于我在原始版本中犯了一些错误,因此我做了一些编辑。也就是说,我不小心混淆了'wl'和'brcm80211'驱动程序 - 它们不一样。用两个词来说,在内核中可以使用'b43'(遗留,反向工程)和'brcm80211'(Broadcom的**开源**驱动程序)。 –

+0

'wl'是Broadcom的另一个驱动程序 - 一个官方授权的驱动程序,它是单独发行的(Ubuntu的'broadcom-sta-dkms'软件包)。所以,现在我澄清了区别。有关更多信息,请参阅我的更新答案。 –