本指南介绍如何在 macOS 上刷写 Broadcom 蓝牙固件,适用于内置和外置 USB 适配器。按照本指南操作,您将能够刷写 Broadcom 蓝牙设备的固件并将其恢复到正常工作状态。
概述
在我们之前的蓝牙修复指南中,无论 OS X/macOS 版本如何,在某些情况下蓝牙似乎根本无法工作。这是因为蓝牙设备处于设备固件升级 (DFU) 模式,因此,虽然 WiFi 可以工作,但蓝牙根本无法工作。虽然这并不正常,通常不会发生,但只是在极少数情况下。这是因为 IOBluetoothUSBDFUTool 可能会在 macOS 升级期间损坏固件。其他原因可能包括在固件上传过程中发生的某种故障或损坏。
在 DFU 模式下,蓝牙地址将显示为NULL
,固件版本将v0 c0
在“硬件”>“蓝牙”部分中报告为。此外,在“系统报告窗口”下的“硬件”>“USB”部分中,蓝牙设备将显示为Broadcom Bluetooth Download Device
,产品 ID 将显示0xf007
。但是,在正常模式(活动、功能状态)下,会显示正确的蓝牙地址、固件编号和有效的产品 ID,并且通常显示为“蓝牙 USB 主机控制器”。您也可以通过 IOReg 检查这一点。
在 macOS Big Sur 之前,系统报告中的“硬件”>“蓝牙”部分会显示“无可用信息”。在 Windows 上也会出现类似的情况。在 Windows 端,它会报告“此设备无法启动。(代码 10)”。
当蓝牙设备被报告为 Broadcom 蓝牙下载设备时,这意味着该蓝牙设备尚未初始化或处于固件刷新模式,等待刷写固件。macOS 不会在每次启动时调用固件升级,蓝牙设备仍然无法运行。为了解决这个问题,我们必须使用 dfu-util 手动上传固件。此工具基于原始的 Linux dfu-programmer / dfu-util,并使用USB DFU 规范将固件上传到 DFU 设备。/System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/IOBluetoothUSBDFU.kext/Contents/Resources/IOBluetoothUSBDFUTool 中使用了相同的功能。然而,IOBluetoothUSBDFUTool 不支持将自定义固件加载到现有设备中,因此不推荐使用。
请注意,此功能不适用于 Broadcom PatchRAM USB 设备。对于其他设备(例如原装 Apple 蓝牙设备),它可以重新编程。
以下步骤仅在您的卡处于 DFU 模式时有效,如果您的蓝牙设备出现故障或使用其他协议(例如 UART),则无法正常工作。
要求
以下是在 macOS 上刷写 Broadcom 蓝牙固件的要求。在继续本指南之前,请确保您满足要求。
蓝牙 |
|
macOS |
|
引导加载程序 |
|
扩展程序 |
|
假设
本指南假设您已具备以下方面的相关经验。以下经验对于遵循本指南将大有裨益。- 已
正确配置 EFI 的 macOS/OS X 可启动 USB 设备
- 基本的 config.plist 编辑技能
- 基本的终端使用技巧
- 基本的 Clover/OpenCore 知识
- 安装/注入 kext 的基本知识
刷写固件
警告:
以下方法存在风险,在此过程中可能会使您的 Thunderbolt 硬件变砖。芯片可能已损坏,您可能需要编程器和原始固件来刷新 Thunderbolt 芯片,才能让您的 Thunderbolt 恢复正常。此处提供的步骤可能准确或不适用于您的特定 Thunderbolt 硬件。使用本指南即表示您了解所有相关风险,EliteMacx86 对可能发生的任何损害概不负责,也不对您的任何行为负责。请谨慎操作!
步骤 1:安装 Homebrew
第一步是安装 Homebrew。如果您不了解 Homebrew 以及这款出色的软件包管理器的功能,可以参考下面链接提供的指南。
请注意,如果您还没有安装命令行工具,此操作还会安装它。
您将看到类似以下内容的操作输出:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
==> Checking for `sudo` access (which may request your password)...
Password:
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The following new directories will be created:
/usr/local/bin
/usr/local/etc
/usr/local/include
/usr/local/lib
/usr/local/sbin
/usr/local/share
/usr/local/var
/usr/local/opt
/usr/local/share/zsh
/usr/local/share/zsh/site-functions
/usr/local/var/homebrew
/usr/local/var/homebrew/linked
/usr/local/Cellar
/usr/local/Caskroom
/usr/local/Frameworks
==> The Xcode Command Line Tools will be installed.
Press RETURN/ENTER to continue or any other key to abort:
==> /usr/bin/sudo /bin/mkdir -p /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks
==> /usr/bin/sudo /bin/chmod ug=rwx /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks
==> /usr/bin/sudo /bin/chmod go-w /usr/local/share/zsh /usr/local/share/zsh/site-functions
==> /usr/bin/sudo /usr/sbin/chown increase /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Frameworks
==> /usr/bin/sudo /bin/mkdir -p /usr/local/Homebrew
==> /usr/bin/sudo /usr/sbin/chown -R increase:admin /usr/local/Homebrew
==> /usr/bin/sudo /bin/mkdir -p /Users/increase/Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Users/increase/Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown -R increase /Users/increase/Library/Caches/Homebrew
==> Searching online for the Command Line Tools
==> /usr/bin/sudo /usr/bin/touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
==> Installing Command Line Tools for Xcode-14.2
==> /usr/bin/sudo /usr/sbin/softwareupdate -i Command\ Line\ Tools\ for\ Xcode-14.2
Software Update Tool
Finding available software
Downloading Command Line Tools for Xcode
Downloaded Command Line Tools for Xcode
Installing Command Line Tools for Xcode
Done with Command Line Tools for Xcode
Done.
==> /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools
Password:
==> /usr/bin/sudo /bin/rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
==> Downloading and installing Homebrew...
remote: Enumerating objects: 233046, done.
remote: Counting objects: 100% (376/376), done.
remote: Compressing objects: 100% (255/255), done.
remote: Total 233046 (delta 144), reused 304 (delta 118), pack-reused 232670
Receiving objects: 100% (233046/233046), 67.15 MiB | 3.41 MiB/s, done.
Resolving deltas: 100% (171051/171051), done.
From https://github.com/Homebrew/brew
* [new branch] master -> origin/master
* [new tag] 0.1 -> 0.1
* [new tag] 0.2 -> 0.2
* [new tag] 0.3 -> 0.3
* [new tag] 0.4 -> 0.4
* [new tag] 0.5 -> 0.5
* [new tag] 0.6 -> 0.6
* [new tag] 0.7 -> 0.7
* [new tag] 0.7.1 -> 0.7.1
* [new tag] 0.8 -> 0.8
* [new tag] 0.8.1 -> 0.8.1
* [new tag] 0.9 -> 0.9
* [new tag] 0.9.1 -> 0.9.1
* [new tag] 0.9.2 -> 0.9.2
* [new tag] 0.9.3 -> 0.9.3
* [new tag] 0.9.4 -> 0.9.4
* [new tag] 0.9.5 -> 0.9.5
* [new tag] 0.9.8 -> 0.9.8
* [new tag] 0.9.9 -> 0.9.9
* [new tag] 1.0.0 -> 1.0.0
* [new tag] 1.0.1 -> 1.0.1
* [new tag] 1.0.2 -> 1.0.2
* [new tag] 1.0.3 -> 1.0.3
* [new tag] 1.0.4 -> 1.0.4
* [new tag] 1.0.5 -> 1.0.5
* [new tag] 1.0.6 -> 1.0.6
* [new tag] 1.0.7 -> 1.0.7
* [new tag] 1.0.8 -> 1.0.8
* [new tag] 1.0.9 -> 1.0.9
* [new tag] 1.1.0 -> 1.1.0
* [new tag] 1.1.1 -> 1.1.1
* [new tag] 1.1.10 -> 1.1.10
* [new tag] 1.1.11 -> 1.1.11
* [new tag] 1.1.12 -> 1.1.12
* [new tag] 1.1.13 -> 1.1.13
* [new tag] 1.1.2 -> 1.1.2
* [new tag] 1.1.3 -> 1.1.3
* [new tag] 1.1.4 -> 1.1.4
* [new tag] 1.1.5 -> 1.1.5
* [new tag] 1.1.6 -> 1.1.6
* [new tag] 1.1.7 -> 1.1.7
* [new tag] 1.1.8 -> 1.1.8
* [new tag] 1.1.9 -> 1.1.9
* [new tag] 1.2.0 -> 1.2.0
* [new tag] 1.2.1 -> 1.2.1
* [new tag] 1.2.2 -> 1.2.2
* [new tag] 1.2.3 -> 1.2.3
* [new tag] 1.2.4 -> 1.2.4
* [new tag] 1.2.5 -> 1.2.5
* [new tag] 1.2.6 -> 1.2.6
* [new tag] 1.3.0 -> 1.3.0
* [new tag] 1.3.1 -> 1.3.1
* [new tag] 1.3.2 -> 1.3.2
* [new tag] 1.3.3 -> 1.3.3
* [new tag] 1.3.4 -> 1.3.4
* [new tag] 1.3.5 -> 1.3.5
* [new tag] 1.3.6 -> 1.3.6
* [new tag] 1.3.7 -> 1.3.7
* [new tag] 1.3.8 -> 1.3.8
* [new tag] 1.3.9 -> 1.3.9
* [new tag] 1.4.0 -> 1.4.0
* [new tag] 1.4.1 -> 1.4.1
* [new tag] 1.4.2 -> 1.4.2
* [new tag] 1.4.3 -> 1.4.3
* [new tag] 1.5.0 -> 1.5.0
* [new tag] 1.5.1 -> 1.5.1
* [new tag] 1.5.10 -> 1.5.10
* [new tag] 1.5.11 -> 1.5.11
* [new tag] 1.5.12 -> 1.5.12
* [new tag] 1.5.13 -> 1.5.13
* [new tag] 1.5.14 -> 1.5.14
* [new tag] 1.5.2 -> 1.5.2
* [new tag] 1.5.3 -> 1.5.3
* [new tag] 1.5.4 -> 1.5.4
* [new tag] 1.5.5 -> 1.5.5
* [new tag] 1.5.6 -> 1.5.6
* [new tag] 1.5.7 -> 1.5.7
* [new tag] 1.5.8 -> 1.5.8
* [new tag] 1.5.9 -> 1.5.9
* [new tag] 1.6.0 -> 1.6.0
* [new tag] 1.6.1 -> 1.6.1
* [new tag] 1.6.10 -> 1.6.10
* [new tag] 1.6.11 -> 1.6.11
* [new tag] 1.6.12 -> 1.6.12
* [new tag] 1.6.13 -> 1.6.13
* [new tag] 1.6.14 -> 1.6.14
* [new tag] 1.6.15 -> 1.6.15
* [new tag] 1.6.16 -> 1.6.16
* [new tag] 1.6.17 -> 1.6.17
* [new tag] 1.6.2 -> 1.6.2
* [new tag] 1.6.3 -> 1.6.3
* [new tag] 1.6.4 -> 1.6.4
* [new tag] 1.6.5 -> 1.6.5
* [new tag] 1.6.6 -> 1.6.6
* [new tag] 1.6.7 -> 1.6.7
* [new tag] 1.6.8 -> 1.6.8
* [new tag] 1.6.9 -> 1.6.9
* [new tag] 1.7.0 -> 1.7.0
* [new tag] 1.7.1 -> 1.7.1
* [new tag] 1.7.2 -> 1.7.2
* [new tag] 1.7.3 -> 1.7.3
* [new tag] 1.7.4 -> 1.7.4
* [new tag] 1.7.5 -> 1.7.5
* [new tag] 1.7.6 -> 1.7.6
* [new tag] 1.7.7 -> 1.7.7
* [new tag] 1.8.0 -> 1.8.0
* [new tag] 1.8.1 -> 1.8.1
* [new tag] 1.8.2 -> 1.8.2
* [new tag] 1.8.3 -> 1.8.3
* [new tag] 1.8.4 -> 1.8.4
* [new tag] 1.8.5 -> 1.8.5
* [new tag] 1.8.6 -> 1.8.6
* [new tag] 1.9.0 -> 1.9.0
* [new tag] 1.9.1 -> 1.9.1
* [new tag] 1.9.2 -> 1.9.2
* [new tag] 1.9.3 -> 1.9.3
* [new tag] 2.0.0 -> 2.0.0
* [new tag] 2.0.1 -> 2.0.1
* [new tag] 2.0.2 -> 2.0.2
* [new tag] 2.0.3 -> 2.0.3
* [new tag] 2.0.4 -> 2.0.4
* [new tag] 2.0.5 -> 2.0.5
* [new tag] 2.0.6 -> 2.0.6
* [new tag] 2.1.0 -> 2.1.0
* [new tag] 2.1.1 -> 2.1.1
* [new tag] 2.1.10 -> 2.1.10
* [new tag] 2.1.11 -> 2.1.11
* [new tag] 2.1.12 -> 2.1.12
* [new tag] 2.1.13 -> 2.1.13
* [new tag] 2.1.14 -> 2.1.14
* [new tag] 2.1.15 -> 2.1.15
* [new tag] 2.1.16 -> 2.1.16
* [new tag] 2.1.2 -> 2.1.2
* [new tag] 2.1.3 -> 2.1.3
* [new tag] 2.1.4 -> 2.1.4
* [new tag] 2.1.5 -> 2.1.5
* [new tag] 2.1.6 -> 2.1.6
* [new tag] 2.1.7 -> 2.1.7
* [new tag] 2.1.8 -> 2.1.8
* [new tag] 2.1.9 -> 2.1.9
* [new tag] 2.2.0 -> 2.2.0
* [new tag] 2.2.1 -> 2.2.1
* [new tag] 2.2.10 -> 2.2.10
* [new tag] 2.2.11 -> 2.2.11
* [new tag] 2.2.12 -> 2.2.12
* [new tag] 2.2.13 -> 2.2.13
* [new tag] 2.2.14 -> 2.2.14
* [new tag] 2.2.15 -> 2.2.15
* [new tag] 2.2.16 -> 2.2.16
* [new tag] 2.2.17 -> 2.2.17
* [new tag] 2.2.2 -> 2.2.2
* [new tag] 2.2.3 -> 2.2.3
* [new tag] 2.2.4 -> 2.2.4
* [new tag] 2.2.5 -> 2.2.5
* [new tag] 2.2.6 -> 2.2.6
* [new tag] 2.2.7 -> 2.2.7
* [new tag] 2.2.8 -> 2.2.8
* [new tag] 2.2.9 -> 2.2.9
* [new tag] 2.3.0 -> 2.3.0
* [new tag] 2.4.0 -> 2.4.0
* [new tag] 2.4.1 -> 2.4.1
* [new tag] 2.4.10 -> 2.4.10
* [new tag] 2.4.11 -> 2.4.11
* [new tag] 2.4.12 -> 2.4.12
* [new tag] 2.4.13 -> 2.4.13
* [new tag] 2.4.14 -> 2.4.14
* [new tag] 2.4.15 -> 2.4.15
* [new tag] 2.4.16 -> 2.4.16
* [new tag] 2.4.2 -> 2.4.2
* [new tag] 2.4.3 -> 2.4.3
* [new tag] 2.4.4 -> 2.4.4
* [new tag] 2.4.5 -> 2.4.5
* [new tag] 2.4.6 -> 2.4.6
* [new tag] 2.4.7 -> 2.4.7
* [new tag] 2.4.8 -> 2.4.8
* [new tag] 2.4.9 -> 2.4.9
* [new tag] 2.5.0 -> 2.5.0
* [new tag] 2.5.1 -> 2.5.1
* [new tag] 2.5.10 -> 2.5.10
* [new tag] 2.5.11 -> 2.5.11
* [new tag] 2.5.12 -> 2.5.12
* [new tag] 2.5.2 -> 2.5.2
* [new tag] 2.5.3 -> 2.5.3
* [new tag] 2.5.4 -> 2.5.4
* [new tag] 2.5.5 -> 2.5.5
* [new tag] 2.5.6 -> 2.5.6
* [new tag] 2.5.7 -> 2.5.7
* [new tag] 2.5.8 -> 2.5.8
* [new tag] 2.5.9 -> 2.5.9
* [new tag] 2.6.0 -> 2.6.0
* [new tag] 2.6.1 -> 2.6.1
* [new tag] 2.6.2 -> 2.6.2
* [new tag] 2.7.0 -> 2.7.0
* [new tag] 2.7.1 -> 2.7.1
* [new tag] 2.7.2 -> 2.7.2
* [new tag] 2.7.3 -> 2.7.3
* [new tag] 2.7.4 -> 2.7.4
* [new tag] 2.7.5 -> 2.7.5
* [new tag] 2.7.6 -> 2.7.6
* [new tag] 2.7.7 -> 2.7.7
* [new tag] 3.0.0 -> 3.0.0
* [new tag] 3.0.1 -> 3.0.1
* [new tag] 3.0.10 -> 3.0.10
* [new tag] 3.0.11 -> 3.0.11
* [new tag] 3.0.2 -> 3.0.2
* [new tag] 3.0.3 -> 3.0.3
* [new tag] 3.0.4 -> 3.0.4
* [new tag] 3.0.5 -> 3.0.5
* [new tag] 3.0.6 -> 3.0.6
* [new tag] 3.0.7 -> 3.0.7
* [new tag] 3.0.8 -> 3.0.8
* [new tag] 3.0.9 -> 3.0.9
* [new tag] 3.1.0 -> 3.1.0
* [new tag] 3.1.1 -> 3.1.1
* [new tag] 3.1.10 -> 3.1.10
* [new tag] 3.1.11 -> 3.1.11
* [new tag] 3.1.12 -> 3.1.12
* [new tag] 3.1.2 -> 3.1.2
* [new tag] 3.1.3 -> 3.1.3
* [new tag] 3.1.4 -> 3.1.4
* [new tag] 3.1.5 -> 3.1.5
* [new tag] 3.1.6 -> 3.1.6
* [new tag] 3.1.7 -> 3.1.7
* [new tag] 3.1.8 -> 3.1.8
* [new tag] 3.1.9 -> 3.1.9
* [new tag] 3.2.0 -> 3.2.0
* [new tag] 3.2.1 -> 3.2.1
* [new tag] 3.2.10 -> 3.2.10
* [new tag] 3.2.11 -> 3.2.11
* [new tag] 3.2.12 -> 3.2.12
* [new tag] 3.2.13 -> 3.2.13
* [new tag] 3.2.14 -> 3.2.14
* [new tag] 3.2.15 -> 3.2.15
* [new tag] 3.2.16 -> 3.2.16
* [new tag] 3.2.17 -> 3.2.17
* [new tag] 3.2.2 -> 3.2.2
* [new tag] 3.2.3 -> 3.2.3
* [new tag] 3.2.4 -> 3.2.4
* [new tag] 3.2.5 -> 3.2.5
* [new tag] 3.2.6 -> 3.2.6
* [new tag] 3.2.7 -> 3.2.7
* [new tag] 3.2.8 -> 3.2.8
* [new tag] 3.2.9 -> 3.2.9
* [new tag] 3.3.0 -> 3.3.0
* [new tag] 3.3.1 -> 3.3.1
* [new tag] 3.3.10 -> 3.3.10
* [new tag] 3.3.11 -> 3.3.11
* [new tag] 3.3.12 -> 3.3.12
* [new tag] 3.3.13 -> 3.3.13
* [new tag] 3.3.14 -> 3.3.14
* [new tag] 3.3.15 -> 3.3.15
* [new tag] 3.3.16 -> 3.3.16
* [new tag] 3.3.2 -> 3.3.2
* [new tag] 3.3.3 -> 3.3.3
* [new tag] 3.3.4 -> 3.3.4
* [new tag] 3.3.5 -> 3.3.5
* [new tag] 3.3.6 -> 3.3.6
* [new tag] 3.3.7 -> 3.3.7
* [new tag] 3.3.8 -> 3.3.8
* [new tag] 3.3.9 -> 3.3.9
* [new tag] 3.4.0 -> 3.4.0
* [new tag] 3.4.1 -> 3.4.1
* [new tag] 3.4.10 -> 3.4.10
* [new tag] 3.4.11 -> 3.4.11
* [new tag] 3.4.2 -> 3.4.2
* [new tag] 3.4.3 -> 3.4.3
* [new tag] 3.4.4 -> 3.4.4
* [new tag] 3.4.5 -> 3.4.5
* [new tag] 3.4.6 -> 3.4.6
* [new tag] 3.4.7 -> 3.4.7
* [new tag] 3.4.8 -> 3.4.8
* [new tag] 3.4.9 -> 3.4.9
* [new tag] 3.5.0 -> 3.5.0
* [new tag] 3.5.1 -> 3.5.1
* [new tag] 3.5.10 -> 3.5.10
* [new tag] 3.5.2 -> 3.5.2
* [new tag] 3.5.3 -> 3.5.3
* [new tag] 3.5.4 -> 3.5.4
* [new tag] 3.5.5 -> 3.5.5
* [new tag] 3.5.6 -> 3.5.6
* [new tag] 3.5.7 -> 3.5.7
* [new tag] 3.5.8 -> 3.5.8
* [new tag] 3.5.9 -> 3.5.9
* [new tag] 3.6.0 -> 3.6.0
* [new tag] 3.6.1 -> 3.6.1
* [new tag] 3.6.10 -> 3.6.10
* [new tag] 3.6.11 -> 3.6.11
* [new tag] 3.6.12 -> 3.6.12
* [new tag] 3.6.13 -> 3.6.13
* [new tag] 3.6.14 -> 3.6.14
* [new tag] 3.6.15 -> 3.6.15
* [new tag] 3.6.16 -> 3.6.16
* [new tag] 3.6.17 -> 3.6.17
* [new tag] 3.6.18 -> 3.6.18
* [new tag] 3.6.19 -> 3.6.19
* [new tag] 3.6.2 -> 3.6.2
* [new tag] 3.6.20 -> 3.6.20
* [new tag] 3.6.21 -> 3.6.21
* [new tag] 3.6.3 -> 3.6.3
* [new tag] 3.6.4 -> 3.6.4
* [new tag] 3.6.5 -> 3.6.5
* [new tag] 3.6.6 -> 3.6.6
* [new tag] 3.6.7 -> 3.6.7
* [new tag] 3.6.8 -> 3.6.8
* [new tag] 3.6.9 -> 3.6.9
* [new tag] 4.0.0 -> 4.0.0
* [new tag] 4.0.1 -> 4.0.1
* [new tag] 4.0.2 -> 4.0.2
* [new tag] 4.0.3 -> 4.0.3
* [new tag] 4.0.4 -> 4.0.4
* [new tag] 4.0.5 -> 4.0.5
* [new tag] 4.0.6 -> 4.0.6
* [new tag] 4.0.7 -> 4.0.7
HEAD is now at bd8341d42 Merge pull request #15020 from dtrodrigues/pluralize-includecount
==> Installation successful!
==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
https://docs.brew.sh/Analytics
No analytics data has been sent yet (nor will any be during this install run).
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
https://github.com/Homebrew/brew#donations
==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
(echo; echo 'eval "$(/usr/local/bin/brew shellenv)"') >> /Users/increase/.zprofile
eval "$(/usr/local/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
https://docs.brew.sh
第二步:安装 DFU 工具
安装 Homebrew 后,下一步是安装用于烧写固件的 DFU 工具。请按照以下步骤安装 DFU 工具。1
. 假设终端窗口仍处于打开状态,
brew install dfu-util
您将看到类似以下内容的操作输出:
brew install dfu-util
==> Fetching dependencies for dfu-util: libusb
==> Fetching libusb
==> Downloading https://ghcr.io/v2/homebrew/core/libusb/manifests/1.0.26
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libusb/blobs/sha256:e79be7d4c61
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Fetching dfu-util
==> Downloading https://ghcr.io/v2/homebrew/core/dfu-util/manifests/0.11
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/dfu-util/blobs/sha256:5daf11ce5
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Installing dependencies for dfu-util: libusb
==> Installing dfu-util dependency: libusb
==> Pouring libusb--1.0.26.monterey.bottle.tar.gz
🍺 /usr/local/Cellar/libusb/1.0.26: 22 files, 531.7KB
==> Installing dfu-util
==> Pouring dfu-util--0.11.monterey.bottle.tar.gz
🍺 /usr/local/Cellar/dfu-util/0.11: 13 files, 230.8KB
==> Running `brew cleanup dfu-util`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
步骤 3:备份现有固件
下一步是备份现有固件,以备日后使用(用于调试)。要备份固件,请按照以下步骤操作。
假设终端窗口仍处于打开状态,请执行以下命令:
sudo dfu-util -R -U backup.dfu
您将看到类似以下内容的操作输出:
sudo dfu-util -R -U backup.dfu
Password:
dfu-util 0.11
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Opening DFU capable USB device...
Device ID 05ac:f007
Device DFU version 0110
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 0110
Device returned transfer size 64
Copying data from DFU device to PC
Upload [ ] 0% 0 bytesdfu-util:
Error during upload (LIBUSB_ERROR_PIPE)
Failed.
在大多数情况下,下载将失败,但这很正常,您不必担心。
步骤 4:提取固件
下一步是提取固件进行上传。 通常,固件已包含在 OS X/macOS(.dfu 文件)中,可以在下找到/System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/IOBluetoothUSBDFU.kext/Contents/Resources/
。 但是,自 Monterey 以来,Apple 删除了IOBluetoothUSBDFU.kext
并且该 kext 在 Monterey 及更高版本中不再存在。 因此,您必须在上传之前提取固件。 使用 Big Sur 或更早版本的用户可以直接跳至步骤 5。
步骤 5:上传固件
下一步是将固件上传到蓝牙。 是的,这一步就是您期待已久的,要上传固件,请按照以下步骤操作。
假设终端窗口仍然打开,请执行以下命令
可以使用以下命令上传固件
sudo dfu-util -R -D /System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/IOBluetoothUSBDFU.kext/Contents/Resources/20XXX_82XX.dfu
其中,20XXX_82XX 代表固件名称。您可以在下表中找到常见的固件列表名称。
在本例中,命令如下:
sudo dfu-util -R -D /System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/IOBluetoothUSBDFU.kext/Contents/Resources/20703_8290.dfu
您将看到类似以下内容的操作输出:
sudo dfu-util -R -D /Users/hg87/Desktop/IOBluetoothUSBDFU.kext/Contents/Resources/20703_8290.dfu
dfu-util 0.11
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Match vendor ID from file: 05ac
Match product ID from file: 8290
Opening DFU capable USB device...
Device ID 05ac:f007
Device DFU version 0110
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(10) = dfuERROR, status(15) = Device stalled an unexpected request
Clearing status
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 0110
Device returned transfer size 64
Copying data from PC to DFU device
Download [=========================] 100% 103209 bytes
Download done.
DFU state(2) = dfuIDLE, status(0) = No error condition is present
Done!
Resetting USB to switch back to Run-Time mode
[FONT=-apple-system]
有时,您可能会收到以下错误,但不必担心。
dfu-util: error resetting after download: LIBUSB_ERROR_TIMEOUT
您可以忽略上述错误以确保固件已正确刷新,您可以尝试重新上传固件,如果之前的刷新成功,您应该会看到类似以下内容:
sudo dfu-util -R -D /Users/hg87/Desktop/IOBluetoothUSBDFU.kext/Contents/Resources/20703_8290.dfu
Password:
dfu-util 0.11
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Match vendor ID from file: 05ac
Match product ID from file: 8290
dfu-util: No DFU capable USB device available
注意最后一行“dfu-util: No DFU capable USB device available”。这意味着固件刷写成功,蓝牙设备已切换回正常模式。
退出终端
步骤6:重启系统
完成以上所有步骤后,请重启系统以使更改生效。建议至少重置NVRAM两次。
验证蓝牙功能
下一步是验证蓝牙设备是否正常工作。请按照以下步骤验证蓝牙功能。
系统报告
- 在“关于本机”>“系统报告”>“蓝牙”中验证蓝牙详细信息(地址、固件版本)
- 在“关于本机”>“系统报告”>“USB”中验证蓝牙控制器模式和产品 ID
系统偏好设置
- 在“系统偏好设置”>“蓝牙”中验证蓝牙的可发现性
菜单栏
- 验证已连接的蓝牙设备
黑客工具
- 在 Hackintool>System>Peripherals 中验证固件加载
IO注册
- 在 IOReg 中验证蓝牙控制器和产品 ID
评论0