Skip to main content

系统启动与运行时加载流程

控制器硬件上电后,系统首先进入芯片启动流程。通常由片上 BootROM 完成最初级的硬件初始化,并根据启动介质(如 eMMC、SD 卡、SPI Flash 等)加载第一阶段引导程序。随后,引导程序逐步完成 DDR 初始化、设备配置以及 Linux 内核加载,并将控制权交给 Linux 操作系统。Linux 内核启动后,会完成驱动加载、文件系统挂载、用户空间初始化等工作,最终启动系统服务和平台应用程序。

不同芯片平台和 Linux 发行版本的具体启动过程可能存在差异,详细内容可参考对应芯片技术手册、BootLoader 文档以及 Linux 操作系统相关资料。本文不对 Linux 启动过程进行深入展开,而是重点介绍 Linux 系统启动完成之后,HCP 平台主控程序 hcploader 的启动流程及其运行机制。

hcploader 是 HCP 平台在 Linux 用户空间中的主控加载器,负责完成运行环境准备、实时核启动、核间通信建立、共享内存资源初始化、FPGA 配置、执行图分发以及对外服务启动。其启动过程并不是简单的线性函数调用,而是围绕“主进程、实时核、共享内存/FPGA、对外服务”四类职责域逐步建立运行依赖。

从系统启动依赖关系看,hcploader 的启动过程可划分为五个主要阶段:

  1. 基础准备阶段 完成命令行参数解析、信号处理注册、LED 状态初始化以及虚拟串口和日志输出通道建立。该阶段为后续启动过程提供统一的日志输出、异常退出清理和故障状态指示能力。

  2. 通信链路建立阶段 启动远程处理器固件,完成 remoteproc 加载流程,重新绑定 RPMsg 驱动,并建立主处理器与各实时核之间的命令通信通道。同时完成共享内存基础区域的清理和必要通道准备,为后续执行图和运行数据的发布提供基础设施。

  3. 配置与资源初始化阶段 加载并校验主配置文件和 fbregistry 固件,分配采样、I/O、跨核通信等共享内存资源,完成 FPGA PCIe 资源配置,并将执行图、常量表和相关参数发布到实时核可访问的内存区域。该阶段是从“通信可达”进入“业务可运行”的关键过渡阶段。

  4. 运行使能阶段 根据配置文件设置实时核的执行模式、采样率、执行图和运行时参数,并下发核心启动命令。实时核进入 RUNNING 状态后,hcploader 使能 FPGA 采样,使实时采样数据开始进入共享内存数据流,核心计算链路正式开始工作。

  5. 服务驻留阶段 启动 RPC、SOE、SIL UDP、虚拟串口代理和调试协议服务器等外围服务。核心计算链路和外围服务均完成初始化后,hcploader 切换 LED 至运行状态,并进入事件驱动的稳态驻留阶段。

整体启动流程如图 3-1 所示。

图 3-1 hcploader 启动流程总览

图中横向表示启动阶段,纵向表示职责域。主链路表示 hcploader 启动过程中的关键依赖关系,虚线表示跨职责域的初始化依赖。例如,实时核固件启动后,需要通过 RPMsg 建立命令通道;执行图和参数发布前,需要先完成共享内存和 FPGA 资源初始化;FPGA 采样使能必须位于实时核启动之后,以避免采样数据在核心尚未进入运行态时提前进入实时数据流。

对于实时核启动、RPMsg 通信、配置加载、固件校验、共享内存分配、FPGA 配置、核心启动和关键服务启动等关键环节,任一失败均会触发故障处理流程:点亮告警 LED,执行已初始化资源的逆序清理,并受控退出。对于部分非关键外围服务,系统可在记录告警后进入降级运行状态,以保留核心计算链路的基本运行能力。

本节仅描述 hcploader 的主启动链路和阶段划分。后续章节将按照启动顺序,分别介绍基础运行环境初始化、实时核与核间通信建立、配置与资源初始化、运行使能以及外围服务启动等内容。对于命令行参数解析、CRC 校验、RPMsg 驱动重绑定、共享内存结构、FPGA 配置、执行图发布、参数下发和外围服务启动等关键实现细节,也将在对应章节中进一步说明。