我有一些具有更新固件的 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 设备连接到虚拟机的方式是否有一些独特之处,导致固件更新变得不可能。
我的问题类似于这个,但该用户询问的是更新固件是否安全,而不是是否可能。
答案1
在尝试了几次迭代(VirtualBox/Gnome Boxes/virt-manager 上的 Windows 10/11)之后,我最好的猜测是,目前不可能通过在 Linux 上运行的 Windows 虚拟机来更新固件。
我不使用 Windows,但我能想到的唯一解决方法是安装一个小型 Windows 安装来更新固件。你可以:
- 在旧的未使用的计算机上安装 Windows
- 在您使用的计算机上创建一个小的 Windows 分区
- 将 Windows 安装到外部驱动器
以正常方式安装 Windows
安装 Windows 最简单的方法是下载Windows 10或者视窗11安装 ISO,创建可启动 USB 安装,然后使用它来安装 Windows。
就我而言,我不想仅仅为了创建 Windows 安装介质而擦除完美的 USB 驱动器,并且我确实希望能够在安装 Windows 时使用我的计算机,因此我更喜欢直接从Linux。
使用以下命令从 Linux 安装 Windows 10deploy-win10-from-linux
这是一个非常酷的工具,允许在不使用虚拟机的情况下完全从 Linux 安装 Windows 10,但它有点先进,而且文档也很少。然而,我能够让它工作,并且我在这里记录了我所做的事情:https://codeberg.org/regnarg/deploy-win10-from-linux/issues/1
使用 VirtualBox 从 Linux 安装 Windows 10
请注意,为了简单起见,我使用 MBR+BIOS 安装了 Windows 10。如果您使用的是 GPT+EFI,请根据需要调整这些步骤。
从以下位置下载 Windows 10 ISOhttps://www.microsoft.com/software-download/windows10ISO
准备目的地
仅当您想在特定分区上安装 Windows 时才需要这样做。如果您想在整个驱动器上安装 Windows,则可以跳过此步骤。
我通常使用 GParted 来完成此类工作:
在驱动器上创建一些可用空间
- 打开 GParted 并调整大小或删除一个或多个分区,然后单击应用所有操作在顶部。我建议 Windows 10 至少有 80 GB 的空间。
(可选)创建新的 NTFS 分区
- 右键单击未分配空间 >新的>文件系统>ntfs>添加然后单击应用所有操作在顶部
安装Windows
安装VirtualBox
为驱动器创建VMDK文件,例如
sudo vboxmanage internalcommands createrawvmdk -filename sda.vmdk -rawdisk /dev/sda
将 VMDK 文件的所有权更改给您的用户
sudo chown "$USER:" *.vmdk
授予您的用户对磁盘组的临时访问权限
sudo usermod -aG disk "$USER" newgrp disk
启动VirtualBox
virtualbox
为 Windows 10 创建新虚拟机
ISO镜像> 选择您下载的Windows 10安装ISO
查看跳过无人值守安装如果您要安装到特定分区而不是整个驱动器
⚠ 无人值守安装 Windows 是 VirtualBox 的一个非常酷的功能,它可以为您节省一些工作,但只有在将 Windows 安装到整个驱动器时才应该使用它,因为它会擦除整个磁盘。
选择使用现有的虚拟硬盘文件并浏览到您创建的 VMDK 文件
启动虚拟机
如果你没有检查跳过无人值守安装,虚拟机将自动开机并安装Windows
如果你检查过跳过无人值守安装,您需要打开虚拟机并手动完成 Windows 安装过程
开机后按一个键启动至 Windows 安装
点击下一个>现在安装
根据需要填写接下来的屏幕,直到您到达您想要哪种类型的安装?
选择自定义:仅安装 Windows(高级)然后选择要安装Windows的分区
安装完成后,会重启虚拟机;在启动之前关闭虚拟机电源
(可选)从 VirtualBox 中删除虚拟机
退出 VirtualBox 并从
disk
组中删除您的用户sudo deluser "$USER" disk
如果您将 Windows 安装到包含 Linux 的磁盘上的特定分区,则需要再次设置 Grub
重新安装 Grub,例如
sudo grub-install /dev/sda
将 Windows 条目添加到 Grub
启用操作系统探测器
sudo sh -c 'echo GRUB_DISABLE_OS_PROBER="false" >> /etc/default/grub'
跑步
update-grub
sudo update-grub
重新启动计算机并引导至新的 Windows 安装
- 如果您将 Windows 安装到整个驱动器,它应该直接启动到 Windows
- 如果您将 Windows 安装到外部驱动器,则需要从计算机的启动选项中选择该驱动器
- 如果您将 Windows 安装到特定分区,请从 Grub 选择新的 Windows 10 菜单项