以是否对需要执行的任务划分优先级为标准,OS内核可分为分时OS和实时OS两种。前者对各个用户/作业都是完全公平的,不区分任务的紧急性;而后者指在高优先级的紧急任务需要执行时,能够在某个严格的时间限制内抢占式切换到该任务上。
由于事关安全,自动驾驶需要的实时OS。QNX和VxWorks均属于实时OS,但Linux是分布式OS。
前段时间,有人质疑特斯拉“拿(Linux)分时系统做操作系统,是对生命最大的不负责”,然而,这个质疑未必成立——特斯拉的Linux系统是不是实时操作系统,以及是否按照车规级功能安全规格开发,还有待证实。
(图片摘自高工智能汽车)
诚然,Linux原本是分布式OS,但Linux对应实时性改进的工作从未停止过。在经过优化后,Linux内核也分为抢占式内核和非抢占式内核,其中,抢占式内核的实时性足以满足自动驾驶的需求。
安霸半导体上海软件研发高级总监孙鲁毅在去年8月份发的《关于中国市场汽车智能驾驶主控芯片操作系统的思考》一文种提到,2005年,Linux2.6的发布,就开始支持内核可抢占式调度CONFIG_PREEMPT,此选项使得内核态程序只要不被spinlock保护或者在中断处理程序里,都可被更高优先级的内核线程抢占。
这就使得很多任务执行的时候,任务调度延迟大大改善。默认配置通常可以做到调度延迟在1到几个毫秒。实时性补丁CONFIG_PREEMPT_RT项目也已经比较成熟,可以手动打补丁添加提升内核的实时性。这些优化大大改善了Linux的实时性,使得Linux实际已经成为硬实时操作系统。
德国不莱梅大学曾做过一项测试,这项测试表明在系统满负荷长时间运转时,Linux标准内核不加任何补丁也不亚于常见各种实时操作系统的实时性。
QNX是一个半封闭系统,而Linux和VxWorks均是开源系统。所谓“半封闭”,即QNX的内核,客户是不能改的,但客户可自己编写中间件和应用软件;所谓开源,即所有内核源代码都向客户开放,客户可根据自己的实际需求裁剪,可配置性很高。
Linux基金会在2012年启动了开源项目Automotive Grade Linux (简称AGL),目前成员已经超过100家。当前,Linux在汽车市场的应用主要在信息娱乐系统,不过,AGL的最终目标,是提供满足安全关键系统的功能安全目标,从而服务自动驾驶应用。
按照AGL的设想,未来成员企业可以共享70%的代码,另外30%则是不同品牌厂商进行差异化开发,从而保障各自的商业化利益。
QNX早在2011年就通过了ISO26262 ASIL-D安全认证,这是第一个通过这项认证的实时操作系统。与Linux的免费不同,QNX需要商业收费,但凭着其安全性、稳定性和实时性,QNX仍牢牢占据汽车嵌入式操作系统市占率第一的位置。
QNX是微内核,即内核中只有最基本的调度、内存管理,驱动、文件系统等都是用户态的守护进程去实现的。其优点是超级稳定,驱动等的错误只会导致相应进程死掉,不会导致整个系统都崩溃。
据黑莓QNX IOT事业部大中华区首席代表董渊文介绍,目前,通用、沃尔沃、奥迪、上汽、吉利、蔚来、理想、小鹏等均用QNX作为自动驾驶OS。
黑莓提供给各自动驾驶客户的QNX系统是一个无差别的标准版,但BSP驱动是定制版。
BSP包括了Bootloader(以基础支持代码来加载操作系统的引导程序)、HAL(硬件抽象层)代码、驱动程序、配置文档等,是内核与硬件之间的接口层,目的是为操作系统提供虚拟硬件平台,使其具有硬件无关性,可以在多平台上移植。
与QNX相比,Linux更大的优势在于开源,在各种CPU架构上都可以运行,可适配更多的应用场景,并有更为丰富的软件库可供选择,因此,具有很强的定制开发灵活度。
并且,Linux是宏内核,即除了最基本的进程、线程管理、内存管理外,文件系统,驱动,网络协议等等都在内核里面,其优点是效率高,可以充分发挥硬件的性能。
此外,Linux的免费也对车企有很强的吸引力。
李星宇在演讲中提到,近几年,Linux在自动驾驶产业的使用率在攀升,“科技公司、Tier 1和车企均会基于Linux进行投入”。
但Linux内核的的组件要比QNX复杂得多,因而稳定性也要差得多,开发进程中的bug经常会导致整个系统挂掉。因此,基于Linux做开发的门槛很高。
张人杰说:“Linux平台有几千万行代码,而这些代码又不是你设计的,你怎么确保它的安全性?你只能是在外围做一些加减,你对代码的理解能力决定了你能否解决这些bug。目前,Linux官方承认的bug就上万个了。在一定时间内,这些bug问题不大。但在某些条件下,就会引起很大的麻烦。”
Linux迟迟未能通过ISO 26262标准。相比之下,QNX的代码和功能架构都比较简单,代码也总共只有30万行代码,出现故障的可能性远远小于Linux。
《高工智能汽车》在最近的一篇文章中还提到了基于Linux做开发的两大挑战:
1.作为开源的操作系统,Linux在被用于安全关键系统时,在代码库不断更新的情况下,存在安全认证失效的问题,因此,汽车制造商需要不断重新做安全认证,但这可能会带来额外的成本支出。
2.后续的补丁管理和版本对齐过于复杂。一家早期选择AGL的汽车制造商工程师表示,至少有4家Tier 1为他们的特定产品提供了不同版本的Linux内核,这意味着他们需要为不同的补丁管理4个不同的AGL内核。为摆脱这些麻烦,他们正在为下一代产品从AGL转向QNX作准备。
既然如此,Waymo、特斯拉、百度和Mobileye为何还要基于Linux做开发?成本考虑是一方面,更重要的,是为了减少对软件供应商的依赖,“这些代码都是开源的,而我的能力又足够强,可以在性能优化上做更多的工作。”
特斯拉就尝到了采用Linux4.4开源操作系统做开发的好处。由于自己完全掌握核心技术,不必受制于操作系统厂商,每次只要一发现问题便立即通过OTA进行快速修正与升级,提升用户体验。
简而言之,站在车企的角度看,QNX有点像Mobileye——尽管“易用”,但限制了车企的自主性;而Linux则有点像英伟达——比较“难用”,但赋予了车企很大的自主权及面向未来的兼容性。
随着车企对软件技术投入的加大和能力的提升,Linux在自动驾驶市场的占有率大将会逐步上升,而QNX的市占率则会逐步下降。
风河VxWorks的实时性已经在航空电子、医疗电子和工业安全等领域的几十亿台设备上得到了充分的验证。风河高级产品经理王鹏在此前的一次直播中说:任何“实时”Linux 的实时性都无法跟 VxWorks 相比。
VxWorks也是开源的。VxWorks实时操作系统由400多个相对独立、短小精悍的目标模块组成,但用户可获所有源代码并根据需要对OS内核在源代码层面进行裁剪和配置。
VxWorks的影响力主要在航空电子,汽车板块在其营收中占比的不高,因此,此前,风河的资源重点并没有放在汽车市场上。但近些年,风河对汽车业务的投入力度正在加大。
风河不光是能够直接卖商用性的产品,它也会提供专业定制化服务。在奥迪A8的项目中,风河除了提供VxWorks,还为TTTech汽车业务分公司提供了开发板卡支持包、中间件开发和网络栈集成。
宝马-ME-英特尔联盟的自动驾驶OS内核,一度采用了VxWorks。现代的自动驾驶量产车上也在使用Vxworks。
2018年10月,风河宣布其将为TTTech Auto最新版本的安全软件平台MotionWise提供支持,用于自动驾驶应用。
2019年2月,VxWorks通过了ISO 26262 ASIL-D认证。
VxWorks虽然和Linux同为开源系统,但两者的区别在于:后者是免费的,前者则要收取一笔高昂的授权费,开发定制成本也很高,这限制了其市场占有率的增长。
当然,各种自动驾驶OS之间并非截然对立的关系。
如百度的Robotaxi系统,一个比较普遍的说法是“在Linux内核上运行”,但赛灵思系统架构师兼市场总监毛广辉的说法是:感知部分是在Linux行运行,而非感知部分则是在QNX上运行。“
奥迪A8上用了至少两套自动驾驶OS,其中英伟达的Tegra K1芯片上用的是Linux内核,而英特尔的FPGA Cyclone上用的是VxWorks内核。
简单地说,车企在选择OS内核时,主要考虑开放性、可扩展性、易用性、安全性、可靠性及成本等因素,再结合自己的需求及能力体系来做权衡。
各OS内核的简单比较如下:
表格中部分数据来自 安霸半导体上海软件研发高级总监 孙鲁毅的文章《关于中国市场汽车智能驾驶主控芯片操作系统的思考》。