04 | 芯片: 从裸机到智驾操作系统OS - 关于汽车OS必须知道的事

文摘   汽车   2024-09-26 14:39   德国  
阅读之前强烈建议参考之前系列文章:
01 | 芯片: 解密汽车嵌入式芯片CPU、MCU、SBC
02 | 芯片: GPU怎么就成了科技界的“新宠”?
03 | 芯片: 长文详解智能汽车的心脏SoC与安全岛(Safety Island)设计


在前几篇文章,我们聊到了不同类型的汽车芯片或者控制单元,包括冯诺依曼架构,CPU组成架构,汽车嵌入式控制单元MCU,多用于安全监控的基础芯片SBC,随着AI兴起的GPU以及汽车电子架构集中化,智能化催生的SoC以及安全岛的设计。


对于一个完整的电控单元来讲,这些硬件控制器的只是软件运行的载体,为了能够最终实现我们想要的功能,除了这些传感器,控制单元硬件外,软件发挥的作用不可小觑,这也是这些年软件定义汽车的由来之一。在这些软件中,除了我们熟悉的用于实现基本功能的应用层软件外,基础软件作为应用层软件和底层硬件衔接的桥梁,充当了非常重要的角色。

当然,根据承担的角色不同,这些基础软件又可以被进一步划分,而在这些基础软件中,操作系统无疑是最重要的内容之一车载操作系统是现代汽车软件架构的核心部分,它能够有效地管理和协调车载硬件及软件资源,为上层应用的搭建提供统一接口和服务。

所以我们今天就开始聊聊汽车软件操作系统。鉴于相关内容比较多,我们今天先聊聊车载操作系统最根本的内容,让你一文搞懂汽车操作系统。

01


汽车软件为什么需要操作系统OS

提到操作系统,大家最先想到的就是我们日常使用的个人电脑中的操作系统,什么DOS,苹果OS,Linux,Windows操作系统等等,它存在的目的无非就是负责管理和分配计算机的各种资源,包括CPU、内存、硬盘和外设,并为我们提供了一个直观、易用的界面,支撑我们写文档、上网,与朋友视频聊天等等,让各种复杂的计算机任务变得简单易行


为了方便理解,我们可以把操作系统想象成一位多任务管家,它能够在你繁忙的家里同时处理多个任务,确保每件事都井井有条

1. 任务调度 - 多任务管家:
想象你家里有很多事情要做,比如做饭、打扫、带孩子、接电话等等。我们的多任务管家会把每个任务安排得井井有条,让每件事都能按时完成,不会让你手忙脚乱。

这就像操作系统在处理不同的周期的任务或者线程,例如5ms,10ms任务等。


2. 实时响应 - 超快的反应:
当你家的烟雾报警器响了,多任务管家会立即停下手中的活,去处理这个紧急情况,确保你的安全。

操作系统也是这样,遇到紧急情况或优先级高的任务,它必须能够快速响应重要的任务,比如突然刹车的需求,确保你在紧急情况下能安全停车。


3. 资源管理 - 智能家务分配:
家里资源有限,比如只有一台洗衣机、一个烤箱。多任务管家会合理分配这些资源,比如先洗衣服再烘干,或是一边烤面包一边煮咖啡,不会让资源浪费或冲突。

操作系统也会管理控制器硬件资源,比如CPU执行时间和内存,确保各个功能模块之间不互相打架,在一个任务需要等待时,暂时等待,运行下一个任务等。


4. 安全性和稳定性 - 家庭安全卫士:
多任务管家还会确保家里的每个房间都安全,比如锁好门窗、定期检查电器,防止意外发生。

操作系统必须提供相关的安全措施,保护应用不受外界攻击,内部错误检出,并且在出现问题时能够迅速恢复正常。


5. 模块化和扩展性 - 灵活的家务安排:
如果你家里新增了一个任务,比如每天遛狗,多任务管家会灵活地把这个任务加进日程,不用大改家里的安排。

操作系统也是这样,它让应用层的功能可以灵活扩展和更新,不需要对硬件本身以及现有的任务做大幅修改。


那么对于汽车电控系统而言,为什么也需要操作系统呢?

其实,在汽车电子软件发展的初期,汽车电控系统相对比较简单:

  • 处理的任务也比较单一,通常只执行单一任务,没有任务调度的需求

  • 代码通常以无限循环的方式运行,并依靠中断来处理定时事件或外部信号

  • 代码结构通常是一个主循环加上一些中断服务程序,也就是所谓的while(1)

想必年纪大一些的汽车工程师都写过这个最基本的东西吧


那时候汽车软件系统确实是没有操作系统的,实际上也不需要操作系统,汽车控制单元里的软件是直接运行在硬件上的,这也就是所谓的裸机编程(bare-metal programming),即直接在硬件上运行代码,此时的汽车软件也是和底层硬件强耦合,一旦更换控制器硬件,软件代码就必须进行相应更改,软件复用性差

但随着汽车电控系统不断复杂化,软件任务越来越复杂,多任务成为常态,对任务实时性,安全性的要求也越来越高,尤其涉及到多个任务之间的状态切换,优先级,现场保护,执行时间控制等。这时候单任务无操作系统的软件架构根本没办法满足这样需求,汽车软件任务急切需要一个集中管理者,汽车软件操作系统,即车载操作系统的需求由此出现。

但操作系统的开发并不是一朝一夕就能完成,除了基本功能的实现外,其可靠性,兼容性,生态环境,开发工具,行业内的认可等等这才是真正的难点,这都需要大量的时间验证,而个人电脑操作系统发展至今已经比较成熟,也没有必要重复造轮子,所以汽车操作系统实际上是直接借用电脑操作系统,也正是因为这样,实际上并不存在真正专门为汽车设计的操作系统,都是在现有的操作系统基础上,根据汽车软件的特性,例如,实时性,安全性,对其进行适配

尤其随着汽车电子电气架构的集中化,软件定义汽车,自动驾驶,智能座舱的出现,使得汽车操作系统也随之演变,逐渐从单一的实时操作系统RTOS,逐渐向Linux 等更加复杂,性能更强的操作系统扩展,并且呈现多系统融合的趋势,这部分内容我们下篇具体聊。

今天我们先来聊聊,什么是汽车操作系统?到底什么是操作系统内核OS,微内核,宏内核是这么多回事,狭义和广义的操作系统有什么区别,为什么要做这些区分等等!


02


操作系统的核心 - 内核OS

汽车操作系统是现代汽车软件架构的核心部分,它能够有效地管理和协调车载硬件及软件资源,也不仅是车辆各项功能和性能的基础支撑,其在安全性、效率、智能化、用户体验、可扩展性、成本效益、法规遵从和市场竞争力等多个方面都起到了关键作用。


很多朋友提起汽车操作系统,大部分反应就是任务管理调度,中断处理,实际上操作系统功能远比这个强大,这些只是操作系统一部分的职能。


根据操作系统所包含的具体内容不同,它可以分为狭义操作系统(狭义 OS)和广义操作系统(广义 OS),这也同样适用于车载操作系统,具体如下图所示:


接下来,我们首先来聊聊狭义的操作系统,即内核OS:


狭义的汽车操作系统: 内核的基石

狭义的汽车操作系统主要指操作系统的核心部分,即内核(Kernel),也称为“底层 OS”它是系统软件的核心部分,负责提供操作系统的基本功能和服务。

作为底层系统软件,它直接与硬件进行交互,管理系统的基本资源和操作,也是操作系统的根本核心。

内核的主要功能主要包括:

  1. 任务调度(Task Scheduling):

  • 负责创建、调度、终止进程,确保多个任务能够并发执行且系统资源得到合理分配。

  • 管理多个任务(进程)的执行,确保每个任务能在合理的时间内运行。

  • 内存管理(Memory Management):
    • 管理系统的内存资源,包括内存分配和回收、虚拟内存管理等。

    • 管理系统内存的分配和回收,确保内存的有效使用,支持虚拟内存机制,提供内存保护和共享功能。

  • 设备驱动(Device Drivers):

    • 提供与硬件设备的接口,负责驱动各种设备如传感器、执行器、显示器等,处理设备的输入和输出操作。

  • 安全和权限管理(Security and Permissions Management):

    • 控制对系统资源的访问权限,确保系统的安全性和稳定性。

    而狭义的操作系统或内核OS,根据所包含的服务和不同的应用属性,又可以分为微内核(Microkernel)和宏内核(Monolithic Kernel)两种主要架构。

    那么,它们二者有什么区别呢?


    微内核(Microkernel)

    概念与特点

    • 基本概念:微内核操作系统的设计思想是将操作系统内核功能最小化,只保留最核心的功能,比如进程管理、内存管理、和基本的IPC(进程间通信)
    • 模块化:其他功能(如文件系统、网络协议栈、驱动程序等)运行在用户态,通过消息传递与微内核通信。
    • 安全与稳定性:由于大部分服务在用户态运行,系统的可靠性和安全性得到提高,某个服务崩溃不会导致整个系统崩溃
    • 灵活性:易于扩展和移植,不同模块可以独立开发和调试。

    典型例子

    • QNX:QNX是一个广泛用于汽车领域的实时操作系统,凭借其微内核架构、高可靠性、安全认证和全面的安全功能,成为嵌入式系统,特别是汽车行业中的首选操作系统。其在内存保护、访问控制、网络安全、更新维护和安全工具方面的优势,确保了系统的整体安全性和稳定性。

      但QNX是一款商业操作系统,非开源,使用它需要支付许可费用,生态系统也相对比较局限,这可能对一些预算有限的项目和企业造成很重的负担。

    宏内核(Monolithic Kernel)

    概念与特点

    • 基本概念:宏内核操作系统将所有核心服务(包括文件系统、设备驱动、网络栈等)集成到单一的内核空间中运行
    • 性能:由于所有服务在内核空间内运行,系统调用和服务之间的通信开销较低,性能较高。
    • 复杂性:内核空间的代码量较大,复杂性增加,错误和漏洞可能会影响整个系统的稳定性,所以安全性较差。

    典型例子

    Linux:虽然Linux内核也在不断引入一些微内核的思想,但总体上仍属于宏内核。

    Linux操作系统凭借其开源性、广泛的硬件支持、丰富的软件生态系统和强大的网络功能,成为嵌入式系统,尤其是汽车电子系统的热门选择。然而,其实时性能的限制、安全性和稳定性问题、开发复杂性以及资源需求等缺点也需要在项目选择和实施过程中加以考虑。但好在目前针对Linux实时性的问题,也有不少改进的版本,在现有车载操作系统中,发挥越来越重要的作用,广泛用于汽车的信息娱乐系统和高级驾驶辅助系统(ADAS)。

    Android是一种基于Linux内核开发的专用操作系统,旨在为现代汽车提供强大的信息娱乐系统和车载应用平台。凭借其开放性和灵活性,Android汽车操作系统已被国内许多汽车制造商和供应商广泛采用,成为智能驾驶和车联网(V2X)解决方案的重要组成部分。

    那么,在具体汽车操作系统应用中,微内核和宏内核架构应该如何选择呢?

    • 安全性:微内核架构由于模块化设计,更容易实现高安全性。而宏内核由于所有服务运行在内核态,潜在的安全风险更大。
    • 性能:宏内核通常在性能上占优,适合需要高效处理大量数据的应用。
    • 开发与维护:微内核架构更适合模块化开发,便于维护和更新;宏内核则开发和调试更为复杂,但在单一任务的性能优化上有优势。

    在实际应用中,汽车操作系统的选择通常基于具体的使用场景和需求。例如,信息娱乐系统可能更倾向于使用基于Linux的宏内核操作系统,而用于关键安全控制的ECU则可能选择基于QNX的微内核操作系统。

    但是,不管是微内核还是宏内核,现有的OS体系都已经比较完整,基本上就那么几个,鉴于之前提到的开发周期,验证,行业认可,生态等问题,也没有必要再重新去开发新的内核,尽管现在汽车市场上充斥着各种自研操作系统的宣传,我不说这些宣传都是假的,但都不是真正内核OS自研,哪天你再看到这样的新闻,心里懂就行了😉!

    那么,他们说宣传的自研汽车操作系统,到底是在自研什么呢?这就不得不提广义的操作系统,我们接着往下看!


    03


    广义的车载系统OS


    广义的汽车操作系统: 全面的软件栈

    在前面我们聊完了狭义的操作系统,也就是内核OS,但实际上为了支持整个软件系统工作,单有内核是远远不够的,还需要其他系统软件的支持,这就是所谓的广义操作系统。

    广义的操作系统指的是控制和管理车载硬件以及软件资源的完整程序系统集合。它不仅包括狭义操作系统的核心内核,还涵盖了硬件抽象层、系统中间件组件、功能软件等,具体示意图如下所示:


    组成部分

    1. 核心功能(内核):

      • 负责任务调度、内存管理、设备驱动、文件系统管理和安全性控制等基本系统服务,具体见上面广义广义操作系统的描述和介绍。

      2. 中间件(Middleware):

        • 随着电子电气(EE)架构逐渐趋于集中化,汽车软件系统中出现了多种操作系统,或不同底层硬件平台并存的局面,这导致上层应用层软件不得不适配底层系统,使得系统复杂性和开发成本的急剧上升。
          为了解决这些问题,提高软件的可管理性、移植性、裁剪性和质量,需要定义一套架构(Architecture)、方法学(Methodology)和应用接口(Application Interface)来标准化上层对下层的访问接口,这种解决方案正是中间件,我们最熟悉的Classes Autosar中的RTE正是这种背景下产生的中间件。
        • 中间件通过提供标准的接口、高质量的无缝集成、高效的开发流程以及复杂系统管理的新模型,显著提升了软件开发的效率和质量。汽车行业有众多整车厂和供应商,每家原始设备制造商(OEM)都与不同的供应商合作,每个供应商也不止向一家OEM供货。中间件的存在使得相同产品可以在不同车型上重复使用,或使不同供应商的产品互相兼容,从而大幅减少开发成本。
        • 中间件的任务就是负责各类应用软件模块之间的通信以及对系统资源的调度,提供各种服务,如通信、数据管理等,例如,提供跨ECU的通信和数据管理功能,如CAN总线协议、LIN、MOST、FlexRay等通信协议栈,以及数据抽象层和服务管理,所以通常我们说的中间件大多也就是通信中间件。这部分涉及内容较多,我们后续单独在聊。


        3. 应用程序框架(Application Framework):

          • 支持开发和运行各种应用程序的框架,如高级驾驶辅助系统(ADAS),应用程序框架为开发自动驾驶功能软件提供了一个基础平台,它提供了一组预定义的接口、组件和服务,开发者可以基于这些基础组件快速构建复杂的自动驾驶系统。

          4. 系统库(Libraries):

            • 提供常用的,可重用的代码模块,实现特定功能,方便开发应用程序。例如,车辆诊断库、传感器数据处理库等。

            5. 系统实用程序(Utilities):

              • 各种辅助工具,如故障诊断、系统监控、固件更新和安全工具等。


              此外,随着电子电气架构不断集中化,多操作系统融合成为趋势,为了适应不同控制对象对操作系统的要求,Hypervisor(虚拟机监视器)成为重要的一种解决方案,它是一种运行在物理硬件和操作系统之间的中间层软件。它可以将一台物理机虚拟化为多台逻辑计算机,运行不同的操作系统。朋友们对这个先有个概念,具体内容我们之后再细聊。
              现在聊完了广义的操作系统,我们再回到之前的问题,各大车企宣传的自研OS到底是在自研什么?

              直白地将,就是中间件和功能软件的自研,本质上还是基于内核OS的上层软件架构的搭建,一方面是为了软硬件解耦,模块化快速开发迭代,另一方面也是为了满足OEM自身所谓的自主性,

              所以无论是Waymo、百度、特斯拉、Mobileye,还是一些自动驾驶初创公司和车企,所谓的自研自动驾驶OS(属于广义OS)实际上都是基于现有内核之上自研中间件和功能软件。
              所以目前很多国内企业标榜自研OS,都存在夸大事实的成分,其实都只是中间件自研,驾驶部分应用框架😂。
              由于不同内核之间存在差异,车企在选择OS内核时,主要考虑的因素也不同,具体包括安全性、可靠性、开放性、可扩展性、易用性和成本等,然后结合自己的需求和能力体系进行权衡。

              车企会根据自身的产品定位、技术实力和市场需求,成本,对不同的因素进行权衡,一般来讲例如:
              • 高安全性系统:更注重实时性、性能和安全性,可能选择QNX、VxWorks等实时操作系统。

              • 智能座舱系统:更注重信息安全、开放性和可扩展性,可能选择基于Linux或Android的定制操作系统。

              当然,它们二者并不是单一选择题,更多的时候针对不同域控系统的要求,一般会采用其适合的操作系统,这就导致目前SoC异构硬件平台上经常需要运行多个操作系统,这时候就需要之前提到的Hypervisor。这些内容我们会在下篇文章继续深聊!

              写在最后:


              芯片系列,解密汽车操作系统基本的内容我们就聊完了,希望能够给朋友们对其带来更多理解。下一篇我们继续深入,来探讨汽车操作系统具体的应用和演变。


              最后,给朋友们推荐下我个人的汽车功能安全ISO26262书籍,需要的朋友们可以前往公众号主页,商品橱窗购买个人汽车功能安全书籍,保证不讲废话,只讲干货😉! 也有更多推荐书籍!




              END




              点赞【在看】= 原创的动力

                                               多谢【点赞】和【在看】

              AUTO世代
              汽车功能安全ISO26262,预期功能安全SOTIF,软件开发,MBSE,敏捷开发等专业知识布道者,坚持原创,拒绝粗制滥造,助力汽车安全落地,欢迎关注!
               最新文章