概览
在 Fuchsia 中,可以按架构、主板和驱动程序划分硬件支持,请参阅 RFC-0111:初始 Fuchsia 硬件平台规格。本页面不介绍如何添加对新架构的支持。
请注意,x64 架构本身就被视为一种板(可配置性很高),因此本文不对其进行介绍,因为 x64 架构已受支持(但其实现可以改进,并支持更多当前无法工作的配置)。
如需添加对新开发板的支持,首先需要添加对 bringup build 产品配置的支持。
添加引入 build 配置支持
为了让启动构建正常运行,您需要:
支持的架构
如需了解架构支持流程,请参阅 RFC-0111:初始 Fuchsia 硬件平台规范。
引导加载程序和内核支持
新开发板需要一种内核加载方式,最好使用支持 Fuchsia 的引导加载程序。此外,内核至少需要支持一种采用内核驱动程序的形式的早期调试机制(例如串行端口)、中断控制器和计时器。
开发板必须包含一种对其编程的机制(例如,在 Flash 中存储内容)。更新引导加载程序时需要用到此文件。Fuchsia 映像可以使用此机制进行编程,也可以通过引导加载程序提供的支持进行编程。
引导加载程序
在本文档中,引导加载程序是指最终阶段引导加载程序,即启动过程中加载 Fuchsia 内核的软件组件。
有多种配置可让引导加载程序加载 Fuchsia 内核:
- 引导加载程序支持 Fuchsia:最佳选项是在引导加载程序中添加对 Fuchsia 的支持。在这种情况下,Zircon 启动映像 (ZBI) 规范由固件 SDK 实现。例如,针对 VIM3 增加的 U-Boot 支持。
- 如果引导加载程序不支持 Fuchsia,则必须向内核添加 boot shim 机制,使 Fuchsia build 与引导加载程序启动工具(例如 fastboot)兼容。点击此处查看 MediaTek 8167 开发板的示例。此 boot shim 将在以下各项中指定所有驱动程序。请注意,此处还必须列出启动 shim。
注意:
- 分区映射需要提供足够大的分区,以满足 Fuchsia 的要求。
- 需要考虑引导加载程序、Fuchsia 内核和任何安全端软件之间的预留资源,尤其是预留内存区域和预留硬件块。例如,某些硬件可能由引导加载程序配置,并且可能受以 EL3/EL2 运行的代码的控制。通过驱动程序从 EL1/0 操控此类设备可能会导致行为不稳定。确保了解安全监视器或 Hypervisor 可能正在使用哪些硬件/外围设备。
内核驱动程序
在 Fuchsia 中,大多数驱动程序都在用户空间中,但是本部分中列出的驱动程序必须存在于内核中。
要启动新开发板,需要一些早期阶段的调试机制,例如串行端口或 JTAG。如果串行端口是一种机制,则必须添加 UART 驱动程序(如果内核中尚无可用的 UART 驱动程序,例如此处)。此外,驱动程序还通过驱动程序添加了 ARM 的中断控制器和计时器支持,例如 gicv3 和通用计时器。
所有这些驱动程序都需要配置为可供内核使用。如果内核由支持 fuchsia 的引导加载程序启动,驱动程序将在 ZBI 中配置,例如在此处的 U-Boot 中配置。如果内核是使用 boot shim 启动的,则驱动程序将在 shim 中进行配置。例如,对于 MediaTek 8167 开发板,请点击此处。
注意:
- 例如,可以添加其他驱动程序,以使用 PSCI 控制电源。
build 组件
如需添加对新开发板的支持,需要向构建系统 (gn) 添加新的 board 配置。
VIM3board_bootfs_labels
添加板级配置后,可以指示构建系统为新开发板创建映像。例如:fx set bringup.vim3
后跟 fx build
(请参阅 fx 工作流)。
这样,新开发板的启动 build 就可以加载到目标中,我们可以在串行端口中获得 shell(如果添加了内核串行端口驱动程序)。下一步是添加板驱动程序及其对应的非内核驱动程序,以提供更多功能。
开发板驱动程序
开发板驱动程序会描述并配置无法通过探测定位/配置的开发板硬件,这在基于 ARM64 的系统中很常见。
注意:
- 驱动程序的配置必须在开发板驱动程序中完成,而不是在实际驱动程序中完成,以便在组装时可重复使用和模块化。
非内核驱动程序
注意:
- 有时,硬件会特意在引导加载程序中进行初始化,以便显示徽标。需要在常规驱动程序中考虑到这一点。相关信息可以使用 ZBI 中的内核参数进行传递。
- 通过创建可跨驱动程序共享的库,或使驱动程序可从板驱动程序高度自定义,从而避免重复,从而重用软件。
- 使用系列(而不是特定的 SoC)为驱动程序和变量命名,以实现更明确的重用和汇总。
- 不要对引导加载程序保留的硬件状态做假设(第 1 项中所述的常见情况除外)。硬件不一定处于重置状态。
- 具体来说,请确保所有 GPIO 都处于安全状态。
- 具体而言,需要考虑引导加载程序可能会将硬件留在 DDR、DVFS、显示设备等方面的缓慢配置。
添加核心 build 配置支持
启动 build 运行后,您需要添加对核心 build 产品配置的支持,以创建包含核心系统服务、连接和指标报告的自行更新系统。
为了启用核心 build,您需要拥有一个正常运行的网络堆栈,因为核心 build 就是这样支持系统调试(例如使用 fx log
和 fx shell
)、更新(例如使用 fx ota
)和指标报告(例如使用 fx snapshot
)。
添加全面的系统配置支持
核心 build 正常运行后,可以通过定义新的产品配置来集成整个系统。例如,对于 x64,我们已经定义了 workbench_eng,其中包含网络浏览器和许多其他功能。同样,您也可以针对其他架构添加新的产品配置,例如基于 ARM64 的系统。