是否可以通过虚拟机刷新固件?

是否可以通过虚拟机刷新固件?

我有一些具有更新固件的 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 更新固件,例如:

所以我想知道 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,请根据需要调整这些步骤。

  1. 从以下位置下载 Windows 10 ISOhttps://www.microsoft.com/software-download/windows10ISO

  2. 准备目的地

    仅当您想在特定分区上安装 Windows 时才需要这样做。如果您想在整个驱动器上安装 Windows,则可以跳过此步骤。

    我通常使用 GParted 来完成此类工作:

    1. 在驱动器上创建一些可用空间

      1. 打开 GParted 并调整大小或删除一个或多个分区,然后单击应用所有操作在顶部。我建议 Windows 10 至少有 80 GB 的空间。
    2. (可选)创建新的 NTFS 分区

      1. 右键单击未分配空间 >新的>文件系统>ntfs>添加然后单击应用所有操作在顶部
  3. 安装Windows

    1. 安装VirtualBox

    2. 为驱动器创建VMDK文件,例如

      sudo vboxmanage internalcommands createrawvmdk -filename sda.vmdk -rawdisk /dev/sda
      
    3. 将 VMDK 文件的所有权更改给您的用户

      sudo chown "$USER:" *.vmdk
      
    4. 授予您的用户对磁盘组的临时访问权限

      sudo usermod -aG disk "$USER"
      newgrp disk
      
    5. 启动VirtualBox

      virtualbox
      
    6. 为 Windows 10 创建新虚拟机

      • ISO镜像> 选择您下载的Windows 10安装ISO

      • 查看跳过无人值守安装如果您要安装到特定分区而不是整个驱动器

        ⚠ 无人值守安装 Windows 是 VirtualBox 的一个非常酷的功能,它可以为您节省一些工作,但只有在将 Windows 安装到整个驱动器时才应该使用它,因为它会擦除整个磁盘。

      • 选择使用现有的虚拟硬盘文件并浏览到您创建的 VMDK 文件

    7. 启动虚拟机

      • 如果你没有检查跳过无人值守安装,虚拟机将自动开机并安装Windows

      • 如果你检查过跳过无人值守安装,您需要打开虚拟机并手动完成 Windows 安装过程

        1. 开机后按一个键启动至 Windows 安装

        2. 点击下一个>现在安装

        3. 根据需要填写接下来的屏幕,直到您到达您想要哪种类型的安装?

        4. 选择自定义:仅安装 Windows(高级)然后选择要安装Windows的分区

    8. 安装完成后,会重启虚拟机;在启动之前关闭虚拟机电源

    9. (可选)从 VirtualBox 中删除虚拟机

    10. 退出 VirtualBox 并从disk组中删除您的用户

      sudo deluser "$USER" disk
      
  4. 如果您将 Windows 安装到包含 Linux 的磁盘上的特定分区,则需要再次设置 Grub

    1. 重新安装 Grub,例如

      sudo grub-install /dev/sda
      
    2. 将 Windows 条目添加到 Grub

      1. 启用操作系统探测器

        sudo sh -c 'echo GRUB_DISABLE_OS_PROBER="false" >> /etc/default/grub'
        
      2. 跑步update-grub

        sudo update-grub
        
  5. 重新启动计算机并引导至新的 Windows 安装

    • 如果您将 Windows 安装到整个驱动器,它应该直接启动到 Windows
    • 如果您将 Windows 安装到外部驱动器,则需要从计算机的启动选项中选择该驱动器
    • 如果您将 Windows 安装到特定分区,请从 Grub 选择新的 Windows 10 菜单项

相关内容