图中可以看到,软件构造基本可以分为四个部分。1、Bootloader区存放的是Bootloader,它卖力嵌入式系统最初的硬件初始化、驱动和内核加载。2、参数区不是必须的,常日存放了一些系统参数,并且常日这个区是没有文件系统,参数以原始数据的格式来存放。3、内核镜像区存放的Linux内核压缩镜像,它被解压后运行于内存,作为嵌入式设备的Linux操作系统。4、文件系统区存放经由压缩的文件系统,它会被Linux内核解压并挂载,并作为各种运用程序、文件的紧张载体。这四个部分都是存放在硬件的FLASH中。以mstar平台为例,BootLoader对应的是mboot,参数区对应的是mboot操作存储的那部分变量,这部分是mstar预留的一个特殊分区,如果不实行emmc擦除,这部分在升级的时候是不会被清空的。内核映象对应的便是编译出来的内核,文件系统在安卓系统上可以算作system平分区。嵌入式系统从上电开始启动,后续基本分为三个过程:
启动勾引程序BootLoader,mstar的是uboot,海思的是fastboot,基本上是一个东西。Boot运行后勾引linux内核开始运行,加载干系必备驱动内核加载文件系统等,实行干系开机运用,系统开始运行。BootLoader的启动当芯片上电后,会从一个固定的地址开始运行一段汇编程序。这段程序的浸染是配置ddr,cpu等一些基本属性,然后会调用boot的启动代码,之后boot就会开始运行。(ps:常日来说,cpu可以读写flash里面的程序,但是是不能直接运行程序的。一样平常的就有2种处理,硬件直接用Nor flash,cpu可以运行nor flash上的程序,其余一种便是把nand flash上的前4K数据通过硬件方法搬运到DDR,然后cpu从这个指定的地址运行。)以mstar平台为例,当拿到一块空片或者把EMMC全体擦除后,上电会看到一串DDR干系的打印。
这部分是由固化在主芯片里面的程序运行并打印的,程序运行后,会做紧张硬件的自检,从这个打印一定程度上可以用来判断当前主板在DDR、主芯片是否有问题.内核的启动boot在启动完成后,会把内核解压到DDR指定的一个地址,之后就会跳转到这个地址开始运行。以mstar为例,在mboot命令行用print可以看到如下变量
个中的bootcmd便是启动内核的命令,在mboot命令行下运行这串命令,内核就会开始启动,并开始运行全体linux和安卓。而另一个bootargs变量是mboot通报给内核的环境变量,里面是一些对掌握台串口,内存分配等一些配置。如debug口的复用,便是通过修正这里,将掌握台配到其余一个串口,这样就实现了debug作为其它串口的复用。某些分外情形下须要mboot传变量到内核,也可以通过在这里添加一个变量来实现。文件系统启动内核启动后,会开始初始化各个子系统,然后开始挂载文件系统。这里紧张是创建各个 系统目录,文件系统建立后,linux系统基本上就已经运行起来了。安卓系统启动Linux在文件系统这些准备后,会启动一个init的进程。这个进程会加载init.rc,之后就开始一系列的配置,这里后续再解释。linux内核安卓是基于linux内核来实现,内核的紧张功能是实现对硬件的掌握。安卓系统本色上是一个运行在linux上的java虚拟机,因此内核大部分的操作跟嵌入式linux操作基本上是一样的,如利用make menuconfig添加或删除模块,驱动的添加和操作办法等等。但同时安卓针对内核也做了自己的改动,常见的如Binder IPC,OOM等。实际开拓中内核部分涉及不多,紧张可能会有部分打开某个驱动或者添加遥控器的需求,这里按照对应的解释添加即可。系统运行库这部分紧张有两部分,一个是系统库,紧张是供应了网络,图像,多媒体,数据库的支持。其余一个是运行时,这紧张指安卓的核心库如framework中很多的 cpp文件编译的库,还有Dalvik虚拟机。目前在开拓的平台中,像mstar的tvos,和海思的hippo部分,都是在这一层做处理。
运用框架层这层紧张是供应用层调用的各种API,以及窗口,视图等的管理。这部分紧张集中在framework部分,基本是java代码。这部分跟系统运行库部分接口较为紧密,很多功能终极都是通过jni调用系统运行库来实现。mstar和海思都有在这层做自己的接口以及处理,如mstar的tvapi和tv2、还是的hippo下的东西。这两部分是系统常常须要修正的地方。
运用层安装在手机上的运用程序都是在这个层。
中间件目前正在推进系统中间件的利用,全体的思路实际便是将运用层的框架打包成IST自己的接口,然后用调用这些接口来实现常用的逻辑功能和UI显示。一些原来放再系统的运用框架里面的逻辑功能和UI,都统一单独出来,放在中间件中来实现,而这部分基本是分开于平台存在的,后续开拓,也紧张以这一块为主,底层只卖力供应掌握硬件的接口。因此运用的开拓职员对付运用框架层都须要有理解,而不仅仅是UI那块东西。硬件基本架构目前公司在做的主板紧张功能便是显示+触摸,同时配套其它须要功能。显示部分紧张是主板吸收各种旗子暗记源,比显示到屏幕上。这里涉及到两部分,点屏和旗子暗记源输入。每个主板在开始调试时,先要做的便是点屏。屏的类型紧张有4K和2K,但是目前客户已经基本上在利用4K的屏幕,2K的是在部分广告机或者小显示器上用到,配屏一样平常利用原厂供应的默认屏参就可以点亮。2K 一样平常用的是LVDS,紧张涉及到位数(6/8/10bit),奇偶,参数4K的屏都是利用VBO旗子暗记,紧张涉及到一个单双分区的修正。其余还有不是主芯片直接点屏,而是通过一个out芯片来点屏的,这个时候都是须要主芯片输出一个固定格式的旗子暗记给到out芯片,然后进行点屏。
旗子暗记源目前常用的旗子暗记源有:DTV/ATV,AV,YPBPR,VGA,HDMI,DP,DVI,TYPE-C。DTV/ATV,AV,YPBPR,VGA都是仿照旗子暗记,HDMI,DP,DVI,TYPE-C是数字旗子暗记。对付DTV/ATV,须要添加对应的tuner驱动才能吸收到旗子暗记。旗子暗记中,AV/YPBPR/VGA/HDMI一样平常都是主芯片默认就有的接口,而DP,DVI,TYPE-C都是须要通道芯片转化成hdmi再给到主芯片。当主芯片的HDMI接口不足的时候,就须要利用到HDMI-SWITCH来扩展HDMI口。目前在用的HDMI-SWITCH有两种掌握类型:I2C,IO口。当切换到HDMI的扩展口时,须要掌握SWITCH芯片切换到对应的port口。
HDMIHDMI是目前最常用的旗子暗记,也是涌现问题较多的旗子暗记。下面是HDMI常常涉及的几个观点,后续再针对HDMI做一些详细的解释。HDMI标准,HDMI1.4和HDMI2.0。最大略的区分便是能不能支持4k2k@60hz的。对付主板来说,一样平常都是支持的,对付旗子暗记源来说,有些旗子暗记源是支持的,有些是不支持。EDID,用来奉告旗子暗记源当前的显示器对视频和音频的支持情形。常用的HDMI输出设备都是会先读取这个edid,然后视情形输出旗子暗记。以是有些时候没有旗子暗记的,排查EDID干系的问题。HDCP,HDMI用来加密旗子暗记的,分为HDCP1.4和HDCP2.2CEC,通过输入旗子暗记的设备来掌握显示器HPD,旗子暗记源的一个检测机制,当旗子暗记源插入的时候,这个脚是高的,当拔出的时候是低的。常常通过操作这个脚来仿照HDMI的插拔。DP,DVIDP是通过芯片转成HDMI,利用基本跟HDMI类似TYPE-C音频在mstar的平台上,须要针对不同的旗子暗记源配置不同的音频输入。音频输出也分为I2S和仿照的,须要根据实际情形做匹配。
触摸触摸紧张是供切到对应的旗子暗记源后,可以给对应的旗子暗记源设备供应一个触摸输入,这样可以直接在显示屏上操作旗子暗记源设备。目前常用的触摸用两种,串口+usb 、双usb。详细拜会先容触摸的文档。
USB跟随这部分跟触摸是一体的。当切换到不同旗子暗记源时,根据不同需求来掌握public USB口,确认是否须要随着旗子暗记源一起切换。这个时候将USB插入主板的的时候,USB直接是接在了当前显示旗子暗记源所在的设备上。
网络交流有的主板为了让OPS和主板通过一根网线就能上网,会在主板上加一个网络交流芯片。目前对付这个芯片一样平常不用做太多掌握,但为了支持WOL功能,须要在待机的时候给网络交流芯片供电。WOL功能紧张是指主板待机后,可以通过网络发送唤醒包来唤醒主板。芯片都是默认支持的,对付有网络交流芯片的主板,只须要给交流芯片待机的时候供电就可以。
WIFI主板的WIFI利用的都是USB接口,主板一样平常会有一些默认支持的芯片类型。对付没有的,须要自己重新编译和添加驱动。添加方法见干系文档。
RS232目前所有的主板都是须要支持利用RS232来掌握主板,RS232用的也是串口协议。在mstar的主板上,RS232跟4pin的debug口是复用的同一个口。这里有一个拓展功能便是通过网络来实现RS232一样的功能。这部分只是在命令解析部分不同,终极命令处理的地方是一样的。
麦克风模组现在用的麦克风模组,便是一个USB麦克风。但是须要给模组输入一个I2S旗子暗记来做消反应处理,这里就涉及到I2S和仿照声音同时输出的问题。
RTC时钟芯片,用来在断电的情形下存储韶光。外洋的一样平常利用电容电池,海内的利用的是一样平常电池。
HDMIOUT可以同时点屏和输出一起HDMI旗子暗记,目前在用的紧张是MN869121和NT68411。个中MN869121须要自己修正代码,NT68411是直接烧录固件。功放芯片调度芯片输出音频,须要配置输入的音频格式和芯片驱动,输入的音频格式为I2S或者仿照