【AUTOSAR入门】第一天:AUTOSAR AP 基础与架构

学习目标

  1. 建立 AUTOSAR AP 的知识框架,理解其与 CP 的本质差异及核心价值。
  2. 掌握 AP 的逻辑架构组成,明确功能集群的角色与协同关系。
  3. 完成 RTA-VRTE Starter Kit 工具链部署,实现首个 AP 应用的配置与运行。

上午:理论核心

1. AUTOSAR AP 概述

1.1 为什么需要 AUTOSAR AP?

汽车电子的发展已从 “机械控制” 转向 “软件定义”,传统 ECU 架构面临三大核心挑战:

  • 计算能力瓶颈:ADAS / 自动驾驶需实时处理 TB 级传感器数据(如激光雷达点云、摄像头图像),传统 8 位 / 16 位 MCU 无法满足高性能计算(HPC)需求。
  • 软件灵活性不足:经典平台(CP)的静态配置无法支持 OTA 增量更新(如新增自动驾驶功能需重新刷写 ECU),难以应对用户对功能迭代的需求。
  • 跨域协同困难:车辆控制(动力、底盘)、智能驾驶(感知、决策)、智能座舱(人机交互)需高频数据交互,传统信号级通信(如 CAN)带宽不足(CAN FD 最高 8Mbps,难以支持多传感器融合数据传输)。

AUTOSAR AP(Adaptive Platform)正是为解决这些问题而生,其设计目标可概括为:支持高性能计算、动态软件架构、跨域服务协同

1.2 AP 与 CP 的核心差异(深度对比)
对比维度AUTOSAR CP(经典平台)AUTOSAR AP(自适应平台)
实时性硬实时(Hard Real-Time):响应时间≤1ms,需严格满足 deadlines(如发动机喷油控制),错过 deadlines 可能导致安全事故。软实时(Soft Real-Time):响应时间≤100ms,偶尔错过 deadlines 不影响核心功能(如自动驾驶路径规划延迟 10ms 不影响安全)。
资源模型资源受限:8 位 / 16 位 MCU,RAM≤1MB,Flash≤16MB,需静态分配资源(任务、内存、通信)以避免浪费。资源充裕:64 位多核 CPU(如 NVIDIA Xavier、Intel Atom),RAM≥8GB,Flash≥64GB,支持动态内存分配与任务调度。
软件架构信号级通信(Signal-Based):基于 CAN/LIN 总线的信号交互(如 “车速信号”“油门开度信号”),适合简单控制逻辑。服务级通信(Service-Oriented Architecture, SOA):基于以太网的服务调用(如 “获取摄像头图像服务”“路径规划服务”),支持复杂功能模块化。
安全等级高安全要求:需满足 ASIL-D(如制动系统 ECU),依赖静态冗余设计(如双 MCU 锁步核)。中等安全要求:支持 ASIL-B/D(通过安全分解),如自动驾驶决策 ECU(ASIL-B)与执行器 ECU(ASIL-D)协同,平衡性能与安全。
典型应用场景功能性 ECU:发动机控制、ESP(电子稳定程序)、车身控制(BCM)等直接关联传感器 / 执行器的核心控制单元。高性能 ECU:自动驾驶域控制器(ADU)、智能座舱域控制器(ICCU)、车联网网关(T-BOX)等需高算力与动态更新的单元。

案例:某车企自动驾驶系统中,CP 负责控制制动执行器(硬实时、ASIL-D),AP 负责处理激光雷达数据并生成制动指令(软实时、ASIL-B),两者通过 SOME/IP 协议协同,既保证安全又满足算力需求。

1.3 计划动态性(Planned Dynamics)

AP 的 “动态性” 并非完全无约束,而是通过 “计划动态性” 平衡灵活性与可靠性,核心机制包括:

  • 动态行为预定义:所有可能的动态操作(如服务启动 / 停止、任务调度切换)需在设计阶段定义规则(如 “仅允许在车辆熄火时更新自动驾驶算法”)。
  • 资源边界限制:为每个应用分配最大 CPU / 内存配额(如 “导航服务最多占用 20% CPU”),避免资源争抢导致的性能波动。
  • 静态基础配置:核心功能集群(如通信管理、安全监控)的基础参数(如 IP 地址、端口号)需静态配置,确保系统稳定性。

应用场景:OTA 更新时,AP 先验证新服务的资源需求是否在预定义范围内,若超出则拒绝更新,避免因内存不足导致系统崩溃。

2. AP 逻辑架构深度解析

2.1 架构设计原则

AP 的逻辑架构遵循 “功能聚合” 而非 “模块拆分”,核心原则包括:

  • 功能集群化:将关联功能整合为 “功能集群”(Functional Cluster),而非单一模块(如 “执行管理” 包含任务调度、进程隔离、资源监控等功能),便于跨模块优化。
  • 接口标准化:仅标准化 “平台与应用的接口”(确保应用可移植),不限制 “功能集群间的内部接口”(允许供应商自主优化,如通信管理与安全管理的交互可自定义)。
  • 分层解耦:通过 “自适应基础” 与 “自适应服务” 两层架构,分离核心功能(如通信、执行)与扩展功能(如诊断、日志),支持按需扩展。
2.2 架构组成(AUTOSAR R19-11 版本)

AP 逻辑架构分为自适应基础(Adaptive Foundation)自适应服务(Adaptive Services),两者均由 “功能集群(Functional Cluster)” 组成(见图 2.2)。

2.2.1 自适应基础(Adaptive Foundation)

包含支持系统运行的核心功能集群,是所有 AP 应用的必备组件:

功能集群核心职责关键技术点
执行管理(Execution Management, EM)管理应用的生命周期(启动 / 停止 / 重启)、任务调度与进程隔离。- 基于 POSIX 线程(pthread)的任务创建与优先级调度(支持 SCHED_FIFO 实时调度策略)。
- 进程隔离:通过 MMU(内存管理单元)实现应用间地址空间隔离,防止越界访问。
通信管理(Communication Management, CM)实现服务的发现、调用与数据传输,支持跨 ECU / 跨域通信。- 服务发现:基于 SOME/IP-SD(Service Discovery)协议,客户端动态查找服务地址。
- 通信协议:SOME/IP(请求 - 响应)、DDS(发布 - 订阅),支持 TCP/UDP 传输。
安全管理(Security Management)保护系统免受恶意攻击,支持身份认证与数据加密。- 安全启动:通过数字签名验证应用镜像完整性,防止恶意软件注入。
- 通信加密:基于 TLS1.3 协议加密 SOME/IP 数据,防止报文被篡改。
状态管理(State Management)监控系统全局状态(如 ECU 健康度、网络连接状态),触发故障处理流程。- 状态机模型:定义 “正常运行→降级运行→故障停机” 的状态切换规则(如 CPU 负载超 90% 时触发降级)。
- 故障码管理:遵循 UDS(ISO 14229)标准,记录系统异常信息。

案例:当自动驾驶服务因传感器故障崩溃时,执行管理(EM)会根据状态管理(State Management)的规则,重启服务并临时降低算力需求(如关闭激光雷达,仅用摄像头数据),确保车辆可控。

2.2.2 自适应服务(Adaptive Services)

提供面向应用的高阶功能,按需集成(非必选),典型功能集群包括:

功能集群核心职责应用场景
诊断服务(Diagnostics)支持 UDSonIP(基于 IP 的诊断协议),实现远程故障诊断与 OTA 更新。4S 店通过云端调用诊断服务,读取自动驾驶域控制器的传感器故障日志。
日志与追踪(Logging & Tracing)记录应用运行日志(如服务调用耗时、错误码),支持离线分析与实时监控。开发人员通过追踪日志定位 “路径规划服务响应延迟” 问题(发现是激光雷达数据解析耗时过长)。
时间同步(Time Synchronization)基于 IEEE 802.1AS(TSN)实现跨 ECU 时间同步(精度≤1μs),确保传感器数据时间对齐。自动驾驶系统中,摄像头、激光雷达、毫米波雷达的采样时间需同步,否则融合数据会失真。
2.3 功能集群的协同关系

AP 的功能集群并非孤立工作,而是通过 “事件触发” 与 “数据交互” 形成闭环:

  1. 服务调用流程:应用 A 调用 “摄像头图像服务” 时,先通过通信管理(CM)的服务发现功能找到服务地址,再通过执行管理(EM)分配 CPU 资源,最后由安全管理(Security Management)验证调用权限。
  2. 故障处理流程:当通信管理(CM)检测到网络中断时,会向状态管理(State Management)发送事件,状态管理触发 “降级模式”,执行管理(EM)暂停非核心服务(如娱乐服务),优先保障自动驾驶通信。

3. AP 逻辑架构与 CP 的对比

3.1 架构设计理念差异
  • CP:采用 “分层架构”,从下到上为硬件抽象层(MCAL)、基础软件层(BSW)、运行时环境(RTE)、应用层(SWC),每层接口严格定义(如 MCAL 的 SPI 驱动接口),确保不同供应商的模块可兼容(如 Vector 的 BSW 可搭配 EB 的 RTE)。
  • AP:采用 “功能集群架构”,不强制定义集群间接口(如执行管理与通信管理的交互方式由供应商自主设计),允许供应商通过内部优化提升性能(如某厂商将服务发现功能集成到通信管理中,减少模块间调用耗时)。
3.2 灵活性与约束的平衡
  • CP 的静态性:所有配置(任务调度表、信号路由)需在编译阶段确定,运行时不可修改(如 CAN 信号的波特率固定为 500kbps),优势是资源占用低(适合 8 位 MCU),劣势是无法应对动态需求(如新增传感器需重新配置 RTE)。
  • AP 的动态性:支持运行时修改配置(如服务端口号、任务优先级),但需通过 “计划动态性” 约束(如仅允许在车辆静止时修改),优势是灵活性高(适合 OTA 更新),劣势是资源开销大(需 64 位 CPU 支持)。

案例:某车型的 CP 控制单元(如 ESP)需在出厂前完成所有配置,若后期想新增 “雨天制动防滑” 功能,需召回车辆重新刷写;而 AP 控制单元(如 ADU)可通过 OTA 远程新增 “雨天模式” 服务,无需召回。

下午:工具链入门

1. RTA-VRTE Starter Kit 部署

RTA-VRTE Starter Kit 是 Vector 公司推出的 AP 开发工具链,包含虚拟机环境、配置工具(ISOLAR-VRTE)、编译工具链,可快速搭建 AP 开发环境。

1.1 硬件与软件准备
  • 硬件要求

    • CPU:Intel i7 及以上(支持虚拟化技术 VT-x),4 核 8 线程以上(虚拟机需分配 2 核)。
    • 内存:16GB 及以上(主系统 8GB + 虚拟机 8GB)。
    • 硬盘:500GB SSD(虚拟机镜像约 100GB,预留编译空间)。
    • 网络:稳定的互联网连接(下载工具链与依赖包)。
  • 软件要求

    • 操作系统:Windows 10/11 专业版(支持 Hyper-V 或 VMware)。
    • 虚拟化软件:VMware Workstation Pro 16+(推荐,兼容性更好)或 Hyper-V。
    • 工具链版本:RTA-VRTE Starter Kit V3.9.0(包含 ISOLAR-VRTE 9.0、QNX 7.1、Linux Ubuntu 18.04)。
1.2 部署步骤(VMware 为例)
  1. 下载工具链:从 Vector 官网获取 RTA-VRTE Starter Kit 安装包(约 20GB),包含两个虚拟机镜像:

    • Primary_Host_VM.vmdk(主虚拟机,含配置工具与编译环境)。
    • Secondary_Host_VM.vmdk(从虚拟机,用于分布式部署测试)。
  2. 导入虚拟机

    • 打开 VMware,点击 “文件→打开”,选择Primary_Host_VM.vmx,导入主虚拟机。
    • 重复操作导入从虚拟机,修改虚拟机名称为 “AP_Primary” 和 “AP_Secondary”。
  3. 配置虚拟机资源

    • 右键 “AP_Primary→设置”,分配 2 核 CPU、8GB 内存、100GB 硬盘空间。
    • 网络适配器选择 “桥接模式”(确保主 / 从虚拟机与主机在同一网段)。
  4. 启动虚拟机

    • 启动 “AP_Primary”,用户名 / 密码为 “autosar/ap1234”(默认)。
    • 登录后,验证是否安装成功:打开终端,输入rtavrte --version,若显示 “V3.9.0” 则成功。
1.3 常见问题与解决
  • 虚拟机启动失败:检查是否开启 CPU 虚拟化(进入 BIOS 开启 VT-x),或关闭主机的 Hyper-V(与 VMware 冲突)。
  • 网络连接失败:桥接模式下,若虚拟机无法联网,可改为 “NAT 模式”,通过主机共享网络。

4. ISOLAR-VRTE 基础操作

ISOLAR-VRTE 是 AP 的配置工具,用于定义服务接口、配置功能集群参数、生成应用代码,核心功能包括 ARXML 编辑、代码生成、部署管理。

4.1 界面组成

ISOLAR-VRTE 的界面分为 4 个区域:

  • 项目浏览器:左侧面板,显示项目文件(如 ARXML、代码文件)。
  • 编辑区:中间面板,用于编辑 ARXML 文件(服务接口定义)。
  • 属性窗口:右侧面板,显示选中元素的属性(如服务端口号、数据类型)。
  • 输出窗口:底部面板,显示代码生成日志与错误信息。
4.2 创建第一个服务接口(ARXML)

服务接口是 AP 应用通信的基础,通过 ARXML(AUTOSAR XML)文件定义,步骤如下:

  1. 创建项目

    • 点击 “File→New→AUTOSAR Project”,命名为 “FirstAPProject”,选择存储路径(如/home/autosar/projects)。
    • 选择 AUTOSAR 版本为 “R19-11”(主流版本),点击 “Finish”。
  2. 定义数据类型

    • 在项目浏览器中右键 “Data Types→New→Primitive Data Type”,命名为 “UInt32”,属性窗口中设置 “Base Type” 为 “uint32”(32 位无符号整数)。
    • 同理创建 “Float32”(浮点型),用于表示传感器数据(如温度、湿度)。
  3. 定义服务接口

    • 右键 “Service Interfaces→New→Service Interface”,命名为 “TemperatureService”。
    • 右键 “TemperatureService→New→Operation”,命名为 “GetTemperature”(获取温度的服务方法)。
    • 在属性窗口中,设置 “Return Type” 为 “Float32”(返回温度值),“Parameters” 为空(无输入参数)。
  4. 保存 ARXML:点击 “Save”,生成TemperatureService.arxml文件,该文件定义了一个 “获取温度” 的服务接口,后续应用可通过调用该接口获取数据。

4.3 配置简单服务调用
  1. 创建客户端与服务器应用

    • 右键 “Applications→New→Application”,创建 “TemperatureServer”(服务器应用,提供温度服务)和 “TemperatureClient”(客户端应用,调用服务)。
    • 为 “TemperatureServer” 添加 “Provided Interface”(提供的服务),关联 “TemperatureService”。
    • 为 “TemperatureClient” 添加 “Required Interface”(需要的服务),关联 “TemperatureService”。
  2. 配置通信参数

    • 右键 “Communication→New→SOME/IP Configuration”,设置 “Protocol” 为 “UDP”,“Port” 为 “5000”(服务端口)。
    • 关联服务器应用与端口:将 “TemperatureServer” 的服务绑定到 5000 端口。
  3. 生成代码

    • 点击 “Build→Generate Code”,ISOLAR-VRTE 会根据 ARXML 生成 C++ 代码(如服务接口的头文件TemperatureService.h)。
    • 输出窗口显示 “Code generation successful” 则成功,代码存储在/home/autosar/projects/FirstAPProject/generated目录。
4.4 验证 RTE 通信

RTE(运行时环境)是 AP 应用与平台交互的桥梁,需验证服务调用是否正常:

  1. 在终端中进入项目目录,执行编译脚本:

    bash

  • cd /home/autosar/projects/FirstAPProject  
    ./build.sh  # 脚本会调用G++编译生成可执行文件  
    
  • 启动服务器应用:

    bash

  • ./bin/TemperatureServer  # 显示“Server started on port 5000”  
    
  • 新打开一个终端,启动客户端应用:

    bash

  1. ./bin/TemperatureClient  # 显示“Received temperature: 25.5°C”(模拟数据)  
    

    若客户端成功获取数据,说明 RTE 通信正常,服务接口配置正确。

下午实操练习:部署与验证

练习目标

在 RTA-VRTE Starter Kit 的虚拟 Target ECU 中部署 “温度服务” 应用,验证跨 ECU 通信。

练习步骤

  1. 配置 Target ECU

    • 打开 “AP_Primary” 虚拟机,启动 QNX 系统(开始菜单→QNX→Launch QNX Target)。
    • 虚拟 Target ECU 的 IP 地址为 “192.168.1.100”(默认),通过ping 192.168.1.100验证主机与 Target ECU 的连通性。
  2. 部署服务器应用到 Target ECU

    • 在 ISOLAR-VRTE 中,右键项目→“Deploy→Deploy to Target”,输入 Target ECU 的 IP(192.168.1.100)、用户名(root)、密码(qnx)。
    • 选择部署 “TemperatureServer”,点击 “OK”,输出窗口显示 “Deployment successful”。
  3. 在 Target ECU 上启动服务器

    • 通过 SSH 登录 Target ECU:ssh root@192.168.1.100,密码 “qnx”。
    • 执行/home/root/TemperatureServer,启动服务。
  4. 在主机上启动客户端

    • 主机终端中执行./bin/TemperatureClient 192.168.1.100(指定服务器 IP),若显示 “Received temperature: 25.5°C”,则跨 ECU 通信成功。

总结与答疑

核心知识点回顾

  1. AP 的核心价值:支持高性能计算、动态软件架构、跨域服务协同,填补 CP 与信息娱乐系统的空白。
  2. 逻辑架构:由自适应基础(执行管理、通信管理等)与自适应服务(诊断、日志等)组成,功能集群通过事件与数据协同。
  3. 工具链实操:通过 ISOLAR-VRTE 定义服务接口,在 RTA-VRTE 的虚拟环境中实现服务调用,验证 AP 的通信机制。

常见问题解答

  1. Q:AP 是否会替代 CP?
    A:不会。AP 与 CP 是互补关系:CP 负责低资源、高安全的核心控制(如制动、转向),AP 负责高算力、动态更新的智能功能(如自动驾驶、座舱交互),两者通过 SOME/IP 协议协同。

  2. Q:ARXML 文件的作用是什么?
    A:ARXML 是 AUTOSAR 的标准配置文件,用于描述服务接口、功能集群参数、应用部署信息等,是工具链(如 ISOLAR-VRTE)生成代码的依据,确保不同厂商的 AP 平台可兼容。

  3. Q:虚拟 Target ECU 与真实硬件有何区别?
    A:虚拟 Target ECU(如 QNX 虚拟机)用于前期开发与测试,可模拟多核 CPU、网络环境,但无法完全替代真实硬件(如真实 ECU 的温度、电磁干扰特性),后期需在真实域控制器上验证性能。

课后作业

  1. 对比 AP 与 CP 在 “OTA 更新” 场景下的实现差异,写出不少于 300 字的分析。
  2. 使用 ISOLAR-VRTE 创建一个 “湿度服务” 接口(返回湿度值),并完成客户端与服务器的代码生成及部署。
这里的NM主要是针对Can协议的网路管理。 AUTOSAR CanNM的核心思想主要归纳为以下两条: 1.  如果节点需要保持通信,则节点需要周期的发送NMPDUs,否则停止发送NMPDUs 2.     如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。   工作模式和状态   CanNm一共有三个工作模式 1.  Network Mode 2.  PrepareBus-Sleep Mode 3.  Bus-Sleep Mode 模式的改变应该通过回调函数通知上层。 下面单独说每种模式   (1)Network Mode Network Mode又包括三个内部状态 1. Repeat Message State 2. Normal Operation State 3. Ready Sleep State ①Repeat Message State 这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点发现。这个状态可以用来检测总线上的节点。 当进入Repeat Message State时,节点应该开始传送NMPDUs。 在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。 当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。   ②Normal Operation State 这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该发送NMPDUs。 在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。   ③ReadySleep State 这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。 如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。 如果该节点需要使用总线,则节点进入Nomal Operation State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。 (2)PrepareBus-Sleep Mode   这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为发送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。 当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。 在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。   (3)Bus-SleepMode   Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。 当进入Bus-Sleep Mode时候,应该通知上层应用。 在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。 如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。 ———————————————— 版权声明:本文为CSDN博主「cococenstar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cococenstar/article/details/84096689
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值