三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

让Mac的Windows驱动安装从半小时缩到3分钟:Brigadier实操手册

让Mac的Windows驱动安装从半小时缩到3分钟:Brigadier实操手册

让Mac的Windows驱动安装从半小时缩到3分钟:Brigadier实操手册

【免费下载链接】brigadierFetch and install Boot Camp ESDs with ease.项目地址: https://gitcode.com/gh_mirrors/bri/brigadier

一个让我印象深刻的下午

前阵子帮朋友给他的2018款MacBook Pro装Windows双系统,系统装好了,问题才刚开始:键盘没反应、触控板失灵、屏幕分辨率惨不忍睹、连Wi-Fi都连不上。那一刻我意识到,Mac上装Windows从来不是最难的,最难的是把Boot Camp驱动伺候妥当。

以前的做法是打开苹果官网,翻半天支持页,确认自己机型对应的Boot Camp版本,再手动下载、解压、一层一层剥开归档文件,最后还要手动点开安装向导。整个流程下来少说半小时,稍不留神下载错版本就得重来。

后来我找到了一款叫Brigadier的开源工具,它把上述所有步骤压缩成了一行命令。今天就把这套亲测有效的用法完整分享出来。

Brigadier到底是干什么的

简单说,Brigadier是一个跨平台的Python脚本,职责很纯粹:从苹果官方软件更新服务器(或你自建的内部服务器)上,抓取当前这台Mac对应的Boot Camp ESD(电子软件分发包),自动解开里面多层嵌套的归档,把驱动文件提取出来。如果在Windows上运行并加上--install参数,它还会顺手把64位的MSI驱动安装包装上。

它面向的人群很明确:

  • 刚给Mac装了Windows、驱动一团乱麻的个人用户;
  • 需要给成百上千台Mac批量部署Windows驱动的企业IT管理员;
  • 经常做系统镜像、想统一驱动包的技术人员。

它支持Windows 7/10/11的64位版本,以及macOS 10.9及更高版本,几乎覆盖了所有还在服役的Mac。

五分钟跑通第一个流程

在Windows上:一条命令完成安装

先把工具拿到手:

git clone https://gitcode.com/gh_mirrors/bri/brigadier cd brigadier

然后运行:

brigadier.exe --install

注意,如果你机器上还没有Python环境,可以去Releases区域下载预编译的brigadier.exe,直接双击命令行运行即可,连Python都不用装。

这一条命令背后发生了什么?我拆开看了一遍:

  1. 通过WMI查询(wmic)识别当前机器的型号标识符;
  2. 拉取苹果软件更新目录,在众多Boot Camp ESD里找出匹配当前机型的那个;
  3. 下载后依次解开XAR外包装、GZIP压缩层、CPIO归档,最后从WindowsSupport.dmg里抽出驱动文件;
  4. 找到BootCamp.msiBootCamp64.msi,静默执行安装;
  5. 装完自动清理临时文件。

整个过程中,7-Zip是Windows上负责解压的主力工具。Brigadier会先检查系统里有没有装7-Zip,没有就自动下载安装,用完之后再卸掉,不给你留任何垃圾。

在macOS上:先把驱动包备好

macOS版主要用于下载和准备驱动文件:

chmod +x brigadier ./brigadier --output ~/bootcamp-drivers

在Mac上,解压工作靠的是系统自带的hdiutilpkgutil,不需要额外工具。下载下来的ESD会保留为.dmg格式,方便刻盘或拷贝到Windows环境里用。

核心能力逐个拆解

机型识别:不用再查设备ID了

这是Brigadier最省心的地方。Windows下它用WMI查型号,macOS下用system_profiler读硬件信息,全程自动,你完全不需要知道自己电脑的Model Identifier是什么格式。

当然,想手动指定也完全可以,后面会讲到--model参数。

多层归档:一场解压接力赛

苹果的Boot Camp ESD文件结构相当"套娃":

  • 最外层是XAR格式的BootCampESD.pkg
  • 里面压着GZIP过的Payload;
  • 解开是CPIO归档;
  • 最里面才是装着驱动文件的WindowsSupport.dmg

过去Brigadier还要借助dmg2img这个辅助工具来读取DMG,后来新版7-Zip对DMG格式支持已经足够完善,这个依赖在0.2.4版本被彻底移除了,现在全靠7-Zip一条龙搞定。

跨平台:同一套逻辑,两种运行方式

项目本体是Python脚本,Windows和macOS都能直接跑;Windows用户额外有PyInstaller打包的独立exe可选用。仓库里还附赠了一个PowerShell移植版brigadier.ps1,习惯PowerShell的管理员可以用它完成同样的下载、解压、安装动作,比如brigadier.ps1 -Install就能一键装机。

进阶玩法:把Brigadier调教成趁手工具

指定机型下载

给特定型号的Mac准备驱动包时,用--model指定即可:

brigadier --model MacBookPro15,1 --output ./drivers

这个参数还支持重复使用,一次命令把多个机型的驱动全部下载下来,适合批量准备。

保留下载文件

默认情况下,--install安装完成后会清理所有临时文件。想留一份备用,加--keep-files

brigadier.exe --install --keep-files

接管苹果的软件更新服务器

企业内网场景下,你可以放一个brigadier.plist到脚本同目录,用一行CatalogURL把更新目录指到内部服务器:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CatalogURL</key> <string>https://internal-sus.company.com/catalogs/others/index.sucatalog</string> </dict> </plist>

这样既不用动代码,也能统一内网的下载源。模板可以直接参考仓库里的plist-example/brigadier.plist。

手动指定产品ID

有些机型在目录里可能对应多个ESD包,Brigadier默认挑发布日期最新的那个。如果想要的不是最新版,用-p/--product-id手动指定,比如brigadier -p 031-0787

给Sysprep镜像用:FirstLogonCommand阶段自动装驱动

这是Brigadier最有价值的企业场景:同一份Windows镜像部署到不同型号的Mac上,在Sysprep的首次登录命令里挂上Brigadier,让它在开机后自动识别机型并装好对应驱动,镜像从此不用分机型维护。

脚本里针对这个场景做了一个贴心的workaround:当检测到当前工作目录是\windows\system32且没有用--output-dir覆盖时,会自动把输出目录切到系统根目录,绕开64位系统上System32与SysWoW64重定向导致MSI找不到安装组件的问题。

构建自己的独立exe

要在没装Python的Windows机器上分发,可以运行仓库自带的构建脚本:

python build_windows_exe.py

脚本会自动下载PyInstaller并完成打包,在当前目录生成带版本号的zip压缩包,里面就是可直接分发的brigadier.exe

在虚拟机里测试Boot Camp安装

苹果的安装包会校验硬件是否为合法的Mac机型,所以虚拟机里直接装会失败。msi-transform目录提供了一条出路:里面附带的WiUseXfm.vbs脚本和set_nocheck.mst变换文件,可以把MSI的NOCHECK调试属性设为1,绕过机型检查,让Boot Camp基础服务在VM里也能装上,适合拿来模拟测试。具体用法见msi-transform/README.md。

常见问题集中解答

Q:Brigadier支持32位Windows吗?A:目前只支持64位Windows。苹果从2012年底发布的Boot Camp ESD开始就基本只提供64位驱动了,想支持32位需要额外的工作量,官方也确认了这一点。

Q:装到一半提示网络驱动缺失怎么办?A:Brigadier全程需要联网下载,所以系统里必须提前有能用的网卡驱动。最简单的办法是在做Sysprep镜像时,把Boot Camp ESD里的网卡驱动放进C:\Windows\INF下的"BootCamp"文件夹——这是Windows默认的设备驱动搜索位置,会自动识别并安装未知硬件的驱动。也可以改DevicePath注册表键指向自定义位置,但用INF文件夹的好处是不用改注册表,直接拷文件就行。

Q:下载下来的文件去哪了?A:不带--install时,解压结果会放在当前目录(或--output-dir指定的目录)下,以产品名命名的文件夹里,类似BootCamp-041-1234。带--install时默认装完即删,想留就加--keep-files

Q:安装完为什么没有弹出Boot Camp首次运行帮助?A:Brigadier在安装结束后会把HKEY_CURRENT_USER\Software\Apple Inc.\Apple Keyboard Support下的FirstTimeRun注册表值设为0,用来关掉那个烦人的首次启动弹窗。目前这个行为没法通过参数关闭,属于写死的行为。

Q:命令行都有哪些参数?A:常用的是这几个:

brigadier [options] -m, --model 指定机型标识,可重复使用 -i, --install 下载后自动安装(仅Windows) -o, --output-dir 指定解压输出目录 -k, --keep-files 安装后保留文件(需配合--install) -p, --product-id 手动指定要下载的产品ID -V, --version 输出版本号

版本迭代:这个工具一直在自我修复

当前版本是0.2.6,从CHANGELIST和VERSION文件里能看到它的演进脉络:

  • 0.2.6:引入certifi证书捆绑,修复了旧版Windows访问7-Zip官网时因Let's Encrypt证书导致的TLS问题;
  • 0.2.5:7-Zip更新到22.01,新增-V/--version选项,并用最后兼容Python 2.7的PyInstaller 3.6重新打包了exe;
  • 0.2.4:砍掉dmg2img依赖,完全交给7-Zip处理DMG;
  • 0.2.3:把msiexec的静默参数从/qr换成/qb-,规避安装时的模态弹窗卡死问题;
  • 0.2.1--model支持多次指定批量下载,--leave-files改名--keep-files,并修复了Payload归档命名不统一的兼容问题。

坦白说,作者在README里也诚恳地提醒过:由于Boot Camp 5/6部分版本与某些硬件的组合存在兼容性问题,Brigadier的静默安装并非在所有机型和驱动组合下都完美,个别情况可能需要手动补装某个驱动。所以把它当作"省时利器",而不是"万能钥匙",心态会平和很多。

写在最后

如果你也被Mac装Windows后的驱动问题折磨过,不妨按下面三步走:

  1. 克隆或下载Brigadier;
  2. Windows上跑brigadier.exe --install,macOS上跑./brigadier --output ~/bootcamp-drivers
  3. 有企业批量部署需求,再研究下Sysprep集成和brigadier.plist配置。

从手动翻官网、层层解压、逐个装驱动,到一行命令全自动,Brigadier把整个流程从30到60分钟压缩到了几分钟。这个工具既照顾了个人用户的省心诉求,也满足了企业IT批量部署的效率要求,值得放进你的装机工具箱。

【免费下载链接】brigadierFetch and install Boot Camp ESDs with ease.项目地址: https://gitcode.com/gh_mirrors/bri/brigadier

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表