我在 PC 的内部硬盘上安装了 grub2,并且尝试在 USB 闪存盘上启动 debian 安装。 PC 没有任何 USB 3 端口,因此我添加了 USB 3 PCIe 卡。我知道大多数 PCIe USB3 卡没有启动 ROM,因此我的计划是从硬盘加载 grub2,然后启动到 USB 闪存盘。
当 USB 密钥插入 USB 2 端口时,设置一切正常。当我尝试插入 PCIe 卡上的 USB3 端口时,出现以下错误:
块引用错误:没有这样的设备:此处驱动器的 UUID
之后 grub 进入救援模式并且 ls 只显示 (hd0)、(hd0,msdos1) 和 (hd0,msdos2)。所以就好像 grub 无法“看到”USB 密钥一样。
我已将 usb、usbms、xhci、echi、uhci 的 insmod 添加到 /boot/grub/grub.cfg 。我知道 USB 3 端口可以在 Linux 上工作,因为当我从硬盘驱动器上的发行版运行时,我可以从端口中的 USB 密钥进行安装。有什么办法让 grub2 支持 PCIe USB 端口吗?
答案1
不同的 USB 控制器需要不同的 GRUB 模块:
- 对于 USB 1.x,GRUB 有
ohci.mod
和uhci.mod
. - 对于 USB 2.0,GRUB 有
ehci.mod
. - 对于 USB 3.x,等效模块是
xhci.mod
,但截至撰写本文时,GRUB 似乎仍然没有此驱动程序模块。
大多数新系统似乎都有 UEFI 固件,该固件在固件级别内置了对 USB 的支持,因此开发人员可能预计 GRUB 中不需要对本机 USB3 XHCI 控制器支持。不幸的是,这意味着像您这样的附加卡用户将不走运。
直到最近,大多数支持 USB 3 的系统还包括向后兼容的 EHCI 控制器以及两者之间的切换协议。这将允许系统以 EHCI 控制器启动,最初驱动 USB 端口,并在加载驱动程序后切换到 XHCI 控制器。有了这样的系统,GRUB 仅使用 EHCI 驱动程序模块就可以实现大量 USB 功能。
由于 Windows 7(最后一个没有内置 USB 3 支持的主要操作系统)现已接近支持终止,硬件制造商已开始生产仅 XHCI 的芯片组和系统。这可能会增加对 GRUB 的 XHCI 驱动程序模块的需求。然而,功能齐全的 XHCI 驱动程序是一件复杂的事情,开发一个是一项相当艰巨的工作。
如果您的系统使用 UEFI 固件,则可能还有另一种可能性:如果您可以找到xhciDxe.efi
XHCI USB 控制器的 UEFI 驱动程序,则可以通过配置适当的 UEFI NVRAM 变量来加载它,这将为所有设备添加 XHCI USB 支持UEFI 固件功能的用户,包括 GRUB 的 UEFI 版本。据我所知,这是在 Apple 硬件上运行 Linux 时可能需要的东西;我对此没有经验,但我在这里找到了一个版本xhciDxe.efi
。
答案2
Grub2 模块和 Linux 内核模块不是一回事。换句话说,如果你在 Linux 上这样做
lspci -k
并检查您的 PCIe 卡正在使用哪个模块 - 这不会与 grub2 中的模块相同。也许 grub2 甚至没有类似的模块。
尝试从 grub2 加载这些:
- lspci
- PCI转储
- PCI
- 设置pci
来源 :http://www.linux.org/threads/understanding-the-various-grub-modules.7535/
答案3
在非 UEFI 的 PC (BIOS LEGACY) 上通过 PCI-E 启动包含 Linux 或 Windows 的 USB 3.0 驱动器的唯一方法是将系统安装在 USB 记忆棒上,例如通过 USB 2.0(它将作为主启动通道) ),然后将操作系统克隆到将在 PCI-E USB 3.0 连接上工作的最终驱动器。
从 USB 2.0 USB 记忆棒启动操作系统时,它将自动通过 UUID 调用 PCI-E 上的 USB 3.0 连接驱动器。