如何从Grub2源代码构建引导加载程序并在QEMU模拟器中进行测试

11

我想知道如何在Ubuntu中从源代码构建Grub 2引导程序,并使用QEMU模拟器进行测试。

我还想更改新构建的Grub2引导程序的默认背景图像?

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


更改背景图像并非编程任务,因此您可以在superuser.com上询问该问题的部分。 - unixsmurf
你可以在/etc/default/grub中使用以下命令:GRUB_BACKGROUND="/usr/share/grub/themes/Tuxkiller2/1600x900-TuxRestingOnWindowsTB.png"将会设置一个背景图片。GRUB_THEME="/usr/share/grub/themes/Tuxkiller2/theme.txt"将会给你带有背景图片、图标、自定义字体、菜单边框、项目边框等的图形化菜单。 - WinEunuuchs2Unix
1个回答

14
当然可以。
正如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至少符合上述三个选项中的其中一个,但我会有点无聊,假设您指的是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-mkstandalone命令可能是获取可用GRUB镜像的最简单方法:
$ $HOME/local/bin/grub-mkstandalone -O x86_64-efi -o mygrub.efi

注意:如果要在/dev/sda磁盘(而不是QEMU)上安装grub,请使用以下命令:
$ sudo grub-install /dev/sda

注意:如果在启动时没有看到GRUB菜单,请查看此问题。这涉及到在启动或编辑/etc/default/grub时按下Shift,或注释掉GRUB_HIDDEN_TIMEOUT
然后,您需要一些UEFI映像来在QEMU下运行。对于x86,默认选择称为OVMF,是Tianocore EDK2的一部分 - 事实上是UEFI开源实现。由于涉及重新分发FAT文件系统驱动程序的法律技术细节,许多Linux发行版(包括Ubuntu)不包含预构建的驱动程序。但请不要担心,自己构建一个相当简单。

然而,我不会让这个答案偏离主题,所以我只想说请阅读OVMF README,并查看其中一个两个稍微过时的博客文章。


谢谢您的回答。但我还想知道,是否可以自定义grub代码,比如删除多重引导功能。如果可以,请给我一个相关的来源。 - Project-A
忘记设置 --prefix 会导致错误 ./grub-install : error : /usr/local/lib/grub/i386-pc/modinfo.sh 或类似的错误。 - KrisWebDev
@KrisWebDev:我现在才注意到你的编辑。那些不应该作为单独的答案吗? - unixsmurf
很高兴我找到了这个。我使用UEFI引导的Ubuntu 64位系统。我的目标是将超时时间从秒更改为十分之一秒。因此,GRUB_TIMEOUT=25不再表示25秒,而是2.5秒。这是为了在gfxmenu下具有圆形进度显示的平滑“滴答声”倒计时。由于您非常有知识,我想知道是否有Grub论坛可以潜水或阅读一些提示以帮助旅程? - WinEunuuchs2Unix
1
@WinEunuuchs2Unix:好的,总有grub开发邮件列表档案 - http://lists.gnu.org/archive/html/grub-devel/。 - unixsmurf
3
只有一个小细节,应该是:./configure --prefix=$PWD/_install --with-platform=efi - Yamian Quintero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接