我想通过 USB 转串口转换器与 GRUB 交互。
我可以通过在 grub 的 cli 中使用以下命令列表在我的笔记本电脑上实现此目的:
insmod nativedisk #to not loose drive information after insmod *hci
nativedisk ahci
insmod ehci
insmod ohci
insmod uhci
insmod usbserial_ftdi # I use an ftdi usb to serial adapter
terminal_output --append serial_usb0
terminal_input --append serial_usb0
同样的过程在我的台式电脑上不起作用,问题是 grub 在执行后丢失了驱动器信息insmod ehci,这意味着一个LS之后没有返回任何磁盘,因此接下来的所有命令都会失败,无法再执行任何操作,我必须重新启动。
这个问题在我的基于 SATA 的笔记本电脑上已得到修复,如上所示,方法是使用本地磁盘 ahci,此命令在台式电脑上不起作用,因为它使用NVMe(pcie)驱动器,以及阿奇模块用于SATA驱动器。
nativedisk的GRUB的文档页面没有列出任何可以使用的参数,并且在源代码我看到了一些 nativedisk 的参数,不幸的是这并不能解决我的问题。
所以我的问题是,为什么 GRUB 在插入各种 *hci 模块时会丢失驱动器信息?我该如何预防/解决这个问题?
答案1
如果没有nativedisk
,GRUB 将依赖于固件的磁盘列表。支持从 NVMe 启动的系统很可能具有 UEFI 固件,这意味着它内置了对 USB 的支持。
当 GRUB 加载其 USB 驱动程序时,它将从固件接管 USB 的控制权 - 并且固件可能足够聪明,能够意识到这意味着其存储设备列表可能因此变得无效。所以这是一个固件实现特征,这使得解决起来很棘手。
UEFI shell 有一个map -r
命令,这表明 UEFI 理解“使用当前活动的驱动程序重新扫描存储设备”的概念,但显然 GRUB 在接管 USB 总线访问后当前不会调用该命令。如果您使用的是 UEFI 版本的 GRUB,那么通过添加一个 UEFI 服务调用来添加对此的支持可能相对容易;但如果您使用的是经典i386-pc
版本,我不确定是否存在合适的 BIOS 调用。
事实上,我很惊讶ehci
USB 驱动程序适合你;我预计具有 NVMe 启动支持的系统具有 XHCI USB 控制器。