我有一些具有更新固件的 USB 设备,但我没有方便的 Windows PC 来更新固件。
首先我检查fwupdmgr
是否可以直接在 Linux 中更新设备,但它说没有任何可用的固件更新。
接下来,我尝试使用 Virtualbox 7 更新 Windows 10 和 11 虚拟机中的固件。我设置了 USB 直通,并且设备在 Windows 中似乎工作正常。事实上,对于某些设备(例如多个罗技鼠标),我安装了供应商软件,该软件可以识别这些设备并允许我对其进行更改(但不能更新固件)。
我还确保我是该vboxusers
组的成员,并且我发现 VirtualBox 的 udev 规则在/etc/udev/rules.d/60-vboxdrv.rules
. 我尝试在虚拟机设置中将 USB 控制器设置为不同版本(USB 3.0、2.0、1.1)。
我还阅读了此页面并尝试了其中列出的所有内容:https://forums.virtualbox.org/viewtopic.php ?t=82639
最后,我尝试了 Gnome Boxes 和 virt-manager,以防这个问题是 VirtualBox 特有的,但这些都不起作用。
我看到有些人提到他们能够在 macOS 上使用 Virtualbox 更新固件,例如:
- https://www.reddit.com/r/xbox/comments/od0qzv/comment/h4dl6mc/
- https://www.reddit.com/r/macgaming/comments/u4eunt/solution_how_to_update_xbox_controller_firmware/
所以我想知道 Linux USB 设备连接到虚拟机的方式是否有一些独特之处,导致固件更新变得不可能。
我的问题与此类似,但该用户询问更新固件是否安全,而不是询问是否可能。
在尝试了几次迭代(VirtualBox/Gnome Boxes/virt-manager 上的 Windows 10/11)之后,我最好的猜测是,目前不可能通过在 Linux 上运行的 Windows 虚拟机来更新固件。
由于我不使用 Windows,并且不想在任何计算机上为其分配专用驱动器空间,因此我当前的解决方法是将 Windows 安装在外部驱动器上,如果我需要更新不在
fwupdmgr
.Windows(与 Linux 和 macOS 不同)并不正式支持从外部驱动器运行,但我可以使用此处的步骤使其正常工作:如何从 USB 驱动器运行 Windows。
总结一下:
首先,您需要一台 Windows 计算机来运行这些步骤。您也许可以在 Linux 上的 Windows 虚拟机中运行它们,但我无法让它工作(这可能是因为我使用了大约 2010 年的 USB 2.0 HDD;就像我说的,我不想如果不需要的话,请为 Windows 提供任何好的存储空间 ?)
接下来您需要一个 Windows ISO
转到Windows 10或Windows 11下载网站
如果你使用的是 Linux,它似乎允许你直接下载 ISO。如果您使用的是 Windows,则必须下载其“媒体创建工具”,运行该工具后,在出现提示时选择“创建安装媒体和ISO 文件”
从https://github.com/pbatard/rufus/releases下载 Rufus
打开鲁弗斯
选择外部驱动器
选择您下载的 Windows ISO
将图像选项设置为Windows To Go
根据需要更改任何其他选项,然后单击“开始”