为什么我的无线驱动程序无法在启动时加载?

为什么我的无线驱动程序无法在启动时加载?

在手动安装任何驱动程序之前,我的无线网卡无法正常工作,因此我决定下载并安装 Broadcom BCM43225 驱动程序。对于我这样的新手来说,理解下载时附带的“readme”文件以从源代码构建驱动程序是一个艰难的过程,但我做到了(哇,这么长的句子)。

我可以正常使用无线很长时间,但不知何故它无法在启动时成功加载(不确定它什么时候停止工作)。

我从源代码构建了相同的驱动程序,以防更新引起内核级别的更改或其他问题,但似乎每次启动都需要另一次全新构建才能使该驱动程序正常工作,因为尝试插入以前构建的模块会导致:

insmod wl.ko
Unknown symbol in module

我能够使用这个 Bash 脚本来让它工作:

lspci -n | grep 14e4
cd /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248
make clean
make
lsmod | grep "brcmsmac\|b43\|ssb\|bcma\|wl"
rmmod b43
rmmod brcmsmac
rmmod ssb
rmmod bcma
rmmod wl
modprobe lib80211
modprobe cfg80211
insmod wl.ko

for i in `find /lib /var -name wl\.ko`; do mv $i ${i}.orig; done
cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless

如果您对构建消息等感兴趣,以下是输出:

user@pc:~$ sudo -i
[sudo] password for user: 
root@pc:~# lspci -n | grep 14e4
02:00.0 0280: 14e4:4357 (rev 01)
root@pc:~# cd /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# make clean
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` clean
make[1]:`/usr/src/linux-headers-3.13.0-48-generic' dizinine giriliyor
CFG80211 API is prefered for this kernel version
/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/Makefile:85: Neither CFG80211 nor Wireless Extension is enabled in kernel
  CLEAN   /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/.tmp_versions
  CLEAN   /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/Module.symvers
make[1]: `/usr/src/linux-headers-3.13.0-48-generic' dizininden çıkılıyor
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# make CONFIG_DEBUG_SECTION_MISMATCH=y
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]:`/usr/src/linux-headers-3.13.0-48-generic' dizinine giriliyor
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  LD      /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/built-in.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/shared/linux_osl.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/wl/sys/wl_linux.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/wl/sys/wl_iw.o
  CC [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/src/wl/sys/wl_cfg80211_hybrid.o
  LD [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o
WARNING: modpost: missing MODULE_LICENSE() in /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o
see include/linux/module.h for more information
WARNING: /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o(.data+0x150f40): Section mismatch in reference from the variable wl_pci_driver to the function .init.text:wl_pci_probe()
The variable wl_pci_driver references
the function __init wl_pci_probe()
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console

  Building modules, stage 2.
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o
see include/linux/module.h for more information
WARNING: /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.o(.data+0x150f40): Section mismatch in reference from the variable wl_pci_driver to the function .init.text:wl_pci_probe()
The variable wl_pci_driver references
the function __init wl_pci_probe()
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console

  CC      /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.mod.o
  LD [M]  /home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248/wl.ko
make[1]: `/usr/src/linux-headers-3.13.0-48-generic' dizininden çıkılıyor
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# lsmod | grep "brcmsmac\|b43\|ssb\|bcma\|wl"
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod b43
rmmod: ERROR: Module b43 is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod brcmsmac
rmmod: ERROR: Module brcmsmac is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod ssb
rmmod: ERROR: Module ssb is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod bcma
rmmod: ERROR: Module bcma is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# rmmod wl
rmmod: ERROR: Module wl is not currently loaded
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# modprobe lib80211
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# modprobe cfg80211
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# insmod wl.ko
root@pc:/home/user/Belgeler/hybrid-v35_64-nodebug-pcoem-6_30_223_248# exit
çıkış

每次重启都会使之前构建的驱动程序无法工作。我modeprobe wl在 rc.local 文件中仍有该命令,并且再次 它曾经像魔法一样工作驱动程序本身仍然可以工作,但我不知道为什么我不能让它们在启动时加载。

编辑:

这是超详细诊断无线信息创建脚本。或者,手动插入 wl 模块之前收到的输出。

答案1

首先,您使用的驱动程序不适合您的内核版本,让我们摆脱错误的驱动程序并为启动器加载正确的驱动程序。

sudo apt-get purge bcmwl-kernel-source
gksu gedit /etc/modprobe.d/blacklist.conf

删除blacklist brcmsmac然后blacklist bcma保存文件并关闭它。您可能需要安装 gksu,它不是 14.04 中预安装的。重新启动

相关内容