Android车载学习笔记1——车载整体系统简介

news2024/10/6 20:33:57

一、汽车操作系统

        汽车操作系统包括安全车载操作系统、智能驾驶操作系统和智能座舱操作系统。

1. 安全车载操作系统

        安全车载操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求极高,生态发展已趋于成熟,其实时操作系统RTOS,主要应用对象是电子控制单元(ECU),嵌入式实时操作系统具有高可靠性、实时性、交互性以及多路性的优势,系统响应极高,通常在毫秒或者微秒级别,满足了高实时性的要求。

        目前,主流安全车载操作系统都兼容 OSEK/VDX 和 Classic AUTOSAR 这两类汽车电子软件标准。其中,Classic 平台基于 OSEK/VDX 标准,定义了安全车载操作系统的技术规范。

2. 智能驾驶操作系统

        智能驾驶操作系统主要面向智能驾驶领域,应用于智能驾驶域控制器,该类操作系统对安全性和可靠性要求较高,同时对性能和运算能力的要求也较高。基于 OSEK/VDX 和 Classic AUTOSAR 软件架构的安全车载操作系统已经不能满足未来自动驾驶汽车的发展需求,AUTOSAR 组织为面向更复杂的域控制器和中央计算平台的集中式电子电气架构推出 Adaptive AUTOSAR 平台。

        Adaptive AUTOSAR 定义采用了基于 POSIX 标准的操作系统,可以为支持 POSIX 标准的操作系统及不同的应用需求提供标准化的平台接口和应用服务,主要是为了适应汽车智能化的发展需求,不过,该类操作系统目前在全世界范围内日趋成熟,但生态尚未完备。

3. 智能座舱操作系统

        智能座舱操作系统主要为汽车信息娱乐服务以及车内人机交互提供控制平台,是汽车实现座舱智能化与多源信息融合的运行环境,对操作系统的实时性与可靠性要求并不严苛。

        主流车型的智能座舱操作主要包括QNX、Linux、Android等,传统智能座舱操作系统中QNX占据了绝大部分份额,近年来,智能座舱的娱乐与信息服务属性越发凸显,开源的Linux以及在手机端拥有大量成熟信息服务资源的Android被众多主机厂青睐,成为后起之秀。

二、车载操作系统

        汽车操作系统中的智能座舱操作系统不直接参与汽车行驶的控制决策,不会对车辆行驶性能和安全产生影响,通常统称为车载信息娱乐系统(IVI )。这也是 Android 程序员主要负责的领域,之后我们学习的重点所在。

1. 主流车载操作系统结构

                                                                                图1

        当前国内主流车载操作系统架构如图1所示,右侧是汽车的中控、副驾屏幕,操作系统一般是Android,左侧是汽车的仪表屏幕,一般是 QNX 系统。可对应图2理解,红框内是仪表嵌入式系统展示,黄框内是中控、副驾Android系统展示。

                                                                            图2 

 2. 车载系统分析

图3

        图3车载结构图中,红框内的架构与android手机系统相似,区别在于车载系统的大量Android系统Service(服务)会有所裁剪,并且增加了额外的大量专属车机Service(服务)。

        黄框为Native中间层,包含HAL(硬件抽象层)Android BSP(板级支持包),起到承上启下的作用。

        其中硬件抽象层是位于Android操作系统内核与图3中硬件系统之间的接口层,其目的在于将硬件抽象化。

        它隐藏了特定平台的硬件系统接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。

        HAL层是上层应用对底层硬件操作屏蔽的一个软件层次,就是上层应用不必关心底层硬件具体是如何工作的,只需要调用底层提供的统一接口即可。HAL层对接具体的硬件BSP接口,比如音视频接口、收音机接口、网络接口、spi接口等。

        板级支持包(BSP)(Board Support Package)是构建嵌入式操作系统所需的引导程序(Bootloader)、内核(Kernel)、根文件系统(Rootfs)和工具链(Toolchain) 提供完整的软件资源包。

        作为硬件抽象层的一种实现,板级支持包BSP(Board Support Package)是现有的大多数商用嵌入式操作系统实现可移植性所采用的一种方案。BSP隔离了所支持的嵌入式操作系统与底层硬件平台之间的相关性,使嵌入式操作系统能够通用于BSP所支持的硬件平台,从而实现嵌入式操作系统的可移植性和跨平台性,以及嵌入式操作系统的通用性、复用性。

        既然同属中间层,HAL层与BSP层有什么区别呢?

        可以试想一下,在大型项目开发中,若程序只有简单的函数封装,一旦硬件变动,我们将需要对BSP(板级支持层)进行大规模改动,无疑对程序的维护是一种巨大的负担。

        而引入HAL(硬件抽象层)的概念后,由HAL库对BSP库进一步的封装,形成统一的标准,下次再改动硬件电路部分时,我们就只需要改动BSP库的具体功能函数,而不需要对应用层进行任何的修改了。

        这就是分层思想的体现。

        继续往下就是绿色方框圈住的底层硬件及嵌入式系统了。

        其中,嵌入式系统一般采用的是QNX嵌入式系统,这是一种商业类Unix实时操作系统,主要针对嵌入式系统市场,系统采取微核心架构,其多数功能以小型的task来运行,它们被称为server,这样的架构可以让用户或开发者关闭不必要的功能,而不需要改变操作系统本身。

        QNX的应用十分广泛,被广泛应用于汽车、轨道交通、航空航天等对安全性、实时性要求较高的领域,在汽车领域的市场占有率极高。该产品开发于20世纪80年代初,后来改名为QNX软件系统公司,公司已被黑莓公司并购。

        图3左侧仪表上层应用也是通过QNX底层嵌入式系统来控制硬件的,不过QNX一般实现比较小型的功能,比如打开车窗,关闭空调等,不太适合用来制作漂亮的界面和复杂的操作等。

        因此,右侧中控台便加入了Android系统来进行界面的展示及人机交互功能的复杂操作。

        简而言之,Android车载系统可以看做是一个运行在 QNX 上的虚拟系统,其底层技术原理就是Hypervisor,一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。

        再往下,就到了硬件实现部分,让我们一起来研究一下,QNX嵌入式系统是如何实现控制硬件交互的吧。

        由图3可以看到与QNX系统交互的是SOC,那么什么是SOC呢?

        一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程,参看图4实物,高通骁龙8155SoC芯片。

图4 

        从狭义角度讲,它是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上;从广义角度讲,SoC是一个微小型系统,如果说中央处理器(CPU)是大脑,那么SoC就是包括大脑、心脏、眼睛和手的系统。

        车载SoC 和常见的手机SoC 非常类似,内部集成了 CPU 和 GPU 。

        目前最主流的车载 SoC 是高通的SA8155P(简称8155),它就是高通在手机SoC 骁龙 855 的基础上发展而来的。

        它采用7纳米工艺制造,具有八个核心,算力为8TOPS,也就是每秒运算8万亿次,它可以最多支持6个摄像头,连接4块2K屏幕或者3块4K屏幕,支持WiFi6,支持5G,支持蓝牙5.0。

        另外,8155相比820A还增加了NPU(神经网络处理单元),专门负责车辆AI计算部分任务,让CPU可以更专注于其他重要任务。

        我们知道MCU,微控制器单元,它负责着汽车很大一部分的功能,例如通过车载控制器对各项数据进行分析处理以做出最优决策;负责对车辆的信息娱乐交互和运动控制,如打开车窗,关闭空调等等,即,MCU可以应用于车辆的通讯、能源、存储、感知以及计算,对汽车行业有着重要作用。

        而SoC芯片集成了很多个MCU的功能,以前的由多个MCU协同干的事情被集成了,MCU没有了,取而代之的是对外的IO引脚,连接IO引脚就可以实现交互,完成以前MCU的功能。

        SoC通过SPI协议(串行外设接口)与MCU进行收发数据信号,MCU再通过CAN总线控制硬件执行动作,诸如打开车窗,关闭空调等。

        其中,CAN控制器局域网 (Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。 它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。

        CAN 是车载领域很重要的一种串行通信总线,我们在中控屏上可以随时查看、设置车门、发动机、后备箱这些模块,其实就是借助CAN bus实现的,即使是Android程序员也经常要和它打交道,之后会详细讲讲这个东西。

三、Android Automotive平台

        Android Automotive是通过 Android 的通用框架,语言和 API来实现的一个全栈,开源,高度可定制的平台。

1. Android Automotive与整个Android生态系统的关系

  •         Android Automotive 就是 Android 平台

        它不是Android的分支或并行开发,它与手机,平板电脑等安卓设备上的Android具有相同的代码库,并且位于相同的存储库中。 它基于经过10多年开发的强大平台和功能集,可利用现有的安全模型,兼容性程序,开发人员工具和基础架构,同时继续具有高度可定制性和可移植性,完全免费和开源的特点。

  •         Android Automotive 扩展了 Android 平台

        在将 Android 打造为功能完善的信息娱乐平台的过程中,我们增加了对汽车特定要求、功能和技术的支持。Android Automotive 将是一个一站式的车载信息娱乐平台,就像现在的 Android 系统之于移动设备一样。

2. Android Automotive 架构

 图5

        Android Automotive 是在原先Android的系统架构上增加了一些与车相关的(图5中虚线框中绿色背景的)模块:

        1)Car App :包括OEM和第三方开发的App
        2)Car API :提供给汽车App特有的接口
        3)Car Service :系统中与车相关的服务,主要基于CarProperty实现Vechile相关的策略
        4)Vehicle Network Service :汽车的网络服务
        5)Vehicle HAL :汽车的硬件抽象层描述,定义 OEM 可以实现的车辆属性的接口

        可参看图6,绿色为Android原生功能模块,蓝色为Android Automotive增加功能模块。

图6

四、车载应用

1. SystemUI

        即系统的UI 。

        SystemUI 是一个标准的 android 应用程序,它提供了系统 UI 的统一管理方案。 常见的状态栏、导航栏、消息中心、音量调节弹窗、蓝牙连接弹窗等一系列后台弹窗都是由SystemUI 模块负责管理。

        开发难度: SystemUI 作为 Android 系统启动的第一个带有 UI 的应用程序,对启动性能和稳定性都有很高的要求。 SystemUI 需要管理的模块非常多,导致开发任务比较繁重,有的车载项目会要求 SystemUI 兼容原有的应用层API ,那么开发难度还会上升。开发人员需要对 Android 原生的 SystemUI 源码有一定的了解。

2. Launcher

        Android系统的桌面。

        开发难度:Launcher 是与用户交互最多的应用程序之一,同样对启动性能和稳定性都有很高的要求。Launcher开发难度主要集中在与 3D 车模的互动(如果有 3D 模型),可能需要支持 Widget 的显示(WidgetHost ),各种应用的拖动和编辑等。开发人员最好对 Android 原生的 Launcher 源码有一定的了解。

3. Settings

        系统设置。

        是车载Android 系统中非常重要的一个系统级应用,是整个车载 IVI 系统的控制中心,整车的音效、无线通信、状态信息、安全信息等等都是需要通过系统设置来查看和控制。

        开发难度:系统设置主要难度都集中在对Android Framework 层 API 的理解上,例如蓝牙、 Wi-Fi 设置就需要开发人员对系统级API 有一定的了解,这些内容往往都需要阅读 Android 原生应用的源码才能了解,所以系统设置也是一个开发难度比较大的车载应用。

4. CarService

        车载Android系统的核心服务之一。

        所有应用都需要通过 CarService 来查询、控制整车的状态。例如:车辆的速度、档位、点火状态等等。

5. VehicleSettings

        车辆设置,更常用的叫法是“车控车设”。

        负责管理整个车辆内外设置项的应用,主要与CarService 进行数据交互。可设置项非常多。驾驶模式、方向盘助力、后视镜折叠、氛围灯、座舱监测、无线充电等等。

        开发难度:主要难度集中在复杂多变的UI ,有的主机厂商会在 HMI 中引入 3D 化的交互模型,就还需要考虑与3D 模型间的通信,同时还需要熟练运用 CAN 工具来模拟汽车的 CAN 信号用于调试和开发。

6. HVAC

        空调。

        负责管理整个车辆空调的应用,主要与CarService 进行数据交互。

        开发难度:和『车控车设』类似。

7. Map

        地图。

        车载系统的核心功能之一,负责导航和语音提示等功能。不同的主机厂商有不同的开发方式。不外乎有三种:

        1)选择使用百度、高德的地图 SDK 自行开发导航应用;
        2)将导航模块外包给百度、高德,由地图供应商进行定制化开发;
        3)直接集成地图供应商已有的车载版本的应用;

        开发难度:主要集中在对地图SDK 的运用和理解上,而且地图应用属于对性能要求较高的模块。

8. Multi-Media

        多媒体应用。

        一般包含图片浏览、在线音视频播放器、USB 音视频播放器、收音机等。
车载的应用远不止以上说得这些,根据不同的需求,还有非常多的 Service 需要做定制化开发,这里只列 举了最常见的应用类型。

        汽车上还会有一些第三方的应用,常见的有QQ 音乐、微信、 QQ 、抖音、讯飞输入法等等,这些应用主机厂商不会获得源码,一般只会拿到一个apk ,直接集成到 Android 系统中即可。

参考资料:

【Android车载系列】第1章 车载系统整体介绍_android 车载___Yvan的博客-CSDN博客

soc(系统级芯片)_百度百科

芯片,SOC和MCU区别;裸机和带系统_soc mcu_Xueqian E的博客-CSDN博客

SPI(SPI协议)_360百科

车机系统开发——Android Automotive - 简书

汽车操作系统,你了解多少?

智能座舱SoC生命周期短,一代网红芯片高通8155是如何炼成的?_搜狐汽车_搜狐网

高通骁龙 8155 到底有什么魔力?_高通8155_aFakeProgramer的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VCSA 和ESXi 6.7.0版本升级

1. VCSA升级步骤 1)指定升级包的位置 software-packages stage --iso (如果是从vmware下载补丁,使用CD/DVD来映射ISO映像) 或 software-packages stage --url https://vapp-updates.vmware.com/vai-catalog/valm/vmw/8d167796-34d5-4899-be0a-6daade400…

Yolov8涨点神器:注意力机制---多头上下文集成(Context Aggregation)的广义构建模块,助力小目标检测,暴力涨点

🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新 🚀🚀🚀小目标、遮挡物、难样本性能提升 🍉🍉🍉定期更新不同数据集涨点情况 2.Context Aggregation介绍 论文:https://arxiv.org/abs/2106.01401 仅…

落地页设计的营销心理学(二)

作为一个营销落地页的设计者,最关注的问题:怎么样设计才能让我的落地页有转化? 当然这可能有很多影响因素。但是,你有没有想过在用户打开落地页时,运用心理学概念留住他们,促使他们完成留资、下载、购买等动…

听我一句劝,不要去外包,干了三年,废了....

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Python实战基础12-闭包

1、函数的嵌套调用 def testB():print(-------testB start------)print(这里是testB函数执行的代码……)print(-------testB end ------)def testA():print(-----testA start-----)testB()print(-----testA end------) testA() 运行结果: 总结: 一个函…

PoseiSwap 参赛,参与斯坦福、Nautilus等联合主办的 Hackathon 活动

近日,由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的“ Boundless Hackathon Stanford ” 主题的黑客松活动,目前已接受报名。该活动旨在帮助更多的优质开发者参与到 Web3 世界的发展中,推动链…

顶满,阿里P8架构师独家分享的微服务实战笔记

微服务简介 简而言之,微服务架构风格是一种将单个应用程序开发为“一套小型服务”的方法,每个服务“运行在自己的进程中”,并通过轻量级机制(通常是HTTP资源API)进行通信。这些服务“围绕业务功能构建”,并通过全自动部署机制“独…

Cortex-M0的内核架构

目录 Cortex-M 系列产品线 Cortex-M0结构框图 Cortex-M0特性 Cortex-M0工作模式 Cortex-M0工作状态 Cortex-M0的寄存器 Cortex-M0的中断和异常 Cortex-M0的指令集 Cortex-M 系列产品线 Cortex-M系列是由ARM(Advanced RISC Machines)开发的一系列…

宁德时代,冷暖自知口难言

作者 | 魏启扬 来源 | 洞见新研社 发布可以“上天”的凝聚态电池、落地能量密度160Wh/kg的钠离子电池、量产系统集成度全球最高的麒麟电池…… 宁德时代在上海车展前后密集发声,坚决捍卫着“宁王”的冠冕。 如果再结合不久前的2022年年报,全年307亿的…

六级备考23天|CET-6|写作技巧1|开头段模版

目录 1 考前注意事项 2 真题参考 3 六级作文三段式 第一段 第二段 第三段 4 名言解释型作文 5 开头段的模版 why 型 6 选择型开头模版 7 国内学校/出国读书 8 团队精神和交流 9 作业 10 抽象意志品质类开头 ​ 11 信任的重要性​ 1 考前注意事项 定位错误 常识干扰 拼凑…

【必读】解密Redis主从同步问题,避免数据不一致!

大家好,我是小米,一个热爱技术的程序员。今天,我要和大家聊一聊Redis中常见的一个问题——主从不一致。作为一款高性能的键值存储系统,Redis主从架构在分布式场景中被广泛应用。然而,由于Redis的特性以及配置不当等原因…

大内存分页用在什么场景下?

此内容可以作为你积累高并发处理技能的一个小小的组成部分。挖掘虚拟内存和内存管理单元更底层的工作原理,以及了解转置检测缓冲区(TLB)的作用。 了解如何通过内存,提升你的程序性能。什么情况下使用大内存分页? 这道…

【四】设计模式~~~创建型模式~~~建造者模式(Java)

【学习难度:★★★★☆,使用频率:★★☆☆☆】 4.1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件…

【Web服务器集群】企业化架构部署

文章目录 前言一、LMAP架构介绍1.概念2.LAMP构建顺序3.LAMP编译安装4.各组件介绍4.1 Linux4.2 Apache4.3 MySQL4.4 PHP/Perl/Python 二、服务器部署1.Apache部署2.MySQL部署3.PHP部署4.安装论坛 前言 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整…

案例分享 | 纽扣电池石墨片厚度及缺陷检测

石墨片是一种导热散热材料,质轻柔软,能够轻松贴合在各种热源点,在新能源、航天、3C电子等领域应用广泛。 汽车钥匙中的纽扣电池也需要使用石墨片,石墨片会有统一的厚度标准,装配过程中表面不可避免地会出现裂纹、划痕…

数据结构与算法—排序算法篇

目录 1、选择排序 1.1、算法思想 1.2、步骤 1.3、算法实现 1.4、算法分析 2、 冒泡排序 2.1、算法思想 2.2、算法实现 2.3、算法分析 2.4、改进冒泡排序 3、插入排序 3.1、算法思想 3.2、算法实现 3.3、算法分析 4、希尔排序 4.1、算法思想 4.2、增长量选定规…

Auto-GPT 迈向智能体的第一步——从信息增强和上下文理解开始

Auto-GPT 的出现,意味着 AI 已经能够在没有人工干扰的情况下独立地完成目标任务。这个在 GitHub 中不断创造历史的项目,正以惊人的速度发展着、变化着。 这样前沿又带有科幻色彩的技术项目,引起了各方关注,开发者、投资人、媒体人…

《操作系统》by李治军 | 实验5.pre - switch_to 汇编代码详解

目录 【前言】 一、栈帧的处理 1. 什么是栈帧 2. 为什么要处理栈帧 3. 执行 switch_to 前的内核栈 4. 栈帧处理代码分析 二、PCB 的比较 1. 根据 PCB 判断进程切换与否 2. PCB 比较代码分析 三、PCB 的切换 1. 什么是 PCB 的切换 2. PCB 切换代码分析 四、TSS 内核…

ChatGPT再起争端,如何应对未来的机器挑战?速来学习解决方法!

AI孙燕姿事件 前些日子,“AI孙燕姿”一度火爆出圈。其实就是有网友使用人工智能技术,利用神似歌星孙燕姿的声音翻唱了不少歌手的代表作,并上传到社交平台上,而其翻唱作品的逼真程度是“甚至换气声都可以模仿”。随着“AI孙燕姿”翻…

你还不会AVL树吗?

AVL树 AVL树概念AVL树的插入结点定义插入流程左单旋右单旋左右双旋右左双旋 验证AVL树 AVL树概念 🚀AVL树是一颗平衡的二叉搜索树,所谓平衡是指左右子树的高度差的绝对值不超过1。所以一颗AVL树(如果不是空树)有以下性质&#xf…