1 介绍(Introduction)
本文档是对 AUTOSAR 系统中 BSW 分布的总体介绍。它由两部分组成:一部分聚焦于多核情况下的 BSW 分布,另一部分聚焦于安全情况下的分布。
第 2 章 指导多核系统的 AUTOSAR 兼容软件的开发和配置。自 4.1 版本起,本章仅涉及将 AUTOSAR BSW 模块分配到多核系统的分区以及它们的交互。将 BSW 模块分配到不同 BSW 分区既可增强功能安全,也可提升性能。
概念 "MCAL Multicore Distribution" 的所有概念部分(包括第 2.5 节 MCAL 分布)状态为 "draft"(草案)。
第 3 章 描述安全场景下的 BSW 分布。自 4.2 版本起,AUTOSAR 允许将 BSW 模块映射到不同分区,并保护这些分区之间的相互干扰。
第 4 章 展望了 BSW 分布领域可能的未来扩展。
2 多核系统中的 BSW 分布(BSW Distribution in Multi-Core Systems)
2.1 概述(Overview)
本章描述 BSW 模块在多个分区和核上分布式执行的支持场景,以及 BSW 分布可提升性能的若干用例。同时介绍适用于分布式 BSW 执行的基本同步概念和分区间通信简介。
2.1.1 支持的场景(Supported Scenarios)
可将 BSW 模块的功能集群(用于应用访问总线、非易失性存储器、I/O 通道和看门狗)分配到不同 BSW 分区。BSW 模块的集群目前未标准化。除 MCAL 外,不同分区中同一类型功能集群的并行使用("复制")通常不被支持,但通过主/卫星方法可以实现。功能集群到分区的分配方式如下:
- 一个 BSW 功能集群仅在一个分区中可用;
- 一个 BSW 功能集群在所有分区中均可用,包含全部接口;
- 一个 BSW 功能集群分布在多个分区中(可能每个分区包含功能子集),以实现高并发度。
在以上所有场景中,以下限制适用:
- 当前每个核最多有一个 QM BSW 分区。
AUTOSAR 支持上述场景,并涵盖以下关键特性:
- BSW 分区之间的所有通信代码可自动生成,以适应不同的系统配置。跨分区通信机制可侧重于效率生成,或在后续版本中提供"抗干扰自由度"。
- 若需要访问系统服务(不属于任何 BSW 功能集群),应将相应接口提供给每个需要该系统服务的 BSW 分区。
- 支持每个 BSW 分区对硬件抽象和驱动的高效访问。
在所有场景中,不同模块实体之间的通信保持不变(与单分区中运行的 BSW 相比)。
2.1.2 性能用例与硬件分配到不同核(Performance Use Cases and Hardware Assigned to Different Cores)
以下用例展示了如何通过将 BSW 分配到多个分区和核来提升系统性能,以及多核系统中访问外设硬件的场景如何受益于 BSW 多分区/多核分配:
- 提升系统性能、降低资源消耗:可能需要将 BSW 功能集群分配到不同核,例如通信模块在 BSW 分区 "A" 上、I/O 模块在 BSW 分区 "B" 上(取决于硬件架构、负载均衡和 SW-C 的分布)。特别地,若多核系统中硬件资源被某个核独占访问,则将相应的 BSW 用户、服务和驱动放在该核上可提升性能。
- 信号网关:将一个 FlexRay 集群放在一个核上,CAN 集群放在另一个核上。这两个 COM 模块必须同步,且两个 COM 实例之间必须有直接的跨核通信。其中一个 COM 模块可以是主 COM,负责协调另一个核上的卫星 COM。
- 两个通信集群在不同核上:一个访问 CAN 总线,另一个控制 FlexRay 总线。若应用 SW 位于其中一个通信集群所在核上,需要在两个总线上发送,则本地 COM 模块可直接与另一核上的对应模块通信,从而高效地通过 CAN 或 FlexRay 发送信号。对于接收消息,COM 不知道 RTE 上层的接收方,因此 COM 必须将信号转发到 RTE,由 RTE 负责通信。
2.1.3 技术概述(Technical Overview)
以下是对后续章节中技术解决方案的简要总结:
- 定义包含优选栈全部三层(或栈的子集,如通信、内存、I/O 栈)的 BSW 模块集群。
- 模块实体可分为主(master)和卫星(satellite),分别分配到不同 BSW 分区。主和卫星可使用非标准化的 AUTOSAR 接口进行内部跨分区通信。主/卫星方法主要用于分布式系统服务模块以及相同类型的 BSW 集群之间的通信。
该方案满足性能和安全性要求,同时最小化对已标准化 BSW 模块接口的影响(RS_BRF_00206、RS_BRF_01160)。大多数更改都隐藏在模块内部(例如通过提供主/卫星实现),而不会影响其他模块。不同模块之间的接口保持不变。
2.1.3.1 BSW 功能集群(BSW Functional Clusters)
BSW 功能集群是功能上相关的 BSW 模块的分组。每个功能集群包含一组 BSW 模块。可以有多个相同类型的 BSW 功能集群(例如在不同 BSW 分区中有多个 I/O 集群),每个集群使用不同的模块集(例如一个分区中是 IOHWA + ADC,另一个分区中是 IOHWA + ADC + DIO)。
以下类型的集群可能在后续版本中标准化:
- 通信集群(Communication cluster)
- 内存集群(Memory cluster)
- I/O 集群(I/O cluster)
- 看门狗集群(Watchdog cluster)
BSW 功能集群到 BSW 分区的分配由应用软件对 BSW 模块的使用决定。功能集群可分配到不同 BSW 分区,相同类型的功能集群可在多个 BSW 分区中可用。不同功能集群可分配到相同或不同的 BSW 分区。
同一功能集群在每个 BSW 分区中最多只能存在一份。
BSW 功能集群由应用或其他 BSW 模块使用,用于访问总线、内存、I/O 通道和看门狗,通常只需要在一个或少数几个 BSW 分区中存在。
BSW 功能集群的引入不改变现有 BSW 与 RTE 之间的 AUTOSAR 接口。
2.2 BSW 模块的并行执行(Parallel Execution of BSW modules)
2.2.1 与核相关的分支(Core-Dependent Branching)
核相关分支是在代码中根据当前执行核选择不同实现路径的方法。这是支持多核系统的最简单方式,但会引入核依赖性,不建议广泛使用。
2.2.2 主/卫星方法(Master/Satellite-approach)
主/卫星方法将一个 BSW 模块的实体(entity)拆分为一个主实体和多个卫星实体。
- 主(Master):包含模块的完整功能实现;
- 卫星(Satellite):是模块的轻量代理,调用主实体的服务。
主实体通过 OS 的IOC(Inter-OS-Application Communication)机制接收来自卫星的请求。这允许在多个核上同时存在模块接口,但实际功能仅在一处实现。
2.2.3 使用 BSW 调度器进行分区间通信(Using the BSW Scheduler for Inter-Partition-Communication)
BSW 调度器(BSW Scheduler)负责管理跨分区的 BSW 通信。它生成必要的代码以处理分区间的请求/响应。
2.2.4 使用共享缓冲区(无内存保护的系统)(Using Shared Buffers (in systems without memory protection))
在没有内存保护的系统中,分区间可通过共享缓冲区直接传递数据指针。但需要额外的同步机制保护共享数据的访问。
2.2.5 访问硬件/驱动(Accessing Hardware/Drivers)
硬件访问通常绑定到特定核。BSW 模块应仅从其所在核访问硬件,跨核硬件访问需要 IOC 等机制转发。
2.2.6 模块的并发安全实现(Concurrency safe implementation of modules)
可重入性(re-entrancy)是 BSW 模块在多核系统中的关键属性。模块的可重入实现需要:
- 无共享的可写静态数据;
- 所有访问通过参数传递;
- 临界区使用 OS 服务(如
GetResource/ReleaseResource)。
2.3 并行 BSW 执行的 SchM 接口(SchM Interfaces for Parallel BSW execution)
BSW 调度器(SchM)为并行执行的 BSW 模块提供关键区(critical sections)管理 API。SchM 接口在多核系统中通过 OS 的 RESOURCE 机制实现。
2.4 分区系统中基础软件的配置(Configuration of Basic Software in Partitioned Systems)
2.4.1 任务映射(Task Mapping)
任务到分区的映射决定 BSW 模块的执行位置。映射规则包括:
- 主模块的 TASK 应映射到主模块所在的核;
- 卫星模块的 TASK 应映射到卫星所在核;
- RTE 事件到任务的映射需要考虑核间通信开销。
2.4.2 主和卫星的通用配置(General Configuration of Master and Satellites)
主/卫星方法需要在 BSW 模块描述中明确声明主实体和卫星实体,并配置它们之间的通信通道(IOC)。
2.4.3 配置 BswM(按分区)(Configuring the BswM (per Partition))
BswM(基础软件模式管理器)在每个分区中实例化,处理该分区内的模式切换和动作列表。
2.4.4 配置 EcuM(按核)(Configuring the EcuM (per Core))
EcuM(ECU 状态管理器)仅在主核上实例化,负责整个 ECU 的启动、睡眠和关闭。其他核的 EcuM 状态由主核通过模式切换分发。
2.5 MCAL 分布(MCAL Distribution)
2.5.1 介绍(Introduction)
MCAL 驱动是最底层与硬件交互的软件。在多核系统中,MCAL 驱动的分布需要特殊考虑。本节描述 MCAL 多核分布的概念。(状态:草案)
2.5.2 使用假设(Assumptions of Use)
假设条件:
- 硬件资源在多个核之间是可共享的;
- 对同一硬件资源的并发访问需要同步;
- 某些硬件资源必须由特定核独占访问(例如 ETPU、特定的 DMA 通道)。
2.5.3 约束(Constraints)
约束包括:
- 每个硬件资源应仅由一个 MCAL 实例拥有;
- 其他核需要访问时,必须通过主/卫星或 IOC 机制;
- 共享资源(如通用 I/O 引脚)需要互斥访问保护。
2.5.4 MCAL 用户定义(Definition of MCAL Users)
MCAL 用户是指调用 MCAL API 的模块,包括:
- ECU 抽象层模块(如
Port、Dio、Adc); - 复杂驱动(CDD);
- 其他 BSW 模块(如 OS)。
2.5.5 多核能力分类标准(Multi-Core Capabilities Classification Criteria)
MCAL 模块的多核能力按以下标准分类:
- 可重入性:模块 API 是否可被多个核并发调用;
- 硬件亲和性:模块必须运行在特定核上;
- 状态管理:模块是否包含跨核共享状态。
2.5.6 MCAL 多核类型定义(Definition of MCAL Multi-Core Types)
基于上述标准,AUTOSAR 定义以下 MCAL 多核类型:
| 类型 | 说明 |
|---|---|
| Type 1(强绑定) | 模块的所有 API 必须从单一核调用,不能跨核调用 |
| Type 2(弱绑定) | 模块可由多个核调用,但需内部同步 |
| Type 3(可重入) | 模块完全可重入,多个核可同时调用 |
| Type 4(无状态) | 模块无状态,可被任何核调用 |
2.5.7 将 MCAL 模块映射到多核类型(Mapping MCAL Modules to Multi-Core Types)
不同的 MCAL 模块根据其硬件特性和 API 设计归入上述类型。例如:
Port:通常为 Type 1,启动时配置一次;Dio:通常为 Type 3,但某些平台需要互斥;Adc:通常为 Type 1 或 Type 2,取决于硬件。
2.5.8 分离策略与元素映射(Seperation Stragies and Mapping of Elements)
分离策略描述如何将 MCAL 元素(通道、引脚、硬件寄存器组等)分配到不同的核。常见策略包括:
- 按硬件单元分:将不同外设分配到不同核;
- 按通道分:将同一外设的不同通道分配到不同核。
2.5.9 分离策略(Separation Strategies)
详细描述各分离策略的优缺点及适用场景。
2.5.10 元素映射(Mapping of Elements)
MCAL 元素(通道、HWR 资源等)的具体映射规则,取决于硬件架构和功能需求。
2.5.11 示例(Examples)
本章给出具体的 MCAL 分布配置示例。
3 安全系统中的 BSW 分布(BSW Distribution in Safety Systems)
3.1 功能安全总览(General overview on safety)
本章描述如何通过 BSW 分布实现功能安全(ASIL)要求。自 AUTOSAR 4.2 起,BSW 模块可映射到不同分区,并通过 OS 的内存保护机制实现分区隔离。
3.2 AUTOSAR 中的安全方案(Safety solutions in AUTOSAR)
3.2.1 始终为 ASIL 的模块(Some modules are always ASIL)
某些模块由于其功能性质,必须实现为 ASIL(例如与安全气囊、刹车、转向相关的驱动)。这些模块必须部署在 ASIL 分区中。
3.2.2 整体配置(Overall configuration)
整体安全配置包括:
- 识别哪些模块为 ASIL;
- 将 ASIL 模块分配到 ASIL 分区;
- 配置分区间的保护机制(内存保护、时间保护);
- 确保 QM 模块不会破坏 ASIL 分区。
3.2.3 跨越分区边界(Crossing partition boundaries)
跨分区边界的调用必须通过受信任的接口。AUTOSAR 通过 IOC 机制或受信任函数(Trusted Function)实现安全分区间的通信。
3.2.4 访问外设/硬件(Access to peripherals / hardware)
外设的访问必须由适当的分区独占。如果多个分区需要访问同一外设,必须通过主/卫星模式协调。
3.2.5 启动、关闭与睡眠/唤醒(Startup, Shutdown and Sleep/Wakeup)
EcuM 协调整个 ECU 的启动、关闭和睡眠。所有分区的启动顺序必须明确定义,以满足安全要求。
3.2.6 错误处理(Error handling)
错误必须通过 DEM(诊断事件管理器)上报。ASIL 分区的错误处理必须符合 ASIL 等级要求。
3.2.7 时间保护(Timing protection)
OS 的时间保护机制可检测任务执行时间超出预期、死锁等情况,对 ASIL 应用至关重要。
3.2.8 结合安全与多核(Combining Safety and Multi-Core)
多核与安全的组合需要仔细规划:每个核可有多个分区,但每个核上 QM 分区最多一个。
3.2.9 性能考量(Performance Considerations)
分区隔离会带来一定的性能开销(IOC、上下文切换)。设计时需平衡安全与性能。
3.2.10 约束(Constraints)
实现安全 BSW 分布时的关键约束:
- ASIL 模块与 QM 模块必须物理隔离;
- ASIL 与 QM 之间只能通过受信任接口通信;
- 关键资源(如非易失存储器)必须有 QM→ASIL 的反馈路径。
4 后续 AUTOSAR 版本展望(Outlook on Upcoming AUTOSAR Versions)
4.1 已知限制(Known limitations)
4.4 版本的 BSW 分布仍有以下限制:
- 每个核最多一个 QM 分区;
- BSW 功能集群未标准化;
- MCAL 多核分布概念仍为草案。
4.2 分布式 BSW 中的模块间调用(Inter BSW module calls in distributed BSW)
后续版本将标准化跨核 BSW 模块调用的接口和机制。
4.3 标准化的 BSW 功能集群(Standardized BSW functional clusters)
后续版本将定义标准的 BSW 功能集群(包括通信、内存、I/O、看门狗等),简化集成。
5 术语表(Glossary)
5.1 缩略语与缩写(Acronyms and abbreviations)
| 缩写 | 英文 | 中文 |
|---|---|---|
| ASIL | Automotive Safety Integrity Level | 汽车安全完整性等级 |
| QM | Quality Management | 质量管理(非安全关键) |
| BSW | Basic Software | 基础软件 |
| MCAL | Microcontroller Abstraction Layer | 微控制器抽象层 |
| IOC | Inter-OS-Application Communication | OS 应用间通信 |
| EcuM | ECU State Manager | ECU 状态管理器 |
| BswM | Basic Software Mode Manager | 基础软件模式管理器 |
| DEM | Diagnostic Event Manager | 诊断事件管理器 |
| CDD | Complex Device Driver | 复杂设备驱动 |
| SW-C | Software Component | 软件组件 |
| RTE | Runtime Environment | 运行时环境 |
| OS | Operating System | 操作系统 |
| RS_BRF | Requirements - Business Requirements Framework | 需求-业务需求框架 |
5.2 技术术语(Technical Terms)
| 术语 | 说明 |
|---|---|
| BSW 分区(BSW Partition) | 一个受 OS 保护的内存和时间域,用于隔离 BSW 模块的执行。 |
| BSW 功能集群(BSW Functional Cluster) | 功能相关的 BSW 模块分组,可作为一个整体分配到某个 BSW 分区。 |
| 主/卫星(Master/Satellite) | 将一个 BSW 模块拆分为一个主实体(完整功能)和多个卫星实体(轻量代理)的模式。 |
| 抗干扰自由度(Freedom of Interference) | 分区之间互不干扰的能力,是安全的关键特性。 |
| 可重入(Re-entrant) | 一个函数可被多个上下文并发安全调用的属性。 |
| 受信任函数(Trusted Function) | 可在非信任上下文中调用、运行在信任上下文的函数。 |
| 时间保护(Timing Protection) | OS 提供的机制,用于检测任务执行时间超出预算等情况。 |
6 参考资料(References)
| 编号 | 引用 |
|---|---|
| [1] | AUTOSAR 基础软件模块清单 |
| [2] | AUTOSAR 分层软件架构(AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf) |
| RS_BRF_00206 | AUTOSAR 应支持 BSW 模块的多核分布 |
| RS_BRF_01160 | AUTOSAR 应支持 BSW 模块在多核 MCU 上的分布 |