基于Android的车载操作系统
文章平均质量分 82
本专栏为Android Automotive开发系列博客,包含了从上层到底层,从开发平台、车机系统到车载应用程序开发的各种开发方法的分享,并实现一些简单demo,方便读者入门,降低车载应用程序开发门槛。
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
零纳秒科技
校园到职场,做过室内设计;WEB前后端,APP,嵌入式,LinuxAndroid,ChromiumOS,YunOS,智舱OS等开发。
行业遍及互联网,手机,IOT,汽车。
合作品牌如华为,中兴,OV,小米,三星,谷歌,联想,诺基亚,魅族,上汽,大众,腾讯,百度,网易,LG、HTC,沃达丰,AT&T,中移动,中国电信。
职业规划为操作系统方向,涉及不同框架、方案架构设计开发,可维可测,全维度的工程化;
目前主要涉及Android产品从App、FWK、HAL、Kernel、QNX全链路的垂直工程化,以及跨域产/研/测/项目/互联网产品的横向工程化;
展开
-
基于Android的车载操作系统 目录
目录原创 2022-09-05 22:51:18 · 5052 阅读 · 4 评论 -
【系统稳定性】1.6 黑屏(三)
qnx是目前座舱方案中主流的存在,如果qnx存在异常会导致host或la或其他娱乐世界offline。那么导致qnx的原因有很多,相应地,我们也有很多的排查手段。座舱方案中目前还是多域的设计,那么多域之间的连接主流是以太网,我们可以通过其他域以太网访问SOC的方式来排查,qnx是否online。如ping xxx.xxx.xxx.xxx。qnx启动异常,有可能是卡在xbl,也有可能卡在qnx的内核初始化或系统初始化等。我们可以通过串口日志的输出来进行判断,当前qnx处于什么状态。原创 2023-11-18 22:39:50 · 2538 阅读 · 0 评论 -
【系统稳定性】1.5 黑屏(二)
上一篇对常见的黑屏现象和类型做了简单的描述,其实大多数情况根据这些描述就可以大概地定位出哪一部分的问题,这对我们进行下一步的分析有很大的帮助,否则路走偏了,只会距离目标越来越远,耽误自己的时间不说,想想KPI,想想年终的那仨瓜儿俩枣。对于做系统稳定性研发的同学来说,名下的bug分析到最后大多是需要某一路神仙过来领走的,遇到喜欢扯皮的领主,你需要拿出铁证出来。总之,稳定性问题不会百分之一百消灭掉,我们要做的就是做好监控,做好workround,降低概率。原创 2023-11-18 16:44:10 · 1994 阅读 · 0 评论 -
【系统稳定性】1.4 黑屏(一)
黑屏是最最常见的问题,也是工程化过程中高发的稳定性问题。它作为稳定性问题消解的重中之重。它和重启一样会给用户带来极差的体验,甚至会直接导致产品上市价值锐减。对于当前风口上的新能源汽车智能化,除了影响娱乐体验,黑屏对于行车安全也是极大的威胁。对于智舱中Q+LA,仪表娱乐共屏的方案,从用户视角来将,黑屏还有全黑和半黑之分。半黑包括主驾仪表黑屏和副驾娱乐黑屏。原创 2023-11-11 17:15:52 · 2173 阅读 · 2 评论 -
【系统稳定性】1.3 异常重启
导致异常重启的原因有很多,以QNX +LA方案为例,由上至下,重启可分为以下几种:Android ART虚拟机重启:指内核没有异常,只是zygote,systemserver,surfaceflinger等服务异常重启导致。LA(Linux Kernel)重启:指内核检测到了异常,导致重新执行所有开机启动流程,从bootloader开始,init进程会重新执行;QVM(GVM)重启:指qvm启动异常,或功能异常导致的,常见的如镜像损坏,配置错误,关联的关键服务异常,驱动程序异常,以及狗复位等。原创 2023-11-11 16:13:20 · 2090 阅读 · 2 评论 -
【系统稳定性】1.2 问题矩阵
项目在研发过程中常常遇到的稳定性问题往往来源于如暴力测试、研发自测、测试复现、场测路试问题、老化(如Monkey等)问题、Beta测试、产线生产问题,用户舆情反馈等。原创 2023-01-29 22:09:47 · 2371 阅读 · 0 评论 -
【行业篇】六、一张图带你快速了解座舱系统功能布局
座舱系统是智能汽车的灵魂,而“智能”则是其核心,全量的功能布局和应用娱乐生态是必不可少的,下面一张图来简单了解下。原创 2022-11-25 22:08:10 · 2293 阅读 · 0 评论 -
【系统稳定性 - 调优】3.4 常见Binder相关异常调优总结
binder通信是Android特有的一种通信机制,常见binder相关的异常包括卡binder对端处理超时,binder本端处理超时(导致主线程block)以及binder耗尽三类问题。无论是应用,Framework,Hal中间件,还是BSP驱动,熟悉这三类binder相关case的调试和分析,能够帮助我们快速地找到和解决问题。原创 2022-09-19 22:23:10 · 4956 阅读 · 0 评论 -
【系统稳定性 - 测试】2.2 谈谈Monkey老化测试场景的ANR问题分析
Monkey 测试,就像一只猴子在屏幕上随即点击测试。Andoird通过 Monkey 向系统发送伪随机的用户事件流(点击、滑动、 Application 切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试,检测程序 多久的时间会发生异常。monkey 测试为了测试软件的稳定性而生,在有些公司称之为老化测试。原创 2022-09-17 12:09:12 · 3359 阅读 · 0 评论 -
【系统稳定性】1.1 日志矩阵
因为无论是Android,还是Linux或QNX我们都只是系统的使用者和维护者,即便是二次开发,我们能够重构的架构也很有限;因此系统本身的日志埋点对我们快速定位和解决问题有很大的帮助。原创 2022-09-14 23:16:30 · 2706 阅读 · 0 评论 -
【LMKD】十一 有问有答 - FAQ
这部分主要是记录下调查lmkd过程中想到的几个疑问原创 2022-09-06 22:34:27 · 3128 阅读 · 1 评论 -
【LMKD】十 lmkd进程查杀配置
通过前面的笔记,我们了解到,KLMKD切换到ULMKD后,有两种查杀策略。一种是初始的Vmpressure,一种是PSI。原创 2022-09-12 11:01:21 · 3832 阅读 · 0 评论 -
【LMKD】九 lmkd进程查杀规则
无论前面是psi还是vmpressure,都是通过各自监视器注册epoll监控节点;当有内存压力事件上报后,会通过处理事件为mp_event_common(psi如果不选择use_new_strategy),确定最低优先级查杀的min_score_adj,最后再走到真正的查杀流程,也就是find_and_kill_process(),接下来我们来看下,一个进程是如何在内存压力事件下被成功杀掉。原创 2022-09-08 23:24:40 · 3490 阅读 · 0 评论 -
【LMKD】八 通过填充内存触发lmkd查杀
介绍下内存填充的方法,以及lmkd触发的日志参考;原创 2022-09-04 19:42:40 · 3275 阅读 · 0 评论 -
【LMKD】七 AMS与LMKD
当进程状态发生变化时,如Activity执行onStop()生命周期函数从前台进程变成后台进程,AMS(ActivityManagerService)会通过ProcessList.java与native曾当LMKD进行通信,当LMKD接收到内存压力事件时,则会根据adj和minfree的值来选择合适的进程进行查杀。原创 2022-09-03 14:15:09 · 2976 阅读 · 0 评论 -
【LMKD】六 Vmpressure监视器初始化及其工作原理
由于vmpressure信号会存在大量误报,因此lmkd必须执行过滤以确定是否真的存在内存压力,会导致不必要的lmkd唤醒并使用额外更多的的系统资源。使用 PSI 监视器可以实现更精确的内存压力检测,并最大限度地减少过滤开销。PSI统计数据为即将发生的资源短缺提供了预警功能,因而实现更主动、更细致、更准确的响应。因此,Google在Android10的版本为引入lmkd通过内核的PSI来监控内存压力。但当前的android为了对旧版本的支持,依然保留了vmpressure策略。原创 2022-09-03 10:29:50 · 3264 阅读 · 0 评论 -
【LMKD】五 PSI监视器初始化及其工作原理
在AndroidQ,Google引入了ULMK使用Pressure Stall Information(PSI)来监控系统的内存压力。前面已经介绍了PSI分别提供了SOME和FULL两种类型的数据。原创 2022-09-01 23:22:57 · 3403 阅读 · 0 评论 -
【LMKD】 四 LMKD初始化
init进程在初始化中会解析init.rc配置信息;当触发名为“early-init”当trigger时,会初始化相关memory.pressure_level节点的用户,用户组等访问权限。原创 2022-08-31 22:57:31 · 3015 阅读 · 0 评论 -
【LMKD】 三 LMKD的设计原则
LMK(Low Memory Killer)是一个多层级内存溢出查杀工具,由Android基于OOM-Killer原则开发扩展而来。原创 2022-08-31 22:14:05 · 3316 阅读 · 0 评论 -
【LMKD】 二 PSI 压力失速信息
接下来我们简单介绍下PSI和如何使用它,不过本篇并没有从Android的视角来梳理,更纯粹的是基于PSI本身的调研。原创 2022-06-24 08:19:50 · 3577 阅读 · 1 评论 -
【LMKD】 一 Android低内存查杀守护进程(Android12)
lmkd可用于监控运行中的Android系统的内存状态,并根据优先级杀掉相对来说最不重要的进程(the least essential process)以释放一定的内存,确保系统稳健运行。原创 2022-06-23 07:45:09 · 5721 阅读 · 1 评论 -
【行业篇】五、从智能汽车畅想未来全生态
苹果在今年的WWDC发布会上公布,在美国市场支持CarPlay的车型高达98%,79%的美国消费者表示自己只会买支持CarPlay的汽车。原创 2022-07-30 23:59:27 · 3610 阅读 · 0 评论 -
【行业篇】四、未来,也许智能家、智能车、智能手机、智能穿戴,科技一体化
在很长一段时间里,我们经常在国内外新闻上看到苹果造车各种各样的传言。然后在传言还在飞的过程中,全球见证了特斯拉的崛起。在国内,知名厂商乐视手机的创始人也下海造车,“蔚小李”新势力上市,互联网大厂、家电、房产大亨纷纷布局,手机厂商华米更是深度参与造车,智能汽车风口彻底被吹起来。原创 2022-05-30 15:59:16 · 2904 阅读 · 0 评论 -
【行业篇】三、智能座舱
智能座舱操作系统(Intelligent Cockpit Operation System)是指具备能够驱动汽车智能化和网联化车载产品、外设的汽车座舱操作系统。车载产品包括座舱内饰及座舱电子等。用户通过OS的多模交互驱动座舱内饰、座舱电子的联动,并将采集的各种信息上传至云端处理,并实现人、车、路、云的实时互动。原创 2022-05-30 20:23:12 · 4785 阅读 · 0 评论 -
【行业篇】二、汽车操作系统
写在前面这边博客其实是写给自己的。从手机行业转到汽车领域也有一段时间了,但是一直本分于系统工程师本职工作,沉湎于自己的一亩三分田。工作中更是像一颗螺丝钉把自己钉在某个节点,两耳不闻窗外事。对汽车行业,车用操作系统发展趋势的理解总是云里雾里。这无疑是为自己将来职业生涯的拓展带上了紧箍咒。亡羊补牢,犹未迟也。这两年智能汽车行业的爆发,带动了各种研究机构,新闻媒体对该行业的关注,并沉淀了很多资料,网上相关的资料已经很充分。接下来通过下面几个层次来对车载操作系统进行一个清楚的......原创 2022-03-15 23:32:35 · 12777 阅读 · 1 评论 -
【行业篇】一、汽车软硬架构 - EEA/SOA
写在前面汽车操作系统的发展轨迹与PC时代、智能手机时代初期有很多相似的地方。在PC时代早期,硬件才是高科技,卖硬件送软件,但到了上个世纪70年代,操作系统,应用软件的快速发展,反而推动了硬件更广泛的普及;微软和Oracle等软件公司顺势崛起,开启了软件定义硬件的新时代;IOS,Android手机操作系统的出现,更是推动了智能手机爆炸式发展,推动了数以千计的手机品牌公司诞生,将软件定义硬件的逻辑发挥到了极致。现在汽车操作系统时代来了,更是有人喊出了“软件定义汽车”口号。......原创 2022-03-19 11:28:00 · 7502 阅读 · 0 评论 -
【系统调试篇】调试踩坑FAQ(编译)
本篇主要记录在日常工作中遇到的一些经典的编译调试过程。原创 2022-07-12 08:17:36 · 5944 阅读 · 0 评论 -
【系统调试篇】2. 解决Android Automotive OS悬浮框或者PointerLocation无法正常显示的问题
问题描述:由于自研或者开发某种方案时发现,系统不能正常显示悬浮框。且通过开发者模式打开指针位置(Pointer location),屏幕并未显示PointocationView。现象如下图所示:问题分析思路:1.首先通过adb shell dumpsys window > window.txt来查看当前window是否存在以及window的各项参数数据。如下由于看到为false,首先想到的通过setVisibility(View.VISIBLE);的...原创 2021-05-20 13:53:55 · 4049 阅读 · 9 评论 -
【系统调试篇】1. ‘Native registration unable to find class ‘com/android/internal/os/RuntimeInit‘;
写在前面:本系列博文主要枚举在开发AndroidAutomotiveOS过程中遇到的各种问题,比如不开机,重启,WTD,Panic等。问题描述:编译frameworks/base/core,并push到手机重启后,无法开机,卡开机动画;初步分析:system_server无法启动,发生tombstone,提示Abort message: 'Native registration unable to find class 'com/android/internal/os/RuntimeIni.原创 2021-05-13 17:37:38 · 4241 阅读 · 1 评论 -
【内核篇】1.Android 内核配置信息
基于kernel/configs/q/android-4.19/android-base.config原创 2022-05-07 20:56:07 · 5423 阅读 · 0 评论 -
【IVI】12. Android Automotive OS 启动详解-CarLauncher篇
1.AMS启动Home Activity在SystemServer启动时,在进入PHASE_ACTIVITY_MANAGER_READY阶段,该阶段会告诉ActivityManager可以启动三方代码。并进行相关的初始化。frameworks/base/services/java/com/android/server/SystemServer.java{…...mActivityManagerService.systemReady(() -> {//ams调用systemReady原创 2021-04-29 17:46:05 · 4924 阅读 · 1 评论 -
【IVI】11. Android Automotive OS 启动详解-CarService篇
1.SystemServer启动CarServiceHelperService服务我们在SystemServer.java:startOtherServices()函数中提到了启动CarServiceHelperService的内容。具体如下:{…...//FEATURE_AUTOMOTIVE在PackageManager.java中定义,如下public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.auto原创 2021-04-29 10:01:19 · 6219 阅读 · 1 评论 -
【IVI】10. Android Automotive OS 启动详解-SystemServer篇
一,启动SystemServer /** * Prepare the arguments and forks for the system server process. * * @return A {@code Runnable} that provides an entrypoint into system_server code in the child * process; {@code null} in the parent. ...原创 2021-04-27 16:56:46 · 3222 阅读 · 2 评论 -
【IVI】9. Android Automotive OS 启动详解-Zygote篇
主要类和代码流程:initinit.zygote64_32.rcapp_main.cpp:main()AndroidRuntime.cpp:start()ZygoteInit.java:main()---------------:forkSystemServer()一, init.xxx.rc文件解析LoadBootScripts(am, sm);在init启动的第二阶段,通过LoadBootScripts()函数来解析init.rc或者其他重要服务相关...原创 2021-04-27 10:58:27 · 3747 阅读 · 1 评论 -
【IVI】8. Android Automotive OS 启动详解-Init篇
1.首次启动init进程,并进入启动第一阶段/system/bin/init → main.cpp:main()-→FirstStageMain()int main(int argc, char** argv) {#if __has_feature(address_sanitizer) __asan_set_error_report_callback(AsanReportCallback);#endif if (!strcmp(basename(argv[0]), "uevent...原创 2021-04-22 17:27:52 · 9956 阅读 · 6 评论 -
【IVI】7. Android AutoMotive 与车机之间物理互联原理
为了能够和正在运行的汽车进行交互,aaos(android automotive os)需要访问IVN(车在网络 in-vechicle networks)。那么,这些IVN都是什么?aaos如何处理这些连接呢?1.车载网络车载网络建立了汽车的内部神经系统,并负责不同的ECU(电子控制单元 electronically control units)之前的通信,如下:为了能够访问和控制这些ECU,aaos需要能够访问这些IVN。在这些IVN之上的则是CAN(控制器局域网 Controller.原创 2021-04-18 10:57:27 · 4581 阅读 · 2 评论 -
【IVI】6. [Android Automotive]蓝牙
Android 提供了蓝牙的完整实现,可支持多种常见的车载蓝牙配置文件。其多项增强功能还可优化其他设备和服务的性能和使用体验。蓝牙连接管理Android 中的CarBluetoothService会维护当前用户的蓝牙设备以及连接到 IVI 的每个配置文件的优先级列表。设备按指定的优先级顺序连接到配置文件。何时启用、停用配置文件以及将设备连接到配置文件取决于默认的连接政策,如有需要,可使用资源叠加层替换该政策。配置 Automotive 连接管理停用默认的电话政策Android 蓝牙堆..翻译 2021-04-08 15:43:05 · 3579 阅读 · 2 评论 -
【IVI】5. [Android Automotive]音频多区
1.音频多可用区概览注意:以下内容将介绍在 Android 10 中实现的多可用区音频。虽然 Android 9 未实现多可用区音频,不过您可以参阅Android 9 中的多可用区音频,详细了解如何构建后座娱乐系统 (RSE) 解决方案。在汽车领域,围绕多个用户同时与平台互动并且每个用户都希望使用单独媒体的需求,出现了一系列新的用例。例如,后座上的乘客在后座显示屏上观看 YouTube 视频时,司机可以在驾驶舱中播放音乐。多可用区音频允许不同的音频源通过车辆的不同可用区同时进行播放,从而实现此功能.翻译 2021-04-08 15:33:14 · 4580 阅读 · 1 评论 -
【IVI】4. [Android Automotive]车载音频
1.车载音频Android Automotive OS (AAOS) 是在核心 Android 音频堆栈的基础之上打造而成,以支持用作车辆信息娱乐系统的用例。AAOS 负责实现信息娱乐声音(即媒体、导航和通讯声音),但不直接负责具有严格可用性和计时要求的铃声和警告。虽然 AAOS 提供了信号和机制来帮助车辆管理音频,但最终还是由车辆来决定应为驾驶员和乘客播放什么声音,从而确保对保障安全至关重要的声音和监管声音能被确切听到,而不会中断。当 Android 管理车辆的媒体体验时,应通过应用来代表外部媒体翻译 2021-04-08 14:18:54 · 4906 阅读 · 1 评论 -
【IVI】3. [Android Automotive]Android 工具和基础架构
---底色来自google,润色来自小B;本文介绍了可用于衡量性能指标和测试界面的工具。1.系统性能工具启动时间如需分析启动时间,请使用bootanalyze工具。对于每个特定产品,请修改config.yaml文件以包含要搜索的事件。config.yaml应如下所示: stop_event: <logcat log message which will terminate log collection after reboot> events: ...翻译 2021-04-08 13:45:31 · 3888 阅读 · 0 评论