如何从源代码构建 GRUB2 引导加载程序并使用 QEMU 模拟器进行测试



我想知道如何从ubuntu的源代码构建grub 2引导加载程序,并使用qemu模拟器进行测试。

我还想在新构建中更改grub2引导加载程序的默认背景图像?

这可能吗?

当然可以。

如GRUB网站所示,GRUB源代码可通过git从git.savannah.gnu.org获得。

那么理论上就是

的问题了
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

但是,根据您的平台,grub的默认目标平台可能是您想要的,也可能不是。因此,您需要决定在QEMU中使用哪个固件平台,这取决于您的体系结构,可以是像

这样的内容。
  • (pc) BIOS
  • coreboot
  • (U) EFI
  • ieee1275 (open firmware)
  • u-boot

你提到的Ubuntu与上面的至少3个可能的选项相匹配,但我将会很无聊,假设你是指x86_64/amd64。由于您将在QEMU下运行GRUB,因此您的物理计算机正在运行两种可能的平台("pc"或"efi")中的哪一种并不重要。因此,让我们稍微活一下,看看(U)EFI的变体。

在配置和构建之前需要安装一些先决条件,所以

$ sudo apt-get install build-essential autoconf automake
$ sudo apt-get build-dep grub-efi-amd64

所以一个实际的构建可能看起来像这样:

$ # Next command is optionnal (languages):
$ ./linguas.sh
$ ./autogen.sh
$ # Next parameters are optionnal:
$ ./configure --prefix=$HOME/local --platform=efi
$ make
$ # Next command is optionnal:
$ make check
$ make install

获取正常运行的GRUB映像的最简单方法可能是使用grub-mkstandalone命令:

$ $HOME/local/bin/grub-mkstandalone -O x86_64-efi -o mygrub.efi

注意:要在/dev/sda磁盘(而不是QEMU磁盘)上安装grub,请使用:

$ sudo grub-install /dev/sda

注意:如果您在启动时没有看到GRUB菜单,请检查此问题。它包括在启动时按Shift或编辑/etc/default/grub时注释GRUB_HIDDEN_TIMEOUT

那么你需要某种UEFI映像在你的QEMU下运行。x86的默认选择是OVMF,它是天芯EDK2的一部分——UEFI事实上的开源实现。由于FAT文件系统驱动程序再分发的法律技术问题,许多Linux发行版(包括Ubuntu)不包括预构建的驱动程序。不过别担心,你自己也可以很简单地造一个。

然而,我不想让这个答案比我已经说过的更远,所以我要说的是,通读一下OVMF README,看看一两篇稍微过时的博客文章。

相关内容

  • 没有找到相关文章

最新更新