7

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

我还想在新版本中更改 grub2 bootloader 的默认背景图像?

这可能吗?如果是,如何?

4

1 回答 1

13

当然可以。

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

那么理论上只是一个问题

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

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

  • (个人电脑) BIOS
  • 核心引导
  • (U)电喷
  • ieee1275(开放固件)
  • 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

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

$ sudo grub-install /dev/sda

注意:如果您在引导时没有看到 GRUB 菜单,请检查此问题。它涉及Shift在启动时按下或编辑/etc/default/grub评论GRUB_HIDDEN_TIMEOUT

然后你需要某种 UEFI 映像在你的 QEMU 下运行。x86 的默认选择称为 OVMF,它是Tianocore EDK2(UEFI 的事实上的开源实现)的一部分。由于重新分发 FAT 文件系统驱动程序的法律技术问题,许多 Linux 发行版(包括 Ubuntu)不包含预构建的发行版。但是不用担心,自己构建一个非常简单。

但是,我不会让这个答案比我已经拥有的更离题,所以我要说的是阅读OVMF README并浏览两篇关于它的稍微过时的博客文章。

于 2015-08-11T19:34:53.540 回答