做视频的主要目的,其实是锻炼我自己的总结以及说话的能力,如果这个系列的视频对各位有所帮助,那也是非常值得开心的一件事了。
本视频是《车载Android应用开发与分析》的第一篇,走进车载操作系统。
由于受我个人能力所限,视频内容会不可避免的存在一些错误,如果你对视频内容有不一样的看法,欢迎发送邮件(linxu_link@foxmail.com)给我,我会尽快核实并改正的。
好了,话不多说,咱们进入正题。
首先,我们来看一则最近的新闻,根据CounterpointResearch的调研,2022年中国智能手机销量同比下降高达14%,达到了近十年来的最低水平。
这里我们要明白一点,手机出货量的下降预示一些原本做手机硬件或软件的公司,为了求生存他们不得不把目光转向技术跨度不大,且目前还能维持增长的领域,那么这个领域其实就是汽车。
那么车载Android开发的前景究竟怎么样呢?来看一张图,这就是大名鼎鼎的ChatGPT的回复。
ChatGPT对车载Android开发的未来,是非常看好,不过,我个人其实并不赞同!
2011年移动互联网开始起步,当时的应用开发十分火热,但是没过多久应用开发就开始走向下坡,作为一个见证了移动互联网兴衰的人,同时身处各大车企价格战的年代,我已经很难再说车载Android开发的前景是非常光明的了。
例如:理想汽车的CEO不久前接受采访时就说过:“2023年到2025年是极为残酷的淘汰赛,不需要那么多公司。”这意味着,对接下来市场竞争的残酷性,各个车企的参与者们已经普遍有比较清晰的认知了,而特斯拉年前的大降价,无疑会进一步加剧事态的严重性。
当然这里要强调我个人不想贩卖焦虑也不卖课,以上说明只是希望准备转行的同学要慎重考虑清楚,已经在从事车载Android开发同学还是要有一定危机意识的。
好,我们还是要回到视频的重点车载Android应用开发与分析上来。在开发车载Android应用之前,我们需要对目前汽车使用的操作系统有一定的认识。
那么我们首先需要了解的就是,什么是车载操作系统?
在讲车载操作系统之前,我们需要先来认识一下另一个东西——车用操作系统。
车用操作系统是一个偏学术的用语。2019年10月,全国汽车标准化委员会发布了《车用操作系统标准体系》,其中规范了车用操作系统定义,明确划分了车用操作系统包含两个子系统,车控操作系统和车载操作系统。
首先我们来看车控操作系统。
车控操作系统分为安全车控操作系统和智能驾驶操作系统,其中:
安全车控操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求很高,生态发展已趋于成熟了。
智能驾驶操作系统主要面向智能驾驶领域,应用于智能驾驶域控制器,该类操作系统对安全性和可靠性要求较高,同时对性能和运算能力的要求也较高。该类操作系统目前在全世界范围内都处于研究发展的初期,生态尚未完备。
然后我们再来看车载操作系统。
车载操作系统主要面向信息娱乐和智能座舱,主要应用于车机中控系统,对于安全性和可靠性的要求处于中等水平,该类操作系统发展十分迅速,依托于该类操作系统的生态也处于高速发展阶段。
由于本视频主要还讲解Android车载应用的开发与分析,所以车控操作系统就不再深入介绍了,感兴趣的朋友可以在本视频的GitHub仓库中查找“车控操作系统架构研究报告”进行学习。
下面我们来继续介绍车载Android工程师,主要工作的领域,就是车载操作系统的现状是怎样的。
目前,应用于车载领域的操作系统包括有QNX、Linux/AGL、RT-Linux、AliOS、AliOSRT、Android和鸿蒙OS等。
车载操作系统从功能角度可分为,非实时操作系统和实时操作系统。
从应用的角度又可分为,用于中控的车载操作系统,用于仪表的车载操系统和用于T-box的车载操作系统。
下面这张表格展示了当前各大主流汽车厂商所搭载的车载操作系统。
目前国内的汽车企业,仪表一般采用QNX或Linux系统,中控则多数采用Android系统,T-box则基本以Linux系统为主,也有少部分使用QNX系统。
接下来我们就逐个介绍一下这些常见的车载操作系统。
QNX最初应用在仪表上的,是第一个符合ISO26262ASILD规范的实时操作系统,它能满足数字化仪表盘功能性安全的要求,同时也满足数据安全要求,通过了美国军方的EAL4+,目前是QNX由黑莓公司持有。
QNX的应用范围非常广,从汽车到核电站、以及无人作战坦克的控制系统都有涉及。
但是,Linux内核复杂度较高,LinuxV4.19的内核代码有一千七百多万行,而且还在持续增长。正因如此,在安全性和启动速度等方面,Linux要落后于QNX。针对汽车的应用场景,AGL(AutomotiveGradeLinux)和GENIVI都在极力打造Linux生态系统,以加速Linux在车载系统上的应用。
AliOS是阿里巴巴发布全新的品牌,整合了原先的AliYunOS移动端业务,主要面向汽车、IoT终端、IoT芯片和工业领域的物联网操作系统。
AliOS车载操作系统基于Linux内核,具备自主知识产权,支持多个类型的端设备,除了具备最基础的进程、线程调度等功能外,还支持定位和地图、辅助驾驶、轻量化的车载语音智能等服务,可连接AIoT设备2.72亿+,提供5200+实用AI技能和3亿+生态资源,为智能汽车、数字交通和产业数字化三类解决方案提供技术基础。AliOS车载操作系统架构主要包括AliOS核心系统、数据服务平台以及工程化支持平台三大部分。
AliOS核心系统主要实现Linux内核、设备驱动、内核安全、多核实时调度、硬件抽象、基础库、图形处理、多媒体框架、电源管理、网络连接、安全管理、云应用管理和运行时环境等功能;数据服务平台提供基础服务、核心云服务以及车云互联的服务;工程化支持平台基于开放的车辆服务融合平台和云测平台,提供开发、测试、服务接入为一体的车载应用和服务生态
目前上汽的荣威以及智己等车型均有搭载AliOS。
Android车载操作系统基于Linux内核,主要功能模块集中在用户空间,在Linux内核中仅增加了用于进程间通信的Binder和用于内存共享的ION,其突出优点是应用生态。Android应用程序在Android虚拟机里是解释执行的,相对于编译执行来说,执行效率较低。
Google于2019年开放了AndroidAutomotive,原本为移动互联设备开发的Android应用生态可迁移到AndroidAutomotive。
目前,Tier1和车企多数都是基于Android自研车载操作系统。
车载的鸿蒙OS是华为研发的一款面向全场景的分布式操作系统,目标是提升操作系统的跨平台能力,包括支持全场景、跨多设备和平台、低时延和高安全性。
鸿蒙系统包括三层架构:第一层是内核,第二层是基础服务,第三层是程序框架。
鸿蒙车载操作系统Harmony是通过一芯多屏、多并发、运行时确定保障等能力,满足出行场景需要,具有“多用户,多外设,多联接”的特点,定义了HMS-A(HMSforAuto,包括:语音、音效、视觉、AI等7大核心能力)、12个车机子系统和500多个HOS-CAPI,支撑OEM、合作伙伴、第三方应用快速开发、持续升级。
围绕鸿蒙OS的争议非常多,这里我不做任何评价。不过2023年前我阅读了一份由中汽创智发布的《2022年智能座舱年度报告》,其中对于问界M5搭载的鸿蒙OS的流畅度评价非常高,而且我们还要认识到一点麒麟990A是一款28nm制程的芯片,其综合性能是逊于7nm制程的8155芯片。在硬件性能劣势的情况下,问界M5的车机流畅度依然达到了顶级,相信这其中鸿蒙OS一定起到了功不可没的作用。
车载操作系统架构可分为单系统架构和多系统架构。两类架构都可实现一芯多屏(多屏融合、多屏互动)、单屏多系统(虚拟运行环境、多应用生态融合)、一芯多功能(信息娱乐、T-box等)。
先来看单系统架构。
单系统架构,它由车载操作系统内核、资源抽象层、基础库、基础服务、运行时环境、程序运行框架和车载操作系统安全模块组成,对底层硬件和上层应用程序提供统一的接口,这样就能实现车载操作系统与硬件和上层应用程序间解耦。
多系统架构是同一套硬件上运行多个车载操作系统的架构,技术上可分为硬件隔离、虚拟机管理器、容器三类多系统基础架构,以及两类或三类基础架构组合成的混合架构,用于满足不同功能、性能和安全的隔离需求。
有关单系统架构和多系统架构的详细实现,作为应用开发者我们不需要过多关心,有兴趣的同学可以阅读《车载操作系统架构研究报告》中的有关章节,进行进一步学习。
接下来我们来看,目前较为主流的车载操作系统架构是什么样子的。
T-Box又称TCU,是汽车上独立于主机之外的一个硬件,英文叫TelematicsBox(远程通信终端),它有一套独立的操作系统一般是Linux系统,它里面内置了一张SIM卡,与这个盒子配套的硬件还有GPS天线,4G/5G天线等等,量产后的汽车要实现联网功能必须有T-Box设备才能可以。
这里额外提一嘴,UP是17年大学毕业19年开始从事车载Android应用开发的,出于个人兴趣的原因,我现在其实是在做T-Box也就是Linux应用的开发,所以做“车载Android应用开发与分析”这个系列的视频也可以看做是我个人在工作之余,为了继续保持Android开发能力的一种行为。
以太网(Ethernet),是一种计算机局域网技术。也是移动应用开发者,天天都会打交道的东西。在汽车座舱中硬件间的相互通信有时需要借助以太网来实现,例如:Tbox与车机与中控系统间的通信就是基于以太网实现的。
它常用的通信协议有MQTT、HTTP以及SOME/IP等等。
控制器局域网(ControllerAreaNetwork,简称CAN或者CANbus)是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。例如一些超市的电动卷闸门控制系统,也有使用CAN进行通信的。
CAN是车载领域很重要的一种通信总线,我们在中控屏上查看、设置车门、发动机、后备箱这些模块,其实就是借助CANbus实现的,即使是Android程序员也经常会和它打交道。
SoC的定义非常多,一般可以理解为单片系统或片上系统,是一个将电脑或其他电子系统集成到单一芯片的集成电路。更通俗的来讲,我们可以把它理解为CPU+GPU的一种嵌入式芯片组合。
车载Soc和手机Soc基本类似。目前最主流的车载Soc是高通的骁龙8155芯片,下一代的8295芯片也由集度汽车实现了首发,鸿蒙座舱的Soc多数是使用华为的麒麟990A芯片,不过也有车企开始更换为双8155的芯片组合。
单片机,全称单片微型计算机,又称微控制器单元(microcontrollerunit),是把中央处理器、存储器、定时/计数器(timer/counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。
常见的车机开发板上一般同时包含一个SOC和一个MCU,二者之间通过串口通信,协同工作。SOC擅长处理多媒体信息,负责渲染用户界面以及控制音视频播放等等。MCU的性能比较差,但是相对的功耗很低,实时性好,负责电源和车辆的信号控制。
虚拟机管理器,是一种运行在硬件层和操作系统之间的中间软件层,是用来创建与执行虚拟机的软件。
Hypervisor包含两种类型,裸机型和宿主型。
裸机型Hypervisor最常见,直接安装在硬件资源之上,操作系统安装并运行在Hypervisor之上。
目前常见的虚拟机管理器就包括有黑莓的QNX和英特尔的ACRN等等,还有很多。
宿主型,又称基于操作系统的虚拟化。将虚拟化层安装在主机操作系统中,虚拟化软件以应用程序进程形式运行在主机操作系统中,而主机操作系统运行在物理硬件之上。
这张图继续往上的这一部分就是本系列视频的重点了-车载Android系统。
车载Android系统也被称为AndroidAutomotiveOS,是对原始Android系统的一个功能扩充版本。与手机系统一样,AndroidAutomotiveOS源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与Android系统保持了一致。
与Android手机上的google服务类似,google在汽车上也提供了用于汽车的google汽车服务(GAS,Googleautomotiveservice),包含有google地图、应用市场、google汽车助理等等。google汽车服务同样没有开源,而是以软件包的形式提供给制造商。
这里需要注意,由于汽车厂商间的差异化竞争日渐加剧,目前国内汽车搭载的Android系统与标准的AndroidAutomotiveOS无论是架构层还是应用都已经存在较大的差别了。
说了那么多AndroidAutomotive的架构那么它和Android之间难道没有区别吗?
首先,还是要强调AndroidAutomotive基于Android平台打造的,它并不是Android的分支或并行开发版本。它与手机、平板电脑等设备上搭载的Android系统使用同样的代码库,在Android上可以运行的应用同样可以在AndroidAutomotive上运行。
图中绿色部分是Android原生的代码,蓝色部分是车厂需要修改或添加功能的代码,紫色部分是集成的第三方应用。不过在国内实际开发中,无论是绿色还是蓝色部分,我们都会根据需要进行修改和裁剪。
系统应用,系统应用是为了操作系统能正常、高效工作所配备的各种管理、监控和维护系统的程序。例如:SystemUI、Luancher、系统设置。
厂商应用,由主机或车厂开发、集成的应用,基本功能都是与车辆有关。例如:用户手册,电源管理、车辆设置等。
汽车供应商招聘Android应用开发者,实际上就是为了开发这些系统应用和厂商应用,这些应用的实现细节将会是我们以后一起学习的重点。
第三方应用,在车机中集成各种第三方软件公司开发的APP。一般以音视频娱乐类为主,例如:哔哩哔哩、爱奇艺等。部分厂商的车机系统中还附带了应用商店,用户也可以在其中选择下载自己需要第三方应用。
用于实现上层应用与SystemService通信的接口。
系统服务,不必多说是Android系统的核心模块,支持着Android系统的正常运行。
用于实现上层应用与CarService通信的接口。
传统Android硬件抽象层,就是对Linux内核驱动程序的封装,向上提供稳定的接口,屏蔽底层的实现细节,同事还有有规避Linux内核开源协议的作用。
汽车硬件抽象层,这是车载Android系统新增的硬件抽象层,它的作用使用定义标准接口,让CarService可以忽略各个汽车厂商的具体实现,也就是说CarService负责调用VehicleHAL定义的接口,而AndroidAutomotiveOS中VehicleHAL并没有具体的实现细节,所以VehicleHAL需要汽车制造商或芯片厂商来实现。
但是说到底,我们从事车载应用开发的程序员还是要多了解车载应用,所以最后我们再看一下,常见的车载Android应用有哪些。
系统界面,在Android中也是一个标准的APK应用程序,用来显示一些不属于应用程序的交互界面。
常见的状态栏、导航栏、消息中心、快捷设置、音量调节弹窗、蓝牙连接弹窗等一系列界面都是由SystemUI模块负责管理、显示的。SystemUI中的大部分组件都与framewokservice存在耦合。是车载应用开发中需要重点定制的项目。
该应用通过SystemServer启动。
桌面启动器,桌面启动器是帮助用户查找和启动其他应用程序的软件。主要负责摆放小部件,显示其它应用程序入口。
现代智能座舱的HMI在设计上,开始赋予Launcher越来越多的功能,例如:显示3D的车辆模型、地图定位等等。
该应用由SystemServer进程下的ActivityManagerService启动。
系统设置是操作系统中非常重要的一个系统级应用,能够使用户能够改变操作系统的状态和行为。
系统设置是整个IVI(车载信息娱乐系统)的控制中心,车辆的音效、无线通信、状态信息、安全信息等都是需要通过系统设置来查看和操作。
目前的车载收音机包括传统的模拟信号收音机和现代化的数字信号收音机,根据销售国家的不同,车载收音机支持的种类也有所不同。
AM/FM
最常见的模拟收音机制式,AM-调幅收音机,FM-调频收音机。在不同国家和地区,频率范围有一定的差别。
RDS
无线电数据广播(英语:RadioDataSystem,RDS)是一种在传统的FM广播中嵌入少量的数字信息的通信协议标准。它在发射信号时可以利用副载波将电台名称、节目类型、节目内容及其它信息以数字的形式发送出去。
DAB及DAB+
数字信号广播(DigitalAudioBroadcasting简称DAB)是继AM、FM传统模拟广播之后的第三代数字信号广播,它提供了接近CD质量的声音,具有抗噪声、抗干扰、抗电波传播衰落、适合高速移动接收等优点。目前主要应用于欧美和香港等地区
除此以外还有HDRadio、SXMRadio等较为少见的收音机制式。
音视频播放属于车内驾驶体验的不可缺少的一部分,现代汽车的音视频播放功能主要用于播放SD卡或U盘中的离线音视频文件,在线音视频播放功能基本都集成第三应用实现。
实际开发中我们基本上使用MediaPlayer或ExoPlayer即可。
车载地图导航与手机地图导航相比,一般都会调整界面以方便驾驶员观察,并且都增加了惯性导航功能,现代智能座舱还支持将导航信息输出到仪表盘和HUD(抬头显示)中。
早期的汽车座舱由于受网络限制,并不支持在线更新地图,一般会有4s店进行离线的地图更新。随着移动互联网的发展,当代的智能座舱已经支持在线更新地图并提供实时路况功能。
国内知名的车载地图导航供应商有,高德、百度和腾讯等。
语音技术在我们的日常生活已经随处可见,汽车可以说是语音技术应用的最佳案例之一。
驾驶过程中驾驶员很难像使用手机那样操作车机系统,语音控制技术的引入可以帮助驾驶员在不额外分心驾驶的基础上,完成各类车辆操控。
目前国内语音供应商非常多,主要有科大讯飞、百度、腾讯、华为等等。
车控应用主要包含车载空调应用与车控车设应用。
车载空调用于调节车内温度、湿度,给乘员提供舒适的环境。除了基本空调功能外,高级的空调系统还包含,空气净化、香氛系统等等。
车控车设主要负责舒适性控制、车辆控制以及智能驾驶。舒适性控制包含座椅通风、座椅姿态控制、车内照明、门窗开闭等等,车辆控制包含刹车辅助、车身姿态控制、方向盘助力等等。
车控车设的功能与整体的车辆设计有很大关系,以往不同车辆之间差异较大,但是随着智能座舱的发展,车控车设也出现了同质化的趋势。
辅助驾驶的应用有很多,Android开发者需要重点了解的是倒车影像和全景影像,其他的辅助驾驶功能一般会集成在车控车设应用里面,当然也有一些是独立存在的,这与各个汽车制造商对产品的定义有关系。
首先我们来看倒车影像。
倒车影像是驾驶辅助系统中的一个重要配置项,在车辆倒车时可通过装备在车辆后方的摄像头,将车后状况实时显示在中控或后视镜的显示屏上,方便驾驶员观察。
倒车影像需要覆盖倒车辅助线,倒车辅助线用于驾驶员判断车辆行驶过程中的轨迹和车辆与物体的距离,通常分为静态倒车辅助线和动态倒车辅助线。动态倒车辅助线的线条会随着方向盘转动而转动,从而准确的描出倒车的轨迹。
360全景影像又称全景泊车系统,是2005年后逐渐出现的一种泊车辅助技术。早期泊车辅助系统常采用雷达或单摄像头,使用声音报警或显示车辆后方摄像头视频图像的方式,帮助车辆驾驶员判断盲角处车辆与障碍物距离。采用雷达报警方式,距离的显示并不直观;采用后置摄像头方式,则仍会存在盲角和距离判断不准的问题。于是逐渐兴起了全景泊车技术。
这种技术方案里面,车辆装备4个广角鱼眼摄像头,分别位于车前、车后和两个倒车镜内,可以完整采集车辆四周的影像。四幅影像通过Soc中的DSP或GPU进行拼接,最终将4路视频图像合成为一幅完整的鸟瞰图。也有的方案是使用外部硬件对图像进行图拼接,这样输出到Soc里的画面就已经是拼接好的了。
CarPlay是苹果公司推出的一种车载服务应用,苹果手机连上支持carplay的车机后,车机系统界面就会出现手机上的地图和音乐等应用,手机上只要适配了carplay功能的应用,都可以在车机屏幕上直接使用。
CarPlay的市场占有率一度超过50%,但是随着智能座舱系统的崛起,虽然现在依然是应用范围最广的车辆互联方案,但是它的市场占有率正在逐年下降,目前已经不足30%。
AndroidAuto与Carplay类似,是google公司推出的车辆互联方案,通过把手机应用界面投射到车载系统上,来取代汽车制造商的原生车载系统来执行Android应用与服务。
由于AndroidAuto依赖Google服务,所以在国内几乎无法使用,目前国内销售的汽车很少会支持AndroidAuto。
AndroidAuto和AndroidAutomotive两者的命名方式虽然可能有点让人迷惑,通俗讲,AndroidAutomotive是一个完整的车载操作系统,而AndroidAuto是运行在Android系统上的一个服务于车辆的超级APP。
CarLife是百度在2015年推出的车联网解决方案。和CarPlay和AndroidAuto产品相比,CarLife的用户不用在意自己的智能手机是什么操作系统,只需要通过数据线或者wifi将手机连接到车载系统上,就可以使用。
除了以上三种方案,车辆互联方案还有华为的HiCar以及小米的CarWith等等。
以上就是本次视频的全部内容,由于是第一次做视频内容,文字经验上还是比较欠缺的,录音效果也不是很好,随着经验的逐渐积累希望以后能越做越好吧。