如何从它的源代码构建grub2 bootloader并使用qemu模拟器进行测试

时间:2015-08-04 01:36:54

标签: qemu bootloader grub

我想知道如何从ubuntu中的源代码构建grub 2 bootloader并使用qemu模拟器进行测试。

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

这可能吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:8)

当然可以。

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

然后理论上这只是一个问题

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

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

  • (pc)BIOS
  • coreboot
  • (U)EFI
  • ieee1275(开放固件)
  • 的u-boot

你提到的Ubuntu与上面至少有3个可能的选项相匹配,但我会觉得很无聊并且假设你的意思是x86_64 / amd64。由于您将在QEMU下运行GRUB,因此您的物理计算机正在运行的两个可能平台(" pc"或#34; 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菜单,请检查this question。它涉及在启动或编辑/etc/default/grub时按 Shift 以评论GRUB_HIDDEN_TIMEOUT

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

但是,我不会比我现有的更偏离这个答案,所以我要说的是阅读the OVMF README并查看one或{{ 3}}只有略微过时的博客文章。