我想知道如何从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,看看一两篇稍微过时的博客文章。