好的,我正在开发一个基于 Pi B+ 架构的项目。这是一个专有设计的板。该板上有一个 BCM43143 WiFi 模块 - 与 Broadcom“三角形”适配器中的芯片相同。
单独来看,这些都工作得很好。但是,一旦拥有两个,就会出现 MAC 地址冲突。对于两个三角形,或者一个模块和一个三角形,也会发生同样的情况。
这里的问题是 MAC 地址在固件文件 brcm/brcmfmac43143.bin 中硬编码为 00:90:4C:0E:81:23
现在,我可以临时更改 MAC 地址,或者ifconfig wlan0 hw ether ...
在 NetworkManager 中更改为cloned-mac-address=...
,甚至使用macchanger
,但这实际上并不会更改接口的 MAC 地址,而只是在接口上创建辅助“别名”MAC 地址。您在接口中仍然具有相同的底层 MAC 地址。
这就是问题发生的地方。当两个模块都在附近启用时,一切都会崩溃。模块开始争斗并导致彼此恐慌并重置。ping
在锁定和接口重置之前,运行 a会获得大约 3 个数据包。大约一分钟后,另外三个数据包通过。
要么就是这些芯片真的不喜欢改变它们的 MAC 地址。
我手动编辑了一个测试模块上的固件文件,为其提供了不同的硬编码 MAC 地址(它作为字符串存在于二进制文件中,这很有帮助),问题立即消失。这对我来说很好,因为我知道如何做这些事情。但对于普通用户来说,编辑这样的二进制文件并不好。
所以。还有其他人遇到过这些三角形/模块上的底层 MAC 地址冲突的问题吗?如果是这样,你如何应对?我是否必须编写一个自定义的“MAC 编辑”实用程序来自己修改固件文件,或者是否有某种方法可以设置参数来覆盖其中的 MAC?
更新:我编写了一个小实用程序来更改 .bin 文件中的 MAC 地址。并不完美,但可能是要走的路......
答案1
以下是 Broadcom 回复此问题的电子邮件:
-------- 原始消息 -------- 发件人:Hante Meuleman 日期:12/01/2016 09:13 (GMT+00:00) 收件人:Mike Last <****** **************>, brcm80211-dev-list
主题:回复:BCM43143 Mac 地址问题。嗨,迈克,
不幸的是,这是一个制造问题。该设备应该使用唯一的 MAC 地址进行编程,但事实并非如此。因此,固件将使用其默认地址,通常只有开发设备才需要该地址。我们可以制作随机化 mac 地址的固件,但即使这样也不能总是产生唯一的 mac 地址。解决这个问题的方法之一是使用 ifconfig 为设备提供一个新的 mac 地址:其中 wlan0 需要替换为设备的接口名称,并且 mac 地址可以自由选择。
抱歉,我们对此没有什么好的选择。
问候,汉特
-----原始消息----- 发件人:Mike Last [mailto:************************]
发送时间:1 月 11 日星期一2016 年 8:35 PM 致:brcm80211-dev-list 主题:BCM43143 Mac 地址问题。你好,
我是最终用户,而不是开发人员。
我正在为 Raspberry Pi 使用 BCM43143 USB 集线器/wifi 设备。
这个设备很棒,但是当我有 2 个设备在同一网络上运行时,它们都具有相同的 MAC 地址,并且无法工作。 MAC地址是00:90:4C:0E:81:23,这似乎被写入Raspbian Jessie中的brcmfmac43143.bin文件中(在Ubuntu 14.04中是相同的)
这些版本的驱动程序文件中是否存在一些错误,您能否提供任何替代方案?
谢谢
麦克风