我正在尝试解决无线连接的一些问题,并尝试在此过程中学习一些东西。从这里和这里我了解了两种不同的方式来了解我的无线驱动程序。事实是,我得到两个不同的结果:
第一种方法sudo lshw -C network
给了我以下内容:
configuration: broadcast=yes driver=brcmsmac
而第二个lspci -knn | grep Net -A2
给了我这个:
Kernel driver in use: bcma-pci-bridge
从我的驱动程序列表中,我可以找到brcmsmac
和bcma
:
> lsmod | grep brcmsmac
brcmsmac 563061 0
cordic 12574 1 brcmsmac
brcmutil 15579 1 brcmsmac
mac80211 652777 1 brcmsmac
cfg80211 498458 2 brcmsmac,mac80211
bcma 52320 2 brcmsmac
那么,这两个人到底在做什么呢?
答案1
Broadcom 的硬件设计包括标准 PCI/PCIe 接口模块,该模块在其许多产品中都是相同的。然后是 Broadcom 自己的专有接口总线,可以连接一个或多个特定于产品的模块。
该bcma
模块只是PCI/PCIe接口模块的驱动程序,它将充当PCI/PCIe总线和Broadcom专有总线之间的“桥梁”。加载后,它将识别 Broadcom 总线上的其他模块,并在可能的情况下自动加载它们的驱动程序。
这brcmsmac
是实际 WiFi 硬件模块的驱动程序。由于该硬件模块实际上并不存在于 PCI(e) 总线上,因此lspci
只能显示实际连接到 PCI(e) 总线的部分的驱动程序。
你必须有一个新的命令,比如lsbcma
告诉你有关Broadcom总线内容的更多详细信息...据我所知,这样的命令实际上并不存在,但我认为模块bcma
输出到dmesg
的诊断信息load 可以用于相同的目的,因为 Broadcom 总线通常非常简单。
内核模块brcmutil
包含一些可以在不同的 Broadcom WiFi 模块(brcmsmac
和brcmhmac
)之间共享的代码。
答案2
我和你有同样的问题。就我而言,无线控制器是 Broadcom Corporation BCM4313,制造商和型号为 14e4 和 4727 :
$ lspci -nn -s 03:00 |grep -i net 03:00.0 Network controller [0280]: Broadcom Corporation BCM4313 802.11bgn Wireless Network Adapter [14e4:4727] (rev 01)
1 - 控制器的模块别名是 bcma :
$ cat /lib/modules/$(uname -r)/modules.alias | grep -i 14e4 |grep -i 4727 alias pci:v000014E4d00004727sv*sd*bc*sc*i* bcma
bcma首先加载,负责控制器接口
2 - brmsmac 取决于 bcma
# modinfo brcmsmac |grep depends depends: bcma,mac80211,brcmutil,cfg80211,cordic
它在bcma之后加载,负责无线协议
3 - bcma-pci-bridge 未被识别为驱动程序:
# modinfo bcma-pci-bridge modinfo: ERROR: Module bcma-pci-bridge not found.
所以我的猜测是 bcma-pci-bridge 可能是一个“免费名称”,用于记住控制器需要 2 个驱动程序......
我不是专家,这只是我的猜测