我对这个世界还很陌生。
我有一个 ARM SoC 并且想选择一个启动环境。
需要考虑哪些事情?
供应商提供的两种选择是 u-boot 和 UEFI。
一个比另一个更容易修改吗?
答案1
第一个小问题是 UEFI 只是一种规范,您在平台上使用的是 EDK2 或其他 UEFI 规范实现。因此您的供应商可能会提供一些 EDK2 修改。
我认为你已经考虑了很多因素:
- 实现可用性 - 正如 Tom 在其他回答中提到的那样。这是关键论点,因为将 UEFI 移植到新平台很可能需要大量的编程工作。
- 目标操作系统 - 对于现代 Windows,你别无选择,必须使用 EDK2
- 安全类型 - 请注意,新的 ARMv8 平台提供了您在设计时可能需要利用的某些安全支持(OP TEE、ATF)。
- 功能集 - 为了最大化投资回报率,您必须选择已实现大多数功能的实施方案。
- 贡献 - U-Boot 对贡献条款非常明确,并且合并的所有代码均遵循 GPLv2,对于任何 Tianocore 项目(EDK2 是其中的一部分),您必须熟悉并签署TianoCore 贡献协议 1.0。EDK2 是 BSD 许可的。
我使用过 EDK2 和 U-Boot 两种实现,如果可以选择,我会选择 U-Boot。为什么?
- 友好、广泛和多样化的社区 - EDK2 主要依赖英特尔、苹果和一些商业供应商。U-Boot 拥有来自不同行业、拥有不同经验的人员,因此很可能有人遇到过类似的问题。
- 复杂性——UEFI/EDK2 的学习曲线很陡峭,因为它们使用了嵌入式开发中不常见的各种概念(即 HOB、所有文件类型),对于 U-Boot,任何熟悉 Linux 内核的人都可以很快获得设计。
- 认证 - 据我所知,U-Boot 没有任何正式流程。对于 UEFI 实施,您需要进行一系列测试来证明您符合 UEFI 要求。
可能还有很多,但我认为这足以让您自己进行研究并了解您的选择应该是什么。