1. 创建 resume 脚本
打开终端:
sudo nano /lib/systemd/system-sleep/brcmfmac-reset
写入:
#!/bin/shif [ "$1" = "post" ]; thenecho -n "0000:03:00.0" > /sys/bus/pci/drivers/brcmfmac/unbindsleep 1echo 1 > /sys/bus/pci/devices/0000:03:00.0/resetsleep 1echo -n "0000:03:00.0" > /sys/bus/pci/drivers/brcmfmac/bind
fi
保存退出。
2. 添加执行权限
sudo chmod +x /lib/systemd/system-sleep/brcmfmac-reset
3. 测试
先手动挂起:
systemctl suspend
恢复后等待几秒,WiFi 应该自动回来。
4. 如果想看是否执行成功
查看日志:
journalctl -b | grep brcmfmac
或者临时加入日志:
修改脚本:
#!/bin/shif [ "$1" = "post" ]; thenlogger "Resetting brcmfmac PCI device"echo -n "0000:03:00.0" > /sys/bus/pci/drivers/brcmfmac/unbindsleep 1echo 1 > /sys/bus/pci/devices/0000:03:00.0/resetsleep 1echo -n "0000:03:00.0" > /sys/bus/pci/drivers/brcmfmac/bindlogger "brcmfmac reset finished"
fi
恢复后:
journalctl -b | grep brcmfmac
更稳妥的版本(推荐 MacBook Pro)
有些 MacBook 的 Broadcom 芯片恢复时 bind 太快可能失败,可以加检测:
#!/bin/shif [ "$1" = "post" ]; thenDEV="0000:03:00.0"if [ -e /sys/bus/pci/drivers/brcmfmac/$DEV ]; thenecho -n "$DEV" > /sys/bus/pci/drivers/brcmfmac/unbindsleep 2fiecho 1 > /sys/bus/pci/devices/$DEV/resetsleep 2echo -n "$DEV" > /sys/bus/pci/drivers/brcmfmac/bind
fi
不过注意:0000:03:00.0 是固定 PCI 地址,不同 MacBook Pro 型号可能不同。以后如果换内核或机器失效,可以确认:
lspci | grep -i network
例如看到:
03:00.0 Network controller: Broadcom ...
才对应这个地址。
