汽车开放系统架构组织考虑保持经典AUTOSAR系统来说导入

长期以来,汽车ECU 90%的编程语言都是用C语言编写的(其中大部分涉及MCU控制编程),还有一些是C++语言。例如,大多数主流机器学习框架实际上都依赖于 C++。

在过去的几年里,用尽可能少的代码简化任务催生了大量新的编程语言,然而,特斯拉仍然依赖于最基本的语言:C 和 C++。

“原因是 C 和 C++ 几乎可以在任何类型的系统上运行,尤其是对于安全关键的嵌入式系统,并且可以帮助工程师优化软件。” 这是特斯拉的结论,实际上英伟达也在大量使用 C 和 C++。

但考虑到车载系统的复杂性和越来越多的应用功能的开发,不同语言的结合也是一种趋势。但毫无疑问,核心软件的价值仍然在芯片和域控制器层面。

近日,有消息称AUTOSAR(汽车开放系统架构)组织正在考虑维护经典的AUTOSAR(基于C++14编程语言),并寻求开始为AUTOSAR Adaptive导入Rust编程语言。

根据计划,AUTOSAR 决定从 2022 年 4 月开始在功能安全工作组 (WG-SAF) 内成立一个子小组,制定两个 Rust 相关的指导文件,包括在 AUTOSAR Adaptive 中使用 Rust 的指导文件和相应的编码指南。

这意味着它可能会对处于起步阶段的 AUTOSAR Adaptive 和域控制器电子架构以及软件定义的车辆开发模型产生深远的影响。

一、

众所周知,Rust 是一种多范式、通用的系统编程语言,其目标是提高性能和安全性,尤其是并发安全性。Rust 在语法上与 C++ 相似,但可以在不进行垃圾收集的情况下保证内存安全。除了函数式编程等高级特性外,它还提供了低内存管理机制。

这种语言出现在 2006 年左右,此后在 Firefox 浏览器引擎的开发中进行了一系列改进(通过在 Rust 语言中重新构建组件来提高浏览器的速度),并且在过去十年中也被收购包括亚马逊、Facebook、谷歌、微软等软件巨头的支持,也多次被评为“最受欢迎的编程语言”。

Rust 在语法上类似于 C++,但设计者希望在保持性能的同时提供更好的内存安全性。这是过去几年汽车行业最大的全面风险之一。

数据显示,如今汽车中使用的代码行数超过 1 亿行。未来十年,汽车中使用的平均代码行数将达到 3 亿。随着汽车变得更加互联,黑客将越来越多地瞄准汽车应用。

此前,静态代码分析安全公司 Veracode 发布了一份应用分析报告,发现 C++ 的安全漏洞比 JavaScript 和 Python 等语言严重得多。原因之一是 C++ 不是一种内存安全语言。代码库中经常出现内存漏洞,大量的时间都花在了修补漏洞上。

例如,易受攻击的嵌入式Web服务器是用C++编写的,并通过智能汽车的WiFi网络暴露出来,这样攻击者就可以在访问WiFi网络后攻击Web服务器。

根据 Google Linux 内核安全工程师的说法,C 语言是一种高级汇编程序,但 C 语言也带来了一些安全漏洞和基础设施漏洞。C中有很多开源漏洞是有原因的。C语言与其他语言相比使用时间长,编写的代码量最大。

相比之下,Rust 一开始就试图阻止许多漏洞进入代码。如果存在语法错误或其他内存安全漏洞,则根本无法编译。这是设计上的内存安全编程,确保没有对无效内存的访问(不管软件如何做)。

对于汽车,尤其是智能汽车,多核多线程是主流。这意味着在多个内核上运行的多线程应用程序可能会导致更多问题。以前,工程师可以通过使用静态代码分析器、解析源代码并报告任何潜在的错误来定位错误。

在 AUTOSAR 的 C++14 语言编程指南中,有一句话高级语言程序设计(c语言描述)第2版,“如果本文档的用户使用并行计算、C++ 标准库或开发安全相关的软件,他们有责任将自己的指南应用于这些政策。 “

依靠静态代码分析和人工审查已经是大多数工程师习惯的“常规”解决方案,而在过去的几年里,C++ 已经成为高性能编程的首选语言。

这意味着,如果软件是多线程的并且使用多个内核,工程师就靠自己了,而 Adaptive AUTOSAR 对这些问题没有指导。

图片[1]-汽车开放系统架构组织考虑保持经典AUTOSAR系统来说导入-老王博客

但大多数新的软件系统都是多线程的,运行在多核上,尤其是多核SoC逐渐成为主流平台,而不是传统的MCU(MCU本身也处于多核大算力的趋势,控制系统本身也越来越复杂,融合融合的程度越来越高)。

从这个角度来看,Rust 编译器在编译时执行所有检查,因此没有运行时开销。性能与 C++ 相当。此外,Rust 旨在成为一个零成本的抽象,一旦代码被编译,你可以确信它会工作。

一些汽车行业人士认为,多核系统是未来,Rust 是用于复杂嵌入式软件的优秀编程语言,潜力不可估量。

二、

然而,任何语言都有其天然的缺点。作为适合系统软件开发的语言,Rust 开发者也必须克服一些已知的障碍。

例如,Rust 保证安全的代价是一个很高的学习门槛。对于习惯了脚本语言或者C语言的程序员来说,Rust就不是那么友好了,学习成本也很高。比如Rust目前还没有完整的开发栈可供参考,这也是一个被“吐槽”了很久的地方。

然而,Rust 的独特优势也已被确定。例如,在过去的几年里高级语言程序设计(c语言描述)第2版,全球许多知名的互联网或科技公司都在使用 Rust 来重构他们的技术栈。但是生态不是很丰富,有些地区没有很好的库支持。

在汽车行业,尤其​​是在安全关键领域,Rust 编程语言使安全关键软件开发能够提高安全关键软件的质量,这是对现有编程语言的显着改进。

例如,Rust 目前只有一个主编译器,这意味着在关键安全系统开发中对严谨性和稳定性的关注被视为 Rust 的主要竞争优势,并且是一种比其他语言更易于分析和检查的语言.

目前,全球已经有一些公司应用 Rust 语言为汽车行业提供相关的开发和培训支持。例如,Ferrous Systems 是一家德国公司,其主要服务是验证 Rust 语言和编译器在安全关键领域的使用。请注意,在汽车行业,目前没有经过安全认证的 Rust 工具链。

按照计划,公司的第一个目标是 ISO 26262/ASIL-B 认证,该认证将于 2022 年底正式提供,为关键任务和高安全环境中的开发人员提供强大、经过验证、可追溯的站点基础设施和验证工具构建关键库、分析工具和进一步的系统保证。

今年早些时候,软件开发和验证工具提供商 AdaCore 宣布与 Ferrous Systems 建立战略合作伙伴关系,以进一步开发后者的 Rust 开发工具链,以支持嵌入式任务和安全关键应用程序,并使它们符合行业标准的软件安全标准。

AdaCore也是英伟达等全球芯片巨头的合作伙伴。前者的工具链可以在软件生命周期的早期检测代码缺陷,并集成到英伟达的芯片中,以最大限度地减少软件故障或恶意漏洞。攻击的可能性。

“自动驾驶很复杂,需要超过最严格标准的软件。” Nvidia 软件安全副总裁 Daniel Rohrer 表示,软件必须具有与硬件相同的功能安全标准,并经过同样严格的安全评估。

事实上,以目前主流的车载驾驶舱操作系统Android平台为例,过去主要是基于C和C++开发的,但内存安全漏洞已经成为最难的错误码来源,约占70 % 的高度和严重的安全漏洞。

在 Google 看来,Rust 有几个关键特性,例如内存安全、数据并发、默认不可变引用和变量、更安全的整数处理、标准库中更好的错误处理等等。

去年,谷歌首次表示,它已将 Rust 支持添加到 Android 开源项目中。但是向 Android 平台添加新语言是一项艰巨的任务。一些工具链和依赖项需要维护,测试基础设施和工具需要更新,开发人员需要接受培训。

谷歌的策略是从一些新的代码开发开始。

例如,Android 最新的蓝牙软件堆栈重写代码“Gabeldorsche”是用 Rust 编写的。Keystore 2.0 模块(一个存储开发者信息、私钥和公钥的容器)也是用 Rust 编写的。有业内人士表示,使用 Rust 编写 Android 库也是一个重要的方向,之前大部分都是基于 C/C++ 的。

此外,丰田此前公布的汽车级开发平台 OS-Arene,其 API 是用 Rust 编写的,是一个预编译的 C/C++ 库(目前是为 x86 和 arm 构建的)。它部署在可以读取、写入和验证丰田官方 CAN 消息的 ECU 上,并将在未来扩展以支持更多车型。

作为实时操作系统供应商,风河开发了 VxWorks,它还支持 Rust 编程语言,并允许构建和部署作为实时进程运行的多线程 Rust 应用程序。

同样,作为汽车芯片IP核的主流供应商,Arm在去年底宣布加入Rust基金会,这被视为对该编程语言未来大规模应用的巨大推动,因为和丰田一样。该基金会由亚马逊、谷歌、华为、微软和Mozilla建立。

这意味着 Rust 编程语言进入了一个快速的开发周期。高工智能汽车研究院监测数据显示,目前国际一线汽车零部件供应商已经开始招聘兼具Rust和C/C++开发能力的软件工程师。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论