构建 BIOS/UEFI 双重启动镜像

1. 介绍 / Intro

最近有项工作需要构建一个启动镜像,虽然 BIOS 引导不是必须的,但是为了更舒服的兼容性,了解了一下如何实现 BIOS/UEFI 双重启动,并且还要能够支持 UEFI secure boot 安全启动。
实际上各个 Linux 发行版的安装介质早已经实现了类似的功能,甚至一些也已经支持了 UEFI secure boot。简单搜索得知,大概思路是建立一个 hybrid 格式的磁盘镜像,也就是 MBR 和 GPT 混合格式的分区,在 MBR 空间内安装传统的 grub-pc, 而在 GPT 的 esp 分区内放置 grub-efi 启动文件。
下面我们分步骤介绍在 ubuntu 系统下构建这样一个启动镜像的步骤,完整的脚本文件见文末参考资料部分。

2. 操作步骤 / Operations

2.1 安装依赖软件
安装 shim 和签名过的 grub 二进制,以便支持 UEFI secure boot 安全启动;另外,busybox-static 将用于提供 rootfs 中的各种命令。

2.2 解压 initramfs & 安装 busybox
使用系统中已有的 initramfs, 并重新安装 busybox 工具链接。之后再对 initramfs 进行精简,移除各类非必要的软件、驱动和 firmware 等。

2.3 修改 init 启动脚本 & 构建 initrd 镜像
修改 initramfs 中的 init 启动脚本,使其在加载完必要的内核模块之后,就进入交互式 shell,而不是尝试挂载磁盘并执行真实文件系统上的 /sbin/init

2.4 安装并配置 shim, grub, 内核和 initrd
这一步主要是放置 shim 和 grub 引导的 efi 文件(ubuntu shim/grub 具有特殊的目录结构),并准备好配置文件 grub.cfg

2.5 构建磁盘镜像
创建 hybrid 格式的磁盘镜像,建立好分区和文件系统,最后安装 grub-pc 并拷贝 grub-efi 文件即可

2.6 qemu 启动测试

3. 参考资料 / Refer

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


The reCAPTCHA verification period has expired. Please reload the page.