这个问题下面的回答比较有意思,大概分为两种观点,一种是说Linux打上RT补丁以后性能不差的,另外一种是说特斯拉根本没用Linux做车载系统,Linux是娱乐用的。
抛开技术问题不谈,有些东西是可以查到的,比如特斯拉到底用没用Linux,答案是肯定的:
自动驾驶用的就是Linux,官方网站说的,这总不会是错的吧?另外特斯拉已经开源了相关的代码:
自动驾驶算不算车载系统?我觉得算。虽然主控这一类的firmware里也可以跑一个轻量级的RTOS,也许特斯拉按照其它答案里说的没在这类硬件上使用OS,但把自动驾驶系统排除在车载系统之外,恐怕不合适吧?
所以,至少有一个结论可以确定:特斯拉用了Linux,而且是在比较核心的系统中用了Linux
至于硬件firmware上用的是什么系统,特斯拉没有公开信息,基本可以排除QNX,freeRTOS,VxWorks这些比较大的RTOS,但世界上RTOS这么多,简易RTOS内核也就几百行代码,整个操作系统都是50~100KB的尺寸,不排除特斯拉自己搞一个简单的。毕竟直接跟硬件打交道的firmware的业务逻辑并不复杂,类似VxWorks这种系统太大了,甚至uCOS都太大了。以火星车为例,主控是用VxWorks,很多探测仪器上用的是uCOS或者没有使用操作系统。
剩下的问题就是Linux实时性好不好的问题了,或者换个说法,Linux是否适用于自动驾驶这种应用场景?
我觉得这是商业问题而不是技术问题,当年提出RTOS的场景是:在一些硬件性能不足而可靠性要求高的场合,要满足重要业务优先调度的原则。比如飞机、卫星这些芯片性能比民用芯片差很多的硬件上。但车载硬件性能并不差,因为车载系统的环境远远不如卫星和飞机那么恶劣,完全可以用上相对更好的硬件(相对于卫星来说)。所以,实时性不足,拿硬件性能弥补,这种是完全可行的,毕竟并不是所有的应用场景都需要百纳秒以内的抖动时延。
有人说打了RT补丁以后,Linux实时性也很好,这里我觉得是很多人对实时系统不了解,RTOS,既包括RT,也包括OS,内核调度器是RT了,驱动都是原来的驱动,那么整个系统的延迟仍然很大,所以RTOS的实时设计理念不仅仅是调度器、中断这些,还包括实时文件系统,实时网络协议栈,实时设备驱动等等。所以仅仅是一个RT补丁还远远不够,甚至文件系统、网络协议栈都需要重写,我对RT-Linux了解不多,但我不认为RT-Linux把这些都做了改造。
所以,传统RTOS厂商(包括一些车厂)批判特斯拉不够安全,这不是没道理的,即使是RT-Linux,要把整个软件生态改造成RTOS的设计,都是不现实的。所以特斯拉的自动驾驶平台的实时性是存疑的(特斯拉自己说改造过,,在我前面的第一个链接里有说明:Throughput, latency, correctness and determinism are the main metrics we optimize our code for)。对于自动驾驶系统来说,使用Linux的好处就是比传统的RTOS更容易获得自动驾驶的解决方案,毕竟Linux的API和运行库比传统的RTOS要丰富的多,使用Linux必然要比传统RTOS更节约成本。
回到前面的观点,现在的硬件的性能已经很强大了,RTOS是否还是必要的?这个问题更多的是商业问题:特拉斯(马斯克)是一个喜欢打破传统的厂商(个人),传统厂商不愿意做变革,特斯拉愿意。至于这其中的风险,是需要时间来考验的,当然了,任何新生事物都需要时间来考验。
另外,SpaceX的火箭上都用Linux了,至少说明Linux在某些场景跟传统的RTOS比起来不差。而且中国的商业火箭,听说也用的是Linux做主控。