如何向 GRUB 添加网络驱动程序?

如何向 GRUB 添加网络驱动程序?

我需要将网络驱动程序添加到 GRUB

我试着跟随本手册由 GNU 提供,但它只说

尽管 GRUB 是基于磁盘的引导加载程序,但它确实提供网络支持。要使用网络支持,您需要在 GRUB 构建过程中至少启用一个网络驱动程序。有关更多信息,请参阅源代码分发中的“netboot/README.netboot”。

netboot/README.netboot我似乎无法在网上找到这个文件。有谁知道如何在 GRUB 中安装网络驱动程序?如何使用 liveCD 构建 GRUB?

如果您需要的话,我的网卡根据lspci

01:00.0 Network controller: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter (rev 31)

答案1

您正在查看过时的 GRUB Legacy(即 GRUB 版本 0.9x)的手册。

有了这些信息,我发现您正在查找的自述文件的副本。你会发现它只支持一系列旧的有线网络接口,大多在 10/100 Mbps 范围内。

但 GRUB 在 1.xx 版本中被完全重写,旧 GRUB Legacy 的文档根本不适用于现代版本的 GRUB(版本 2.0x)。

这是现代版本 GRUB 的手册。

从网络启动的标准方法是使用 PXE 规范。这要求网卡提供自己的系统固件扩展(BIOS 扩展或嵌入式 UEFI 驱动程序),该扩展将激活该卡并允许其发送带有附加 PXE 属性集的 DHCP 请求。然后 DHCP 服务器必须在其响应中包含启动文件位置。

然后,固件将从 DHCP 响应中指示的位置下载基于网络的引导加载程序,通常使用 TFTP 协议,但在较新的 UEFI 实现中也可以选择使用 HTTP。之后,控制权将转移到下载的引导加载程序,引导加载程序将能够使用标准化固件 API 下载更多文件来控制网卡。

问题是,大多数无线网络接口不会包含这样的 PXE 启动固件扩展(即我从未见过具有功能性 PXE 启动功能的无线网络接口)。

这是因为在您的具体情况下存在非常严重的“先有鸡还是先有蛋”的问题,而且大多数情况下无线的NIC 一般情况:在无线网络适配器开始工作之前,您需要将一个或多个固件文件加载到网络适配器中。但如果您想从网络启动,通常意味着您根本不想(或不能)使用任何本地磁盘,因此您将没有任何地方可以获取固件文件。

如果如果您有一个 NIC 的 GRUB 驱动程序,它很可能是一个编译时配置选项。它也可能是一个 GRUB 模块,可以使用insmod命令加载。但据我所知,没有人为 GRUB 编写任何 wifi 驱动程序。

目前,唯一可用于 GRUB 2.xx 的网络驱动程序包含在GRUB源码包的grub-core/net/drivers目录。他们是:

  • efinet对于 UEFI 系统,依赖于固件或 UEFI 驱动程序提供的硬件支持。
  • emunet关于QEMU虚拟化(我认为)
  • pxe在基于 BIOS 的 x86 系统上,依赖于固件提供的硬件支持(通常作为网络适配器的 PXE 引导 BIOS 扩展)
  • ofnet对于使用的系统开放固件(来自 Sun、Apple、IBM、ARM 的系统)
  • ubootnet对于使用的系统U启动固件(主要是嵌入式Power Architecture、ARM和MIPS系统)

或者,如果您的目标系统具有 UEFI 固件,则它可能有.efi可用的驱动程序,并且您可以定义 UEFI NVRAM 引导变量(例如,使用带有efibootmgr --driver适当选项的命令)以在加载引导加载程序之前从本地 EFI 系统分区加载驱动程序,然后依靠UEFI的原生网络支持。但我也没有看到任何.efi无线网卡的驱动程序。

如果您有足够的本地磁盘空间来容纳 GRUB(或任何其他引导加载程序)、Linux 内核文件和 Linux initramfs 文件,其中包括 wifi NIC 的 Linux 驱动程序、它所依赖的任何内核模块、固件文件对于 NIC wpa_supplicant、其配置和 DHCP 客户端,您可以只在本地启动 Linux 内核并使用 initramfs 环境来启动 wifi 连接。然后,您可以让 initramfs 从网络下载基于 ramdisk/tmpfs 的根文件系统映像并使用它,或者使用位于 NFS 服务器上的根文件系统。这可能是实现您的目标的最简单方法,而无需启动“编写我自己的 wifi 驱动程序”项目。

相关内容