谈到智能驾驶系统,用户感知最为明显、讨论最多的是具体的功能和体验,以及不同方案的配置,但难以被直接感知的基础软件,其实保障着智能驾驶功能安全运行,在系统中至关重要,不可或缺。
完整的智能驾驶系统包括硬件和软件,而基础软件通常指的是底软和中间件。底软包括操作系统和驱动,是硬件和软件之间的桥梁,它向下提供与硬件交互的基本操作和服务,同时为上层软件提供所需的运行环境。在智驾产品中,常用的操作系统有QNX、Linux、AUTOSAR等。中间件在底软与应用软件之间起到“承上启下”的关键作用,它们为上层功能软件提供了必要的内存管理、任务调度等基础能力,以及通信、参数、日志、持久化存储、执行等通用服务,属于连接不同应用软件的支撑类软件,是功能应用开发、运行、管理的核心支撑,是实现智驾功能的关键环节。
底软和中间件,在智能驾驶系统中相当于人体的神经网络、循环系统,不仅能够在感知、预测、决策规划和控制等业务流水线模块间进行通信和资源的调度,而且能够及时处理系统内部产生的运行错误,抵御来自系统外部的风险,确保智能驾驶功能的安全可用。它们无法被显性感知到,但却是系统中不可替代的隐形守护者。
智能驾驶系统基础软件面临的安全挑战
要做好“隐形守护者”,底软和中间件必须首先保证自身满足极高的安全性和可靠性要求,面对诸多挑战,比如:
-
智能驾驶系统中的业务流水线(感知→决策规划→控制)依赖于底软的调度能力和中间件的通信能力,如果调度和通信出现延时、抖动,会导致系统无法在指定时间内根据外部环境变化做出相应的控制,带来安全隐患;
-
如果底软或中间件存在内部故障但未检测出来,系统“带病运行”将故障传递到系统的各个功能组件上,会带来不可预知的严重问题;
-
底软或中间件受到外部入侵被挟持控制,如果没有强有力的安全防护机制,可能造成车辆不可控的后果。
因此,底软和中间件需要安全机制来应对各种情况,才能保障智能驾驶系统正常运行。这需要遵循严格的设计原则,卓驭认为,底软和中间件的应用原理和设计原则主要有以下几点:
-
安全隔离:通过硬件和软件的双重隔离技术,将关键任务和非关键任务按照ASIL等级隔离开来,这样,即使非关键任务出现故障,也不会影响到关键任务的正常执行,从而确保系统的整体安全性。常见的硬件技术手段有IOMMU的芯片物理资源隔离、MMU/MPU的内存保护,软件可基于此完成进程间运行环境的隔离,线程堆栈保护等机制。
-
安全加载:智能驾驶系统中所有软件必须经过校验再进行加载,比如通过CRC或者哈希值比对的方式,判断可执行程序是否损坏,避免运行时出现非预期的行为。
-
确定性调度:安全的底软和中间件需要根据业务模块流水线,以及现有的硬件资源(CPU、加速器、DDR带宽等),将各业务处理节点合理的编排到对应的进程/线程内,让各业务流水线有序、稳定的运行。这被称为“确定性调度”能力,常见的技术手段有DAG(Directed Acyclic Graph)有向无环图的配置、线程的绑核/优先级调整。此外也需要设计约束,确保整体系统资源消耗不超过预设值。
-
冗余设计:在关键部件和功能上采用冗余设计,确保在主部件失效时,备用部件能够及时接管,比如通信采用主备通道,持久化存储采用双区冗余备份,固件采用AB分区等。
-
通讯的端到端保护:中间件可支持通信端到端保护,覆盖智能驾驶系统内部各模块间的通信,以及与外部其它系统的通讯。通过CRC校验、通信帧序号、超时重传机制,确保数据在通信链路上准确无误的传递。
-
持久化存储的端到端保护:智能驾驶系统运行时所需的配置文件、参数、网络模型等数据,在从非易失存储设备加载时,中间件会对其进行校验,避免系统使用损坏的数据。
-
高性能组件:中间件可以通过提升各个组件的性能,给整个系统预留尽可能多的资源确保任务的确定性执行,比如通过共享内存进行进程间通信,在驱动中使用DMA/中断聚合等机制提升IO性能,通过优化过的以太网协议栈提升以太网通信性能,通过缓存、数据聚合等机制提升通信和存储性能等等。
-
故障诊断:底软和中间件通过实时监控记录系统运行过程中的关键信息,能够及时发现并记录潜在的安全隐患,并将问题上报给上层应用软件,使系统及时触发安全机制,比如进行功能降级。同时记录的安全日志也便于产品整个生命周期的安全策略调整。
为了满足上述应用原理和设计原则,卓驭一直致力开发高稳定、高安全、高性能的基础软件:从操作系统选型到自研中间件,每个环节都实施了一系列严格的安全机制和设计原则,确保智能驾驶系统运行过程中的每个环节都能达到预期的安全标准,为量产落地保驾护航。相关技术已经应用在大众、上汽通用五菱和奇瑞等卓驭合作客户品牌的多款量产车上。
底软的设计与选型
快速适配多硬件平台、易用的底软
在嵌入式开发中,底软是应用软件与硬件设备之间的桥梁,它们负责管理和控制硬件设备,使得上层应用程序可以通过标准接口与硬件进行交互。底软发挥的主要作用:
-
硬件抽象:驱动程序提供了硬件抽象层,使得上层应用程序和操作系统内核不需要直接与硬件打交道。通过这种抽象,开发者可以编写与硬件无关的代码,提高了软件的可移植性。
-
硬件初始化和配置:驱动程序负责硬件设备的初始化和配置,包括设置寄存器、分配资源、配置中断等。这些操作确保硬件设备能够正常工作并与系统其他部分协调运行。
-
数据传输:驱动程序管理数据在硬件设备和系统内存之间的传输。例如,网络驱动程序负责接收和发送网络数据包,存储驱动程序负责读写磁盘数据。
-
中断处理:驱动程序处理硬件设备产生的中断信号,并执行相应的中断服务程序(ISR)。中断处理是实时系统中非常关键的一部分,确保系统能够及时响应硬件事件。
-
资源管理:驱动程序管理硬件设备的资源,如I/O端口、内存地址、DMA通道等。它们确保这些资源被正确分配和使用,避免资源冲突和浪费。
-
提供接口:驱动程序提供标准化的接口,使得上层应用程序可以通过系统调用或API与硬件设备进行交互。例如,文件系统驱动程序提供文件读写接口,网络驱动程序提供数据发送和接收接口。
-
错误处理:驱动程序负责检测和处理硬件设备的错误情况,并向操作系统报告错误状态。它们还可以执行必要的恢复操作,确保系统的稳定性和可靠性。
-
性能优化:驱动程序可以通过各种技术手段优化硬件设备的性能,例如使用DMA(直接内存访问)进行高速数据传输、使用缓存提高数据访问速度等。
-
设备管理:驱动程序负责设备的注册、注销和状态管理。它们确保设备在系统启动时被正确识别和初始化,并在设备移除时进行清理和资源释放。
-
safety:驱动程序还可以实现对硬件设备的访问控制,确保只有授权的应用程序和用户可以访问特定的硬件资源,从而提高系统的安全性。
卓驭的核心产品「成行平台」凭借优秀的硬件抽象能力,可以快速适配不同的硬件,迅速验证性能和稳定性,及时发现并解决问题。不仅能满足客户的不同硬件需求,加快产品的上市时间,还有助于提高系统的稳定性和可靠性,是保障智驾产品量产落地的基石。
同时,底软的安全机制至关重要。正如人体强大的免疫系统抵御外部病毒和细菌一样,安全的底软以多种安全机制应对不同类型的安全威胁:
-
安全启动:通过校验软件的签名,检测软件是否被恶意篡改。
-
安全升级:通过身份认证、通信加密、软件加密和签名,确保固件不会被恶意更换,同时确保固件的机密性,避免固件被反编译。
-
安全存储:对参数、配置、日志等数据进行加密存储,避免泄露攻击线索。
-
安全诊断:诊断接口往往用于生产运维环节,会进行比较重要的操作,比如修改自动驾驶系统的工厂标定配置,从而影响自动驾驶性能和稳定性。通过身份认证,权限管理,可以确保仅授权人员可进行相关操作。
-
安全通信:通过TLS、SecOC等安全机制,来抵御来自以太网、CAN总线的数据篡改、欺骗、重放等网络攻击。
-
通信防火墙:在数据链路层面防止未授权的访问。
此外,安全底软还需要定期更新和升级,以修复安全漏洞和应对新的安全威胁。
操作系统的选型标准
操作系统管理和协调硬件与软件资源,提供用户界面,使计算平台能够执行各种复杂的任务。智能驾驶系统中的操作系统选型时,需要考虑安全特性和功能、更新、合规、支持和可持续性等多方面的要素,以满足在特定环境和应用的安全需求。
卓驭的平台专家、功能安全专家、网络安全专家根据智能驾驶系统的应用场景和安全需求,经过对多个操作系统进行全面的对比和风险评估,考虑智能驾驶系统是高度可靠性和实时性能的嵌入式系统,最终选择了QNX:因其内核是独立的,因此其它如驱动、应用均具备独立的运行环境,任何一个地方出问题,不会影响其它业务。
中间件设计
构建及时、稳定、正确的通信机制
以卓驭的核心产品「成行平台」为例,其中间件的通信系统实现了各级应用之间的通信功能,包含进程内通信,进程间通信和跨机通信。智能驾驶系统作为嵌入式产品,对实时性的要求非常高,信息延迟可能带来安全隐患。「成行平台」的通信系统通过周期性的发送消息,来避免丢帧和可靠通信双向传输确认导致的延迟和消息数量翻倍的问题。
为了保证消息通信的及时性,卓驭的通信系统采用了零拷贝(Zero-Copy)技术,它最小化了在内核和用户空间之间传输数据时的CPU拷贝操作,给数据处理带来如下好处:
-
提高性能:减少CPU拷贝操作,使得CPU可以用于其他计算任务,从而提高了整体系统性能。
-
降低延迟:数据从一个地方传输到另一个地方的时间减少,因此整体操作的延迟也会降低。
-
减少内存带宽消耗:由于减少了数据在内存中的拷贝次数,内存带宽的消耗也相应减少,这对于内存带宽受限的系统尤其重要。
-
节省内存空间:减少了冗余数据的存储,因此可以节省宝贵的内存空间。
-
减少上下文切换:在传统的数据拷贝操作中,数据需要在用户空间和内核空间之间多次拷贝,这涉及到多次上下文切换。零拷贝技术可以减少这些上下文切换,从而降低开销。
提供高效率、全方位的健康诊断管理系统
嵌入式系统作为一个自闭环的系统,想要从外部了解其内部软件运行的情况并不容易。就像B超、CT等医学影像学检查方法出现之前,人类很难直观了解内脏器官的状态。正因如此,卓驭在系统中设计了一个健康诊断管理模块(PHM),通过收集系统各项性能指标,用于实时和离线识别系统风险、定位系统问题、优化系统负载,PHM在稳定性测试中起到了很大的作用,研发效率明显提升,为智驾系统高稳定性运行提供了很好的保障。
「成行平台」的健康诊断管理系统采用分级级联部署,让数据流往上传递,控制流往下传递:每个区域中心都负责收集下属区域的性能数据,最终节点(master)汇总所有数据并在网页端进行可视化呈现。这种分级级联部署结构具有以下优点:
-
良好的扩展性:系统可以根据需要灵活地扩展,支持接入更多的 Slave 端,以满足不断增长的业务需求。
-
较高的容错能力:Master 端作为总中心,负责收集其本身的性能数据,同时收集各个 Slave 上的所有数据;而 Slave 端负责收集本域内的数据,并往 Master 端传输。即使 Master 端发生故障,Slave 端的数据也可以单独存储并支持在 Slave 端回放,从而保证系统的正常运行。
-
优秀的数据可视化:所有数据都汇总到最终节点(Master),并在网页端进行可视化呈现,使得用户可以直观地了解系统的整体运行状况,方便进行管理和决策。
系统性考量:极致优化和挖掘系统资源
在软件定义汽车的浪潮下,软件越来越复杂,软件开发的分工越来越精细,这带来了更高的开发效率和交付质量,但也带来了嵌入式系统承载多个领域软件工作成果时,资源消耗急剧增加的问题的。要利用有限的资源保证系统功能,就必须从系统整体出发进行监控和优化。
因此,卓驭组建了一支专业的系统优化团队,该团队由硬件、CPU 架构、操作系统和编译系统内核方面的专家组成。这些专家对硬件特性有着深入的了解,并在芯片 CPU、DDR、Cache 等方面总结出了一套芯片优化的最佳实践。通过充分利用主频和多通道技术,成功地提升了 SoC 的性能和 DDR 的带宽。(拓展阅读:《打破高阶智驾的大算力依赖:「成行平台」极致算力优化背后的秘密》)
另一方面,通过健康诊断管理系统,从应用软件的运行情况识别系统风险和瓶颈,并进行精准优化,比如启动优化、pipeline优化、数据流优化等。这些优化措施不仅提高了系统的整体性能,还降低了功耗和成本。通过先进的系统优化思路和工具极致压榨硬件能力,让卓驭的产品持续保持着行业领先地位。
写在最后
完整的智能驾驶系统,是一套复杂严密、架构分明的体系,安全可靠的基础软件是这套体系的底座,也是智能驾驶系统走向量产落地,为用户提供安全、轻松体验的基本前提。
在显性的功能体验层面,智能驾驶系统在软件算法工程师的支持下完成定位、感知、决策规划到车辆控制等一系列动作;而在无法显性感知到的系统运行层面上,则时时考验着研发团队对底软和中间件等基础软件的构建原则和选型标准,以及对各类风险的前置预防和有效管理能力。
正因如此,卓驭高度关注高稳定、高安全、高性能基础软件,为智能驾驶系统打造强大的“隐形守护者”,认真实践“为所有人,提供安全、轻松的出行体验”这一品牌使命。
原文始发于微信公众号(卓驭):隐形守护者——智能驾驶系统中的基础软件