系统启动与运行时加载流程
控制器硬件上电后,系统首先进入芯片启动流程。通常由片上 BootROM 完成最初级的硬件初始化,并根据启动介质(如 eMMC、SD 卡、SPI Flash 等)加载第一阶段引导程序。随后,引导程序逐步完成 DDR 初始化、设备配置以及 Linux 内核加载,并将控制权交给 Linux 操作系统。Linux 内核启动后,会完成驱动加载、文件系统挂载、用户空间初始化等工作,最终启动系统服务和平台应用程序。
不同芯片平台和 Linux 发行版本的具体启动过程可能存在差异,详细内容可参考对应芯片技术手册、BootLoader 文档以及 Linux 操作系统相关资料。本文不对 Linux 启动过程进行深入展开,而是重点介绍 Linux 系统启动完成之后,HCP 平台主控程序 hcploader 的启动流程及其运行机制。
hcploader 是 HCP 平台在 Linux 用户空间中的主控加载器,负责完成运行环境准备、实时核启动、核间通信建立、共享内存资源初始化、FPGA 配置、执行图分发以及对外服务启动。其启动过程并不是简单的线性函数调用,而是围绕“主进程、实时核、共享内存/FPGA、对外服务”四类职责域逐步建立运行依赖。
从系统启动依赖关系看,hcploader 的启动过程可划分为五个主要阶段:
-
基础准备阶段 完成命令行参数解析、信号处理注册、LED 状态初始化以及虚拟串口和日志输出通道建立。该阶段为后续启动过程提供统一的日志输出、异常退出清理和故障状态指示能力。
-
通信链路建立阶段 启动远程处理器固件,完成 remoteproc 加载流程,重新绑定 RPMsg 驱动,并建立主处理器与各实时核之间的命令通信通道。同时完成共享内存基础区域的清理和必要通道准备,为后续执行图和运行数据的发布提供基础设施。
-
配置与资源初始化阶段 加载并校验主配置文件和 fbregistry 固件,分配采样、I/O、跨核通信等共享内存资源,完成 FPGA PCIe 资源配置,并将执行图、常量表和相关参数发布到实时核可访问的内存区域。该阶段是从“通信可达”进入“业务可运行”的关键过渡阶段。
-
运行使能阶段 根据配置文件设置实时核的执行模式、采样率、执行图和运行时参数,并下发核心启动命令。实时核进入 RUNNING 状态后,hcploader 使能 FPGA 采样,使实时采样数据开始进入共享内存数据流,核心计算链路正式开始工作。
-
服务驻留阶段 启动 RPC、SOE、SIL UDP、虚拟串口代理和调试协议服务器等外围服务。核心计算链路和外围服务均完成初始化后,hcploader 切换 LED 至运行状态,并进入事件驱动的稳态驻留阶段。
整体启动流程如图 3-1 所示。
图 3-1 hcploader 启动流程总览
图中横向表示启动阶段,纵向表示职责域。主链路表示 hcploader 启动过程中的关键依赖关系,虚线表示跨职责域的初始化依赖。例如,实时核固件启动后,需要通过 RPMsg 建立命令通道;执行图和参数发布前,需要先完成共享内存和 FPGA 资源初始化;FPGA 采样使能必须位于实时核启动之后,以避免采样数据在核心尚未进入运行态时提前进入实时数据流。
对于实时核启动、RPMsg 通信、配置加载、固件校验、共享内存分配、FPGA 配置、核心启动和关键服务启动等关键环节,任一失败均会触发故障处理流程:点亮告警 LED,执行已初始化资源的逆序清理,并受控退出。对于部分非关键外围服务,系统可在记录告警后进入降级运行状态,以保留核心计算链路的基本运行能力。
本节仅描述 hcploader 的主启动链路和阶段划分。后续章节将按照启动顺序,分别介绍基础运行环境初始化、实时核与核间通信建立、配置与资源初始化、运行使能以及外围服务启动等内容。对于命令行参数解析、CRC 校验、RPMsg 驱动重绑定、共享内存结构、FPGA 配置、执行图发布、参数下发和外围服务启动等关键实现细节,也将在对应章节中进一步说明。