Broadcom 14e4的后端安装脚本:43ae wifi控制器失败

时间:2017-09-05 21:59:16

标签: linux-device-driver ubuntu-16.04

我最近买了一台联想500-15ACZ笔记本,并在上面安装了Ubuntu 16.04。安装完成后,我发现无法连接到Wifi。当我搜索问题时,这似乎是Broadcom wifi卡的常见问题。我在askubuntu上找到了this question,并按照路易斯·阿尔瓦拉多的回答步骤 命令lspci -nn -d 14e4:向我显示我的设备的pci.id为14e4:43ae rev 02,Linux尚不支持。
但是,git上有一个脚本(link to project)试图通过backport来解决这个问题:

 #!/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什么都没有。

1 个答案:

答案 0 :(得分: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 设备。 查看脚本中的摘录(您正在尝试使用)会让我感到困惑,因为 Qualcomm Atheros 博通即可。它试图从(可能)不受信任的存储库中获取QCA固件并编译ath10k反向移植的驱动程序。因此,在这一点上,我们知道仅仅关于编译错误的问题从一开始就没有用。但是,当然,可以假设没有安装Linux内核头文件包,或者反向移植的ath10k版本与您当前的内核不兼容。那就是它。

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

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

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

此外,供应商许可的brcmfmac

的或多或少的描述性页面

https://wiki.debian.org/wl

我无法在任何一个页面上找到您的PCI ID。这确实证实尚未增加相应的支持。但是,我们可以通过尝试手上的驱动程序来进一步确认这一点。很明显,内核wlb43不适合您,但查看brcm80211可能有用,或许,{{已加载1}}但无法找到FW。 如果找不到任何有用的东西,那么尝试dmesg会很高兴。这个驱动程序是通过brcm80211包(Debian,Ubuntu)分发的,我可以在Ubuntu网站上提到相应的description。 因此,要尝试wl,您需要确保拥有正确的Linux标头,然后只需安装broadcom-sta包。

wl

希望它能编译并安装它。然后你应该重新启动并查看你的Wi-Fi会发生什么。最有可能的是,这不会有帮助(因为我认为你的设备实际上还不支持),但如果它有效,你就可以使用它。即使您确定您的设备无法与broadcom-sta-dkms一起使用,再次像apt-get update apt-get install linux-headers-$(uname -r) apt-get install broadcom-sta-dkms 一样,值得一看wl输出。但是,在示例中,寻找有效的FW图像(如果brcm80211抱怨它)是一个单独的问题,应该进行相应的讨论。

此外,我可以扩展这个主题,并提到在网络上的某些邮件列表中,一些人已经询问有关添加对此设备的支持的计划。这是链接的one。因此,如果dmesgdmesgbrcm80211)都没有帮助您,您可以考虑向wl个支持者之一发送电子邮件。他们的姓名和电子邮件地址列在page上。其中有Broadcom员工。如果你要求他们提供一些好的建议,你也会帮助其他人。

<强>更新

所以,你说broadcom-sta-dkms(也brcm80211)和b43b43_legacy保持沉默。这可能意味着这些驱动程序不支持您的PCI ID。

brcm80211输出的内容,我可以分享我的输出以进行比较:

dmesg

这显然意味着你的输出减去这个会再次产生某种沉默。但是,如果确定您的设备是否不受支持或存在一些FW问题,那就太晦暗了。

所以,似乎没有选择留在这里。 但是,您仍然可以考虑使用wl解决方案。用两个词来说,它是一个特殊的工具/驱动程序,它允许您从Windows驱动程序安装正确的 inf sys 文件(即您应该为您获取它在某处,例如从CD中提取或从Broadcom网站下载),驱动程序将在Linux中像在Windows环境中一样运行。这种解决方案有其缺点和局限性。首先,仅支持Windows XP版本的无线驱动程序,因此,如果您从供应商的网站获得ZIP包,则需要提取 inf 和来自以Windows XP命名的目录(而不是Vista / 7/10)中的 sys 文件,您需要注意CPU架构选择(32位/ 64位)。这是来自Debian的article,它也可以适合Ubuntu。但是这种解决方案总体上可能会面临一些额外的缺点和突然的不良操作(它是单独谈话的主题),而且一般来说它被认为是缺少驱动程序的糟糕解决方案。因此,在这种情况下,许多人只是喜欢将其不受支持的卡与其他卡交换,或者只是等待将缺少的支持添加到其中一个本机驱动程序。它取决于你。