草庐IT

漫谈车载操作系统发展趋势

zoeking001 2023-03-28 原文

操作系统(Operating system,OS)管理着计算机系统的所有软硬件,是汽车行业的关键软件平台。小到几千行代码的简单控制程序,大到Linux、macOS、iOS和Windows等千万级代码的桌面级操作系统,每个操作系统在功能、程序大小、复杂性、开发工作、硬件需求、维保成本等方面都存在较大差异。 

维基百科上虽然有Linux和QNX等主流操作系统的基本介绍,但涉及车载操作系统的信息则少之又少。本文将在介绍操作系统基本概念的同时,着重讲述车载操作系统的发展情形与趋势。

 

一、操作系统概述

操作系统提供计算机硬件和应用程序之间的接口,通过遵循编程到操作系统中的规则和程序,限制应用程序使用硬件;提供简化应用程序开发和执行的服务,包括将程序加载到内存、与传感器和执行器通信、存储结果等各种硬件资源管理的功能,还包括如中间件、库及其他系统软件功能。

操作系统的性能和生态系统对于开发“软件定义汽车”所需的应用程序和软件平台是至关重要的,一个好的车载操作系统需要大型生态系统和可靠的架构支撑。

车载操作系统要求如下表所示:

*ISO 26262认证:道路车辆功能安全国际标准;

*ASIL等级:Automotive Safety Integrity Level,汽车安全完整性等级;

*ADAS:Advanced Driver Assistance System,高级驾驶辅助系统;

*AV:Autonomous  Vehicles,自动驾驶汽车;

*ECU:Electronic Control Unit,电子控制单元;

*OTA:Over-the-Air Technology,空中下载技术;

*RAM:Random Access Memory,随机存取存储器;

*MCU:Microcontroller Unit,微控制单元。

操作系统的特性决定了其能力。例如,单任务操作系统一次只能运行一个程序,而多任务操作系统可以同时运行多个程序。单用户操作系统无法区分用户,但可允许多个程序同时运行;多用户操作系统允许多个用户同时与系统交互,扩展了多任务处理以运行来自多个用户的程序,需要跟踪每个用户正在使用的软硬件资源。

 

二、操作系统内核(OS kernel)

内核,是一个操作系统的核心,是基于硬件的第一层软件扩充,提供操作系统最基本的功能,也是操作系统工作的基础。内核负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性,是连接应用程序和硬件的桥梁。目前主流的操作系统内核架构有两种:宏内核和微内核。

宏内核将所有系统调用和操作系统服务都整合在一起,优点为性能良好,而缺点在于耦合度高:一旦其中一个模块出现问题,其他所有模块都可能受到影响。Linux就是一种主流且经典的宏内核操作系统。

微内核的内核功能模块通常是尽可能少的,只提供操作系统最核心的功能。对比宏内核,微内核架构多了系统调用的过程,因此性能相对较差,但其耦合度相对较低,具备更好的伸缩性和扩展性,从而使系统更加稳定;其模块化的操作系统结构,更适合于大多数汽车的ECU系统,QNX实时操作系统就是其中的佼佼者。

三、虚拟机管理程序操作系统(Hypervisor OS)

虚拟机管理程序是用于管理多个操作系统及其应用的小型软件平台,也被称为虚拟机(VM,Virtual Machine)监视器,可运行各类VM软件。就汽车领域而言,如何将车载信息娱乐与功能安全(例如备用监视器的音响主机显示器)结合起来,是虚拟机管理程序至关重要的内容。

 

四、功能安全操作系统(Functional–safety OS)

在汽车的性能中,安全无疑是人们最关心的内容,许多ECU都需要具备功能安全认证的操作系统。ISO 26262定义了汽车安全完整性等级ASIL,通过对潜在危险进行风险分析,确定危害事件,并判断危害事件的严重性、暴露性和可控性,将安全等级由低到高划分为QM/A/B/C/D,其中ASIL D级最为严苛。

所有基于AUTOSAR(Automotive Open System Architecture,汽车开放系统架构)的操作系统,如Microsar操作系统、RTA操作系统和EB Tresos安全操作系统都具备功能安全等级认证。汽车ECU中常用的其他三款操作系统为:Integrity RTOS、VxWorks和QNX。 

然而功能安全操作系统无法管理具有大型复杂软件代码的ECU,例如车载信息娱乐系统的复杂ECU、ADAS ECU和AV ECU。唯一例外的是QNX操作系统,其在ADAS和AV域ECU方面具有明显优势。

车载信息娱乐系统ECU对操作系统的性能有着较高需求,使得性能相对较高的Linux在过去五年中备受青睐。但Linux有一个致命缺点:缺乏功能安全等级认证。当功能安全应用程序需要作为基于Linux的ECU系统的一部分时,虚拟机管理程序操作系统成为了Linux的解决方案。

2022年5月,Red Hat公司和通用汽车宣布,双方将联手合作,从边缘推进软件定义汽车的发展。两家公司希望围绕红帽车载操作系统扩展创新的生态系统,该操作系统将为通用汽车Ultifi(将于2023年推出)软件平台的持续演进提供经过功能安全等级认证的Linux操作系统基础。同时,其他Linux供应商(比如谷歌)也将尝试获得功能安全等级认证。

 

五、操作系统生态系统支持

操作系统成功的关键在于是否拥有庞大的生态系统支持——支持运行的软件越多,操作系统就越成功。具备在世界领先的微处理器平台和特定的MCU上运行的能力也同样重要,如汽车ECU主要基于ARM的微处理器。此外,一个成功的操作系统的软件开发环境也必须优良:车规级MCU上,几乎所有应用软件都必须通过操作系统运行。

 

六、操作系统成本因素

操作系统通常是由汽车OEM(Original Equipment Manufacturer,原始设备制造商,一般指整车厂)直接采购而非自行开发,影响其成本的构成因素主要为: 

1、操作系统的许可成本,包括操作系统内核、中间件和库软件(如数学、浮点、图形等)。Linux内核操作系统是一个开源的免费软件平台,但在大多数情况下,Linux中间件、一些库和商业发行版需要付费。

2、操作系统的大小直接影响运行软件及其应用程序所需的硬件数量,总代码大小会影响所需的最大永久存储容量。磁盘时代大多数硬盘驱动器都足够大,但在通过NAND芯片或eMMC(Embedded Multi Media Card,嵌入式多媒体存储卡)模块进行非易失性存储的今天,操作系统变大通常会增加额外的成本。

3、操作系统的占用空间是运行该操作系统及其应用程序所需的内存总量,因此操作系统运行时占用空间的大小也会影响系统的内存成本。

4、操作系统可能会影响MCU的硬件成本。大型操作系统需要MCU具备更高的性能和更丰富的硬件资源,同样会造成硬件成本的增加。

 

七、ECU软件开发

ECU软件开发对汽车行业是至关重要的,其软件复杂性和与之对应的工作量也在不断增长。传统的ECU软件开发通常通过多个供应商提供的软件开发工具包(Software Development Kit,SDK)完成。

如今,SDK已被集成开发环境(Integrated Development Environment,IDE)所取代。集成开发环境一般包括代码编辑器、编译器、调试器和图形用户界面等工具,汇集了代码编写功能、分析功能、编译功能、调试功能等一体化功能的开发软件服务套,已扩展至基于Web的IDE系统。

当下,Eclipse IDE已成为汽车及其他众多行业最受欢迎的软件开发系统。Eclipse是一个开放源代码、基于Java的可扩展开发平台,于2001年11月由IBM公司贡献给开源社区,现由非营利软件供应商联盟Eclipse基金会管理。

除此之外,以Web为中心的软件开发也正在迅速发展,Amazon AWS(Amazon Web Services,亚马逊云平台)尤其活跃。AWS正在建立合作伙伴关系以满足包含SaaS(Software as a Service,软件即服务)功能的软件开发需求。Microsoft Azure(微软基于云计算的操作系统)和其他操作系统也正在经历类似的成长过程。

提供专注于功能安全应用程序的操作系统也是一种趋势,Apex.AI(自动驾驶操作系统开发商)就是一个典型例子。

 

八、新兴的ECU需求

车载操作系统还需要满足新兴技术ECU的需求。

1、所有操作系统都应将安全作为核心功能,支持尽可能多的硬件、软件和基于云的网络安全。

2、操作系统应增强系统服务,以满足OTA软件在嵌入式软件和云功能方面能力增强的需求。

3、应拓展新功能,满足车联网功能拓展所需的ECU数据提取需求。

 

九、操作系统战略前景

随着ECU复杂性的增加,操作系统的复杂性也随之增加,整车厂需要多个操作系统来覆盖广泛的ECU应用场景。

对于简单的ECU而言,整车厂一般更喜欢基于AUTOSAR的操作系统,但其无法适应车载信息娱乐等高端ECU的复杂性。高端ECU主要使用QNX或Linux作为操作系统,Linux是最受欢迎的车载信息娱乐操作系统,但在考虑功能安全时,ADAS和AV ECU领域明显更偏爱QNX。

据媒体报道称,包括大众和梅赛德斯·奔驰在内的几家整车厂正在讨论自主研发汽车操作系统,然而汽车操作系统的开发是一项艰巨的任务。操作系统的研发人员成本较高,而其生命周期可能长达30至40年,并且要保持定期更新和相对持续的技术改进。截至2022年,Linux已经发展了大约30年,QNX发展了近40年。

整体来看,针对此类生命周期较长的操作系统,最好的发展策略就是从最棘手的网络安全角度入手。对于低复杂性的ECU,Green Hills拥有最高的安全性和安全性认证,包括FAA(Federal Aviation Administration,美国联邦航空管理局)飞机使用认证;对于高端ECU,QNX拥有比Linux更高的安全性认证,并且很可能继续保持这一排名——即使一些Linux发行版已经获得了ISO 26262认证。QNX的微内核架构使操作系统更加安全;QNX可能会首先开发自动驾驶汽车的新标准——ISO 21448(预期功能安全),提供UL 4600(自动驾驶产品安全评估标准)和IEEE P2851(芯片的安全验证数据格式)等相关的功能。

 

参考文献

https://www.embedded.com/trends-in-automotive-operating-systems/

https://zhuanlan.zhihu.com/p/394560786

 

原文链接

https://mp.weixin.qq.com/s/pyfU9nbep9af2ShBDZV9mQ

有关漫谈车载操作系统发展趋势的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  4. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  5. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  6. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  7. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  8. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  9. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  10. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

随机推荐