车载Android操作系统快速倒车启动技术研究

来源 :企业科技与发展 | 被引量 : 0次 | 上传用户:yww74
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】系统启动时间长是Android车载倒车系统亟待解决的关键问题,文章在比较目前几种常见Android车载倒车系统快速启动技术的基础上,提出了一种针对BootLoader、Linux内核、根文件系统的快速启动方法,通過测量BootLoader、Linux内核、根文件系统的启动时间,获得延时的主要影响因素,并依据Android车载倒车系统的特点,优化设计了耗时的关键点。试验研究表明,该方法可显著降低Android倒车系统的启动时间,有效提高了倒车系统的的实用性。
  【关键词】Linux内核;BootLoader;启动优化;根文件系统;Android
  【中图分类号】TP311.5 【文献标识码】A 【文章编号】1674-0688(2018)10-0081-03
  目前,Android车载倒车系统快速启动方法主要有休眠技术与硬件实现[1]。休眠技术是指Android车载系统在第一次启动或者电瓶断电重连后按正常的启动流程启动,即bootloader、linux内核、根文件系统、Android系统进程依次启动[2]。启动完成后,在车辆每次熄火时,Android系统将进入休眠状态,即系统关闭所有外设,内存进入自刷新模式,随后CPU进入休眠状态,整个车载系统处于低耗电状态。车辆重新启动后,CPU被唤醒,内存进入正常工作模式,所有外设恢复到休眠前的状态,实现车载Android的快速启动。该方法实现难度较大,如果出现CPU无法唤醒的情况,用户只能通过拔插车辆电瓶重新启动。
  硬件实现是通过在CPU和LCD显示屏之间添加一个TW8816芯片。TW8816是一个视频信号选择器,它有两路视频输入和一路视频输出接口。两路输入分别是CPU的DISP接口传输出的Android系统UI画面信号和倒车摄像头传输出的CVBS视频画面信号。输出接口是将一路输入信号输出到LCD显示屏。在倒车时,TW8816芯片将视频流选择从倒车摄像头输入,从LCD输出;在不倒车时,TW8816芯片将视频流选择从Android系统输入,从LCD输出,实现将倒车系统和Android系统的快速启动。该方案的缺点是硬件成本高,可扩展性差。
  鉴于现有技术存在的不足,本文提出一种基于BootLoader、Linux内核和根文件系统启动优化的Android车载倒车系统快速启动技术。通过优化Android系统的启动时间,当车辆打火上电后,快速启动BootLoader、Linux内核、根文件系统,从而实现倒车系统的快速启动。
  1 系统设计和启动流程
  1.1 车载Android系统
  Andorid系统功能强大,内容丰富,具有开源、免费的优势,众多汽车厂商的车载系统正逐步淘汰WINCE系统而采用Andorid系统[3]。一般车载倒车系统在启动后3 s内,倒车影像与轨迹规划功能启动,倒车进程准备就绪,但车载Android系统的启动速度慢,一般需要数十秒才能完成启动,如果用户在Android系统启动过程中需要倒车,倒车系统将无法及时显示倒车影像,影响倒车的安全性和用户体验。目前,常用解决方法是采用休眠技术和提升硬件性能,上述方法在一定程度上提高了系统的启动速度,但在应用中仍存在一定局限性。
  1.2 Android系统启动流程
  为了更好地优化Android系统的启动时间,需详细分析车载Android系统的启动过程,Android系统的启动大致分为3个部分[4],Android设备的启动过程如图1所示。
  Step1:BootLoader程序,完成相关硬件的初始化配置工作,加载Linux内核,然后跳转到Linux内核起始地址执行[5]。
  Step2:Linux内核,内核初始化,加载相关驱动模块,加载文件系统模块,启动用户层的祖父进程Init进程。
  Step3:Init进程,用户空间上的第一个程序,是用户层所有进程的祖父进程。Init进程主要任务一是挂载目录,比如/sys、/dev、/proc,二是解析脚本配置文件Init.rc,根据Init.rc文件配置孵化出其他进程,其中就包括倒车进程。
  Step4:倒车进程,倒车进程负责监测倒车信号,获取倒车摄像头视频流,刷新视频流到framebuffer显示。
  2 系统快速启动优化
  2.1 系统启动速度的主要影响因素
  分析并确定系统启动的主要延时因素是优化启动速度的关键,本文使用PrintkTimes、CPU定时器、KernelFunctionTrace、示波器和LinuxTraceToolkit等工具测量系统启动时间,在实际测量中发现,BootLoader模式检测、BootLoader拷贝Linux内核和根文件系统镜像、设备驱动初始化、文件系统初始化、根文件系统建立、Linux内核log输出和LPJ值计算耗时较多。上述启动进程的耗时因素主要有以下几个方面。
  (1)bootloader模式检测:bootloader每次启动都需检测是否进recovery模式,bootloader首先挂载磁盘上的cache分区,cache分区采用ext4格式存储文件,挂载文件需一定时间,然后读取cache分区中的是否进入恢复出厂设置模式的文件,如果文件存在则进入恢复出厂设置,否则正常启动。
  (2)bootloader拷贝镜像:嵌入式Linux系统的内核以压缩形式存储在NAND Flash中,启动前需压缩Linux内核,从根文件系统镜像读取到内存中并解压,然后CPU指针指向内核的入口地址,开始执行内核镜像代码,拷贝内核镜像花费了大量时间。
  (3)设备驱动初始化:Linux内核支持大量总线和设备驱动,Linux启动时会对Linux内核的所有设备进行初始化,如果硬件系统中没有某些设备,但驱动仍会初始化,且驱动的初始化过程是串行执行。多数驱动的初始化函数中包含休眠函数,内核执行休眠函数时不会调度到其他驱动继续执行,而是在休眠函数处执行死循环,浪费了大量启动时间。   (4)文件系统初始化:Linux内核支持ext2、ext3、ext4、fat32、fat16、NTFS等多种文件系统,文件系统本身代码量庞大,初始化耗费了大量时间。
  (5)根文件系统建立:Linux启動完成后,需要挂载根文件系统,挂载完成后,Linux内核会依次上报设备节点信息给Ueventd进程,Ueventd进程根据上报的主次设备号建立设备节点,全部设备节点建立完成耗费了大量的时间。
  (6)Linux内核日志输出:Linux系统启动时一般使用串口打印系统的启动日志信息,打印速度由串口的速度决定。串口速度一般较慢,并且启动信息一般较多,耗时较长。
  (7)LPJ值计算:Linux启动时,会运行Calibrate_delay函数计算LPJ值,LPJ值是一个衡量CPU处理速度的基准,通过执行一定次数的周期为1jiffy的循环来确定其数值,在Linux内核中运行Calibrate_delay函数计算LPJ值一般会耗时几百毫秒。
  2.2 系统快速启动优化设计
  (1)针对BootLoader模式检测:Android系统检测是否进入恢复出厂设置的原始方式是询问挂载文件系统,本方案将是否进人恢复出厂设置模式的标识存放在NAND中某一个固定的地址,BootLoader模式检测时无需访问挂载文件系统,直接读取固定地址是否有标识信息,同时将BootLoader中支持文件系统的代码裁剪掉,加快代码执行速度。
  (2)针对BootLoader拷贝镜像:提高存储Linux内核和根文件系统镜像的NAND的总线速度,同时使用直接内存存取(Direct Memory Access,DMA)方式读取镜像。DMA方式完全由硬件控制信息传送[6],通过使用DMA方式读取镜像可以使CPU预先处理BootLoader的其他任务。通过优化驱动,裁剪Linux内核体积,精简文件系统等减少Linux内核编译后的体积。将根文件系统镜像直接编译到Linux内核,减少根文件系统的拷贝时间。
  (3)针对设备驱动初始化:Linux内核在启动过程中耗时最长的是初始化各种总线驱动,设备驱动。根据Android车载系统的工作特点,在内核中删除不必要的驱动程序[7],如PS2鼠标、键盘、SATA硬盘、有线网卡等。Linux内核在启动过程中是单线程加载驱动,且很多驱动的初始化函数中包含休眠函数,实际这个休眠函数不是休眠,而是在死循环,所以引入多线程初始化驱动技术,将驱动的初始化函数放入工作队列的下半部分,当Linux系统在执行驱动初始化函数过程中遇到休眠函数时,CPU将会调度到工作队列的下半部实现并行初始化。
  (4)针对文件系统初始化:根据Android车载系统的特点,裁剪掉不需要的文件系统,如NTFS、EXT3、EXT2、FAT16等文件系统,只保留FAT32和EXT4这两种最常用的文件系统,节省初始化文件系统的时间。
  (5)针对根文件系统建立:Linux内核启动完成后,最先执行的是INIT进程,通过在INIT进程中直接调用MKMOD命令手动建立设备节点,然后INIT进程启动倒车进程,使倒车进程可以立即工作,节省设备节点建立的时间。
  (6)针对Linux内核日志输出:在Linux内核启动参数中加入“queit”参数,降低Linux内核的启动级别,待系统启动完成后,可以使用dmesg命令查看启动日志,节省了Linux内核日志的输出时间。
  (7)针对LPJ值计算:在Linux内核中硬编码LPJ值,通过查看优化前的启动日志,查到“Calibrating delay loop****BogoMPIS”信息中LPJ值,然后在Linux内核代码中硬编码LPJ值,删除计算LPJ值的Calibrate_delay( )函数,节省LPJ值的计算时间。
  3 实验结果
  表1为系统启动各个流程的所需时间。由表1可知,采用本文的优化方案后,Android车载倒车系统的启动速度有明显改善,从15.62 s减少到1.76 s。通过分析表格可以看出,在不改变原有软硬件架构的情况下,通过优化系统启动过程的各个部分,主要延时进行了有效消除,达到了设计目的。
  4 结语
  本文提出的基于优化bootloader、linux内核、ramdisk的Android车载倒车系统快速启动方案,从bootloader模式检测、内核镜像拷贝、设备驱动初始化、文件系统初始化、根文件系统建立、内核log输出、硬编码LPJ值等方面提出优化方法,实现了Android车载倒车系统的应用。该方案降低了复杂度,提升了可靠度,节省了成本,提高了扩展性,具有较高的应用价值。
  参 考 文 献
  [1]段红祥,孙棣华,刘卫宁,等. 基于内核启动优化的嵌入式Linux快速启动方案[J]. 计算机工程与设计,2009,30(1):16-18.
  [2]李妍,沈勇,陆贞姣. 面向汽车应用的Linux系统启动性能测试与改进[J]. 电子技术,2013(8):111-115.
  [3]马胜,江冰,谢剑锋. 基于Android的可视倒车系统设计[J]. 微处理机,2013,34(5):41-45.
  [4]金智义,张戟. 嵌入式Android系统的启动研究[J]. 佳木斯大学学报(自然科学版),2011,29(4):521-523.
  [5]周继才. 基于Android平台的Bootloader系统设计与启动性能优化[D]. 重庆:重庆邮电大学,2013.
  [6]谭平,王小平. ArmLinux下DMA数据同步传输机制及实现[J]. 无线互联科技,2013(2):154-155.
  [7]张国明. 嵌入式Linux驱动程序分析与改进[D]. 长春:长春理工大学,2007.
  [8]史巧硕,范东月,柴欣,等. 嵌入式Linux根文件系统的构建与分析[J]. 计算机测量与控制,2015,23(2):656-659.
  [责任编辑:钟声贤]
其他文献
我校是一所农村小学,有12个教学班,学生410人,教师26人。几年来,学校坚持“以人为本,一切为了人的发展”的办学理念,学校教学教研工作以“打造高效课堂、强化校本教研、开展主题活动、培养学习习惯”四大工程为抓手,规范办学行为,推进课程改革,教学教研工作唱响了“五部曲”。    领导率先垂范抓管理    领导率先垂范,做好管理、指导、培训、专业引领等工作。校长、主任深入教学第一线,兼课、听课、评课,
【摘 要】文章阐述了广西高速公路机电系统的现状,介绍了机电设备维护体制、高速公路设备管理的工作体系、高速公路设备维护管理的基本内容,总结了机电设备维护的一些经验,为将来工作的顺利开展提供一些参考。  【关键词】高速公路机电设备;维护管理;分析  【中图分类号】U418.7 【文献标识码】A 【文章编号】1674-0688(2018)04-0244-02  随着经济的发展,全国各地很多高速公路全面通
为探究梨木虱的研究历史、研究趋势和发展动向,基于中国知网数据库,利用主题文献计量分析方法系统分析1964年至2020年11月的国内梨木虱研究主题文献资料.结果显示,国内发表梨
中小企业在我国经济市场发展中发挥着巨大的推动作用,高效的财务管理是保证中小企业持续发展的前提条件之一。但如今中小企业财务管理还存在一些问题,阻碍了中小企业的正常运
目的探究姜黄素对高糖诱导的人视网膜色素上皮(RPE)细胞中microRNA-125b(miR-125b)表达及细胞损伤的影响。方法体外培养ARPE-19细胞,分为对照组、高糖组、高糖+姜黄素组、高
目的探讨细胞液泡分选蛋白4B(VPS4B)对人牙髓干细胞(hDPSCs)成牙本质分化及Notch通路的影响。方法hDPSCs分正常组、矿化组、阴性对照组、VPS4B-siRNA组,除正常组(正常培养,不