Easyboot
========

[Easyboot](https://gitlab.com/bztsrc/easyboot) 是一款一体化的启动 *管理器* 和可启动磁盘映像创建器，可以加载各种二进制格式的各种操作系统内核和
Multiboot2 兼容内核。

![Easyboot](https://gitlab.com/bztsrc/easyboot/raw/main/docs/screenshot.png)

注意：如果您正在寻找一个仅加载单个内核的引导 *加载程序*，那么请看看 **Easyboot** 的弟弟，[Simpleboot](https://gitlab.com/bztsrc/simpleboot)。

致谢
----

如果没有[匈牙利自由软件基金会](https://fsf.hu/nevjegy) 的支持，这个项目就不可能实现。该项目是根据 FSF.hu 的 2023 年自由软件招标创建的。

相对于 GRUB 的优势
----------------

- 无依赖、易于使用、多语言安装程序
- 不臃肿，大约只有 GRUB 大小的 0.5%
- 易于配置，带有语法检查器
- 使用用户提供的 DSDT 轻松修补 ACPI 表
- 如果内核在早期阶段关闭，则显示错误详细信息
- Multiboot2：干净的 64 位入口点（无需在内核中嵌入标签或 32 位蹦床代码）
- Multiboot2：支持高半内核
- Multiboot2：所有平台上独立于固件、一致的内存映射
- Multiboot2：所有平台上独立于固件、一致的帧缓冲区
- Multiboot2：还提供了显示器的 EDID 信息
- Multiboot2：如果需要，在所有处理器核心上启动内核（SMP 支持）
- 还有一个插件可以模拟 GRUB 启动及其所有陷阱和错误。

支持的内核：[Multiboot1](https://www.gnu.org/software/grub/manual/multiboot/multiboot.html) (ELF32, PE/COFF, a.out;
BIOS, UEFI, RPi), [Multiboot2](docs/zh/ABI.md) (ELF32, ELF64, PE32+/COFF, a.out; BIOS, UEFI, RPi),
[Linux](https://www.kernel.org/doc/html/latest/arch/x86/boot.html) (BIOS, UEFI, RPi),
[Windows](https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/boot-and-uefi) (UEFI),
[OpenBSD](https://man.openbsd.org/boot.8) (BIOS, UEFI),
[FreeBSD](https://docs.freebsd.org/en/books/handbook/boot/) (BIOS, UEFI),
[FreeDOS](https://www.freedos.org/) (BIOS), [ReactOS](https://reactos.org/) (BIOS),
[MenuetOS](https://menuetos.net/) 32 / 64 (BIOS, UEFI), [KolibriOS](https://kolibrios.org/en/) (BIOS, UEFI),
[SerenityOS](https://serenityos.org/) (BIOS, UEFI), [Haiku](https://www.haiku-os.org/) (BIOS, UEFI)

支持的文件系统：[FAT12/16/32](https://social.technet.microsoft.com/wiki/contents/articles/6771.the-fat-file-system.aspx),
[exFAT](https://learn.microsoft.com/en-us/windows/win32/fileio/exfat-specification),
[NTFS](https://github.com/libyal/libfsntfs/blob/main/documentation/New%20Technologies%20File%20System%20%28NTFS%29.asciidoc) (v3, v3.1),
[ext2/3/4](https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout),
[XFS](https://mirror.math.princeton.edu/pub/kernel/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf) (SGI),
[UFS](https://alter.org.ua/docs/fbsd/ufs/) (v2, v4.4),
[mfs](https://gitlab.com/bztsrc/minix3fs) (Minix3),
[BeFS](https://www.haiku-os.org/legacy-docs/practical-file-system-design.pdf) (Haiku),
[AXFS](https://gitlab.com/bztsrc/alexandriafs) (OS/Z)

（当内核位于引导分区时，任何文件系统都可以用作根：ZFS、btrfs 等）

理由
----

我创建了一个简单易用的引导加载程序，用户要求越来越多的功能。 我想将该引导加载程序保留为尽可能简单，但 FSF.hu 提供了支持，所以我决定分叉它并在此启动管理器中添加所
有请求的功能反而。

这也是一个像 Simpleboot 一样的 [不吸吮的](https://suckless.org) 工具，没有依赖项，并且非常易于使用：

1. 创建一个目录并将启动文件放入其中，其中包括菜单配置和可选插件
2. 执行 `easyboot (源目录) (输出镜像文件)` 命令
3. 而且……就是这样……没什么可做的了！ 图像  *Just Works (TM)*，它将启动您的内核！

您可以安装启动管理器并使现有设备或映像可启动； 或者您可以重新创建可启动映像。 你可以在虚拟机中启动该映像，或者您可以使用 `dd` 或
[USBImager](https://bztsrc.gitlab.io/usbimager/) 将其写入存储并启动在真机上也是如此。

简单就是终极的复杂！

安装
----

只需下载适合您操作系统的二进制文件即可。 这些是可移植的可执行文件，不需要安装，也不需要任何共享库/DLL。

- [easyboot-x86_64-linux.tgz](https://gitlab.com/bztsrc/easyboot/-/raw/main/distrib/easyboot-x86_64-linux.tgz) Linux, \*BSD (1M)
- [easyboot-i686-win.zip](https://gitlab.com/bztsrc/easyboot/-/raw/main/distrib/easyboot-i686-win.zip) Windows (1M)

此外，您可以在 [distrib](distrib) 目录中找到各种打包解决方案（适用于 Debian、Ubuntu、RaspiOS、Gentoo、Arch）。

创建图像时（取决于您的配置），您可能还需要 `(源目录)` 中的一些插件。 您可以使用扩展名 `plg` 在 [src/plugins](src/plugins) 目录中找到它们。 从软件包安装时，
它们将放置在 `/usr/share/easyboot` 下。

文档
----

有关如何使用可启动磁盘创建器以及如何启动内核的详细[文档](docs/zh)（英文）可以在 docs 目录中找到。

示例内核
-------

如果你想使用 **Easyboot** 的 [简化的 Multiboot2](docs/zh/ABI.md) 协议编写一个无需任何插件即可加载的内核，请查看
[Simpleboot 示例内核](https://gitlab.com/bztsrc/simpleboot/-/tree/main/example) 目录。两个加载程序使用相同的引导协议，该内核按原样与
**Easyboot** 一起工作。 您将看到不需要 Assembly 或嵌入式标签，否则源代码与 Multiboot2 规范中的示例 99.9% 相同（唯一的区别是，它打印到串行控制台，
而不是打印在 VGA 电传打字机屏幕上，因为 UEFI 和 RaspberryPi 机器上不存在后者）。

汇编
----

编排需要 GNU/make（尽管它实际上只是 `cc easyboot.c -o easyboot`）。 工具链并不重要，任何 ANSI C 编译器都可以，也可以在 POSIX 和 WIN32 MINGW 上运行。
只需进入 [src](src) 目录并运行  `make`  即可。 就这样。尽管它的尺寸很小，但它是独立的，并且编译时的库依赖性完全为零。 它的名字  **Easyboot**  不是无缘无故的:-)

要重新编译加载器，您需要 [flatassembler](https://flatassembler.net)、LLVM Clang 和 lld（gcc 和 GNU ld 恐怕行不通）。 但别担心，
我已经将它们全部添加到  `src/data.h` 作为字节数组，所以你不必编译这些除非你真的想要（为此，只需在运行 make 之前删除 data.h ）。

另一方面，要编译插件，您必须有一个交叉编译器，可以是 LLVM CLang 或 GNU gcc (x86_64-elf-gcc，aarch64-elf-gcc)。 该存储库也将这些作为二进制文件包含在内。
要重新编译，只需在运行 make 之前删除 `src/plugins/*.plg` 文件即可。

执照
----

**Easyboot** 是免费开源软件，根据 GPL 版本 3 或（根据您的意见）任何更高版本的条款获得许可。有关详细信息，请参阅 [LICENSE](LICENSE) 文件。

bzt
