我想知道如何从ubuntu中的源代码构建grub 2 bootloader并使用qemu模拟器进行测试。
我还想在新版本中更改grub2 bootloader的默认背景图片吗?
这可能吗?如果是,怎么样?
答案 0 :(得分:8)
当然可以。
如GRUB website所示,grub源代码可以通过git从git.savannah.gnu.org获得。
然后理论上这只是一个问题
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
但是,根据您的平台,grub的默认目标平台可能是您想要的,也可能不是。因此,您需要确定要在QEMU中使用哪个固件平台,具体取决于您的架构
你提到的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}}只有略微过时的博客文章。