一种汽车仪表显示系统的启动方法、装置及存储介质与流程
1.本发明属于车辆工程技术领域,尤其涉及一种汽车仪表显示系统的启动方法、装置及存储介质。
背景技术:
2.汽车仪表显示系统是汽车与驾驶员进行信息交互的界面,为驾驶员提供必要的汽车运行信息,同时也是维修人员发现和排除故障的重要工具。而现在的汽车仪表大多是全液晶屏幕制成,汽车仪表通常由地板数据处理mcu即微控制单元和核心板高性能soc即系统级芯片组成,仪表的全液晶屏幕由soc驱动显示,数据存放在外置的emmc即内嵌式存储器中,且soc内部需要运行大型操作系统时,系统调用时间增加,使得在汽车仪表显示系统开机时会出现启动慢的情况,同时限制了系统的灵活性,也影响了汽车仪表显示系统的安全性。
技术实现要素:
3.有鉴于此,本发明提供了一种提高汽车仪表显示系统启动速度、安全故障隔离和提升使用体验的汽车仪表显示系统的启动方法、装置及存储介质,来解决上述存在的技术问题,具体采用以下技术方案来实现。
4.第一方面,本发明提供了一种汽车仪表显示系统的启动方法,包括以下步骤:获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,其中,汽车仪表显示系统包括宿主机、客户机和linux内核,宿主机通过linux内核与客户机连接,属性信息包括输入驱动信息、输出驱动信息和版本;根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs;linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机。
5.作为上述技术方案的进一步改进,启动lxc容器和初始化与rootfs所在的分区对应的android系统以完成汽车仪表显示系统的正常开机,包括:获取lxc容器的运行环境并根据运行环境启动容器环境的内部命令生成容器运行指令,并在android系统的内核中运行容器运行指令;根据容器运行指令获取容器的进程信息,根据进程信息启动android系统中的init进程得到android的核心服务,其中,容器的进程信息包括init.lxc、sh和ps,init.lxc为容器的启动程序,sh为容器内部的shell,ps为调用的命令。
6.作为上述技术方案的进一步改进,android系统的最底层为linux的输入子系统,客户机作为linux输入子系统的用户,通过对操作linux输入子系统创建的设备节点和硬件层进行交互,android系统的输入模块包括输入事件收集器、输入事件读取器、输入事件分发器和输入设备驱动;
输入事件收集器用于从输入设备中收集输入事件,对这些输入事件进行识别与封装,并提交给上一层进行处理;输入事件读取器用于从输入事件收集器中获取输入事件,将事件交给输入事件分发器;输入事件分发器用于接收输入事件读取器传来的事件信息并管理处理该事件的目标窗口;输入设备驱动用于接收物理设备的事件输入得到事件信息,并将事件信息传给输入事件收集器;当客户机对输入设备进行操作时,输入设备驱动会捕捉该操作,输入事件收集器不断从输入设备驱动中获取待处理的事件,输入事件读取器从输入事件收集器中获取原始事件并进行加工处理事件,将处理事件传给输入事件分发器,输入事件分发器将接收到的处理事件分发到合适的窗口中。
7.作为上述技术方案的进一步改进,输入事件收集器的执行过程包括:获取当前容器的编号和当前运行环境的容器编号,若运行的容器环境不是当前容器对应的前台系统,则丢掉所有的输入事件;若运行的容器环境是当前容器对应的前台系统,则不做任何的操作,将事件信息传给下个处理模块。
8.作为上述技术方案的进一步改进,android系统的显示模块包括android应用程序所产生的图像数据、在显示模块中用于管理应用程序所产生的图像数据的窗口管理服务、经过窗口管理服务加工处理后的显示数据、与硬件层的屏幕直接联系的系统服务,android系统的显示模块执行过程包括:每一个应用将自己的显示内容绘制到一个图像数据中,将图像数据传递给窗口管理服务进行处理,根据客户机当前显示的状态对图像数据添加相应的参数,系统服务获取到图像数据的参数后对所有图像数据合成为显示数据,系统服务将需要显示的显示数据传递给屏幕设备,屏幕显示该显示数据的内容。
9.作为上述技术方案的进一步改进,linux内核将lxc容器挂载至rootfs所在的分区,包括:获取客户机中的,roofts并将rootfs输入android系统的编译环境中,添加一个与rootfs对应的烧录分区;将rootfs打包成lxcdata.img分区镜像,并将编译好的版本烧录至客户机以完成分区制作。
10.作为上述技术方案的进一步改进,根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,包括:创建容器文件系统的创建只读层、容器读写层和挂载点,将只读层和读写层挂载到挂载点;添加宿主机的文件夹到容器的数据卷和对应的标签得到挂载标签,判断数据卷是否为空;若是,表示客户机未使用挂载标签,结束创建过程;若否,则使用函数解析数据卷的字符串,当函数返回的字符数组长度为2,且数据
元素均不为空时,则挂载数据卷;否则,提示客户机创建数据卷输入值不正确。
11.作为上述技术方案的进一步改进,挂载数据卷的过程包括:读取宿主机的默认文件目录,根据默认文件目录创建宿主机的初始文件目录,在容器文件系统中创建与默认文件目录对应的装入点;将数据卷从宿主机的初始文件目录中自动挂载到相应的容器中所需挂载的节点以启动容器的挂载过程。
12.第二方面,本发明还提供了一种汽车仪表显示系统的启动装置,包括:获取单元,用于获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,其中,汽车仪表显示系统包括宿主机、客户机和linux内核,宿主机通过linux内核与客户机连接,属性信息包括输入驱动信息、输出驱动信息和版本;构建单元,用于根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs;启动单元,用于linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机。
13.第三方面,本发明还提供了一种存储介质,存储介质上存储有指令,指令被处理器执行时实现上述的汽车仪表显示系统的启动方法的步骤。
14.本发明提供了一种汽车仪表显示系统的启动方法、装置及存储介质,通过获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs,linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机,保证部署在任何操作系统环境中的软件都能始终如一地正常运行,可以提高汽车仪表显示系统的启动速度、安全性和灵活性。
附图说明
15.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
16.图1为本发明的汽车仪表显示系统的启动方法的流程图;图2为本发明的输入事件收集器的执行过程的流程图;图3为本发明的lxc容器的创建过程图;图4为本发明的挂载数据卷的流程图;图5为本发明的汽车仪表显示系统的启动装置的结构框图;图6为本发明的rootfs分区的结构示意图。
具体实施方式
17.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附
图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
18.参阅图1和图6,本发明提供了一种汽车仪表显示系统的启动方法,包括以下步骤:s11:获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,其中,汽车仪表显示系统包括宿主机、客户机和linux内核,宿主机通过linux内核与客户机连接,属性信息包括输入驱动信息、输出驱动信息和版本;s12:根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs;s13:linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机。
19.本实施例中,启动lxc容器和初始化与rootfs所在的分区对应的android系统以完成汽车仪表显示系统的正常开机,包括:获取lxc容器的运行环境并根据运行环境启动容器环境的内部命令生成容器运行指令,并在android系统的内核中运行容器运行指令;根据容器运行指令获取容器的进程信息,根据进程信息启动android系统中的init进程得到android的核心服务,其中,容器的进程信息包括init.lxc、sh和ps,init.lxc为容器的启动程序,sh为容器内部的shell,ps为调用的命令。lxc容器是linux系统下通过轻量级虚拟化技术创建的容器,轻量级虚拟化技术的底层操作系统上不会实现一个虚拟化层来为虚拟机提供服务,轻量级虚拟化技术完全由底层操作系统及linux内核提供支持,借助于内核的功能,可以在上层创建出多个隔离的进程运行空间,所有的独立空间共享同一个底层内核,一个隔离的空间如底层操作系统环境的一个拷贝,通过限制一个空间可用的内存等资源实现底层资源的划分,每个独立空间的擦走哦系统环境和底层系统是一致的,这里的独立空间即为容器。
20.需要说明的是,lxc是linux containers的缩写,是一种开元的清凉虚拟化技术,lxc提供一个软件包,客户机通过使用软件包里的一系列命令,可以对容器进行创建和销毁,或通过命令对lxc容器进行配置。由于一个进程对应多个不同类型的命名空间,而同一个命名空间会被多个进程使用,为了辨识这种进程和命名空间之间多对多的关系,内核便设计类上述的数据结构作为两者之间的代理。每个创建的新进程都会有它自己的命名空间,在创建进程的过程中可以通过制定参数使得该进程具有新的命名空间,用户进程一般通过fork调用创建新的进程,但fork调用产生的进程和父进程属于同一个命名空间。通过设置flags的一些标志位可以制定新锦成是否需要创建新的命名空间。为了能在宿主机对虚拟android进行操作和管理,需要在宿主机实现对输入设备和显示设备的复用,需要为每个容器分配一个数字id,在启动容器的lxc命令中以参数的形式为容器指定一个id,之后容器中的进程可以通过读文件获取自己所在容器的id。需要支持客户机配置一个所有容器可见的id,表示允许使用本地显示设备和输入设备的android容器的id,实现一个linux驱动,令该驱动在启动时自动加载,驱动加载成功后,会在linux的proc文件系统中创建一个container_id文件,由于android系统启动时会挂载linux的proc文件系统,每个android都能看到这个全局的container_id文件,客户机通过向container_id文件写入一个id值来切换到对应的android容器。
21.应理解,每个分区都是独立的实体,都拥有各自的私有数据空间,并且能防止其他分区非法访问或者破坏而实现数据隔离。分区间数据交换都是经过分区验证的信息,防止
数据传输过程中被破坏,或者非法数据流对系统产生威胁而实现数据流控制。分区软件具有时间和空间隔离特性,能有效地避免系统资源无序竞争引发的安全性问题而实现系统资源保护。当某一个分区应用发生不可避免的失效情况时,分区软件能将失效影响范围控制在该分区内,避免其他正常分区应用受到影响,从而大大提高系统可靠性。容器不是去虚拟出主机硬件,然后在硬件基础上建立完整的软件操作系统,它的目的是把进程和进程隔离开来,有了这个容器,客户机可以将软件运行所需的所有系统资源打包并存放到一个与宿主机完全相互隔离的文件系统中,容器与其他传统虚拟机不同,不需要额外绑定一整套的操作系统,只需填软件工作所需的那部分库资源和相关设置,汽车仪表显示系统因此变得高效、轻量,并保证部署在任何操作系统环境中的软件都有能始终如一地正常运行,可以提高汽车仪表显示系统的启动速度和安全性。
22.可选地,android系统的最底层为linux的输入子系统,客户机作为linux输入子系统的用户,通过对操作linux输入子系统创建的设备节点和硬件层进行交互,android系统的输入模块包括输入事件收集器、输入事件读取器、输入事件分发器和输入设备驱动;输入事件收集器用于从输入设备中收集输入事件,对这些输入事件进行识别与封装,并提交给上一层进行处理;输入事件读取器用于从输入事件收集器中获取输入事件,将事件交给输入事件分发器;输入事件分发器用于接收输入事件读取器传来的事件信息并管理处理该事件的目标窗口;输入设备驱动用于接收物理设备的事件输入得到事件信息,并将事件信息传给输入事件收集器;当客户机对输入设备进行操作时,输入设备驱动会捕捉该操作,输入事件收集器不断从输入设备驱动中获取待处理的事件,输入事件读取器从输入事件收集器中获取原始事件并进行加工处理事件,将处理事件传给输入事件分发器,输入事件分发器将接收到的处理事件分发到合适的窗口中。
23.本实施例中,内核从preloader获得整个主机硬件的控制权,但这个过程却并不是轻松容易的,内核启动之前,文件系统并没有被装载,内核虽然要探测各种硬件,但内核本身必须得从某个分区上被装载,这个分区是由preloader来识别的,即preloader必须要能够识别内核未见所在的分区,而文件系统从逻辑上来看和从物理上来看是不一样的,从逻辑上看它们是有层次关系的。文件系统从根开始的,根下有许多一级目录如/user、/boot和/home等,这些目录中有些目录是可以单独关联到一个分区,而有些则不行,因为这些目录是与根自身完成初始化相关的,而每一个目录都通过根才能访问,根所在的分区通常就是操作系统,是内核能够实现进入用户空间的最核心的位置,因此这个分区有个特定的名称称为根文件系统rootfs,若把某个分区与根建立了关联关系,通过根所访问的所有文件都将以根作为访问入口,这个根就成了整个磁盘上的甚至于整个操作系统上访问其它任何存储设备的访问入口,根下有/bin、/sbin等很多目录,根本身挂载完成以后以后就要启动操作系统,而/bin、/sbin所放的这些二进制程序是操作系统自身启动就要用到的程序。当内核初始化完以后需要建立根文件系统,客户机系统告诉内核根在哪个分区上,即用户需要向内核传递一个参数,若内核驱动不了这个分区,它将不能访问rootfs,即内核必须要能
通过驱动程序探测到分区,这样才能访问这个分区。在内核版本号命名的目录里,有该内核所需的各种外围模块,在这个目录下有许多文件,其中包含文件系统驱动程序模块,内核所需的模块就在这个设备上,要想访问这个设备得先有驱动,而要想拿到驱动得先能访问该设备。
24.需要说明的是,内核和要访问的设备之间再加一个层次,该层次只有一个简单的功能向内核提供这个设备的驱动,这个文件不是事先编译好的,内核是编译好的,模块也是编译好的,在安装操作系统时需要内核装起来,把内核模块装进来。
25.参阅图2,可选地,输入事件收集器的执行过程包括:s22:获取当前容器的编号和当前运行环境的容器编号,若运行的容器环境不是当前容器对应的前台系统,则丢掉所有的输入事件;s23:若运行的容器环境是当前容器对应的前台系统,则不做任何的操作,将事件信息传给下个处理模块。
26.本实施例中,android系统的显示模块包括android应用程序所产生的图像数据、在显示模块中用于管理应用程序所产生的图像数据的窗口管理服务、经过窗口管理服务加工处理后的显示数据、与硬件层的屏幕直接联系的系统服务,android系统的显示模块执行过程包括:每一个应用将自己的显示内容绘制到一个图像数据中,将图像数据传递给窗口管理服务进行处理,根据客户机当前显示的状态对图像数据添加相应的参数,系统服务获取到图像数据的参数后对所有图像数据合成为显示数据,系统服务将需要显示的显示数据传递给屏幕设备,屏幕显示该显示数据的内容。
27.需要说明的是,eventhub模块是android输入子系统的最底层,它直接访问linux的输入设备文件和linux输入子系统进行交互,eventhub模块初始化时会打开linux在/dev/input/目录下创建的所有输入设备并进行管理,同时该模块会监控该目录下是否有设备节点的增删,新设备节点增加,则会打开新的设备文件,新设备节点增加,则会打开新的设备文件,设备节点减少,则会关闭已打开的设备文件,该模块通过epoll系统调用监控所有打开的设备文件,并将读到的原始输入事件转发给inputreader模块。inputreader模块是eventhub的使用者,从eventhub获取所有底层设备文件的输入,inputreader根据收到数据的类型通用不同的处理函数进行处理,inputreader还会监控eventhub发送的事件信息,包括设备的增、栅扫描事件,并进行相应的处理,最后inputreader会将收到的输入数据发到消息队列中供inputdispatcher处理。inputdispatcher从消息队列中取出inputreader产生的事件进行分发,inputdispatcher在分发前,会对输入进行过滤、拦截,当确定需要使用时,会根据输入内容选择合适的窗口,并写入窗口的事件接受管道中,最后由窗口进行处理,最后在界面上显示。在应用程序框架层注入需要考虑打包的情况,处理较为复杂,通过输入设备注入原始的输入数据,可以较细粒度的重现客户机操作,同时中间没有经过android系统的任何处理,且宿主机是具有root权限的,最后选择在linux设备上注入输入条件,可以降低延迟和提高效率,可选地,linux内核将lxc容器挂载至rootfs所在的分区,包括:获取客户机中的,roofts并将rootfs输入android系统的编译环境中,添加一个与rootfs对应的烧录分区;将rootfs打包成lxcdata.img分区镜像,并将编译好的版本烧录至客户机以完成
分区制作。
28.参阅图3,可选地,根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,包括:s33:创建容器文件系统的创建只读层、容器读写层和挂载点,将只读层和读写层挂载到挂载点;s34:添加宿主机的文件夹到容器的数据卷和对应的标签得到挂载标签,判断数据卷是否为空;s35:若是,表示客户机未使用挂载标签,结束创建过程;s36:若否,则使用函数解析数据卷的字符串,当函数返回的字符数组长度为2,且数据元素均不为空时,则挂载数据卷;否则,提示客户机创建数据卷输入值不正确。
29.本实施例中,启动容器时,创建只读层busybox,创建读写层writelayer(),创建挂载点mnt,并把只读层和读写层挂载到挂载点,将挂载点作为容器的根目录。容器退出时,卸载挂载点mnt的文件系统,删除挂载点,删除读写层writelayer。只有在volume不为空,且使用volume函数解析volume字符串返回的字符数组长度为2,数据元素均为空时,才执行删除挂载函数来处理。对于其余部分,还使用前面的删除函数。删除挂载点和数据卷函数的处理逻辑过程为:卸载volume挂载点的文件系统,保证整个容器的挂载点没有被使用,卸载整个容器文件系统的装载点,删除容器文件系统的挂载点,整个容器退出过程中的文件系统处理就结束了。
30.参阅图4,可选地,挂载数据卷的过程包括:s44:读取宿主机的默认文件目录,根据默认文件目录创建宿主机的初始文件目录,在容器文件系统中创建与默认文件目录对应的装入点;s45:将数据卷从宿主机的初始文件目录中自动挂载到相应的容器中所需挂载的节点以启动容器的挂载过程。
31.本实施例中,将宿主机/root/busybox目录作为文件的根目录,但在容器内对文件的操作会直接影响到宿主机的/root/busybox目录,而真正的容器是要能做到将容器和镜像隔离的,实现在容器中进行的操作不会对镜像产生任何影响的功能。newworkspace()函数是用来创建容器文件系统的,其包括createreadonlylayer(),creatwritelayer()和creatmountpoint(),createreadonlylayer()函数新建busybox文件夹,将busybox.tar解压到busybox目录下,作为容器的只读层。creatwritelayer()函数创建了一个名为writelayer的文件夹,作为容器唯一的可写层。在creatmountpoint()函数中,首先创建了mnt文件夹,作为文件的挂载点,然后把writelayer()目录和busybox目录mount到mnt目录下,最后在newparentprocess()函数中将容器使用的宿主机目录/root/busybox替换成/root/mnt,在newparentprocess()函数中将容器使用的宿主机目录/root/busybox替换成/root/mnt,这样,使用ufs系统启动容器的代码。将容器对应的writelayer和container-init layer删除,而保留镜像所有的内容,本代码在容器退出时会删除writelayer。ufs包usybox实现了将容器和镜像的分离,但容器退出时,容器可写层的所有内容都会被删除,volume可以解决客户机需要将部分数据持久化在容器中的问题。通过将宿主机的目录作为数据卷挂载到容器中,且在容器退出后,数据卷中的内容还能保存在宿主机上。
32.需要说明的是,在容器退出时添加绑定宿主机文件夹到容器数据卷的功能,在文
件的命令中添加-v标签,在函数中将volume传给创建容器的newparentprocess函数和删除容器文件系统的deleteworkspace()函数,继续把volume值传给创建容器文件系统的newworkspace()方法,从而提高容器的灵活性。容器在退出所有可写层的内容,commit子命令的目的是把运行状态下容器的内容存储成镜像保存下来。创建容器时使用ufs对busybox进行包装,使得容器在运行中,若进行写操作时会临时创建出一个可写层,以达到不破坏原有文件系统的目的,若不对容器的写操作做保存,则容器结束时,文件系统的内容与启动容器前相比不会有任何变化,这正好满足了容器的文件系统应采用分层的方法,实现了启动容器应具备的volume数据卷功能和对进行镜像打包的功能。
33.参阅图5,本发明还提供了一种汽车仪表显示系统的启动装置,包括:获取单元,用于获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,其中,汽车仪表显示系统包括宿主机、客户机和linux内核,宿主机通过linux内核与客户机连接,属性信息包括输入驱动信息、输出驱动信息和版本;构建单元,用于根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs;启动单元,用于linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机。
34.本实施例中,linux内核名字空间机制是将原来共享的全局资源拆分成很多个组进程共享的资源,当一个名字空间里面的所有进程都退出时,名字空间也会被内核销毁,即当名字空间是动态创建与销毁的,伴随进程创建,随着进程退出而销毁,基于角访问控制的uts名字空间随机化,来阻止主机信息泄露,将uts名字空间固定的初始值进行随机化处理,根据客户机需求和可信程度,设立不同类别的角,不同类别角获得uts名字空间的信息是不同的,宿主机返回用户,有需求且可信的角可获得真实有用信息如系统版本信息,不可信的客户机获取的信息是进行随机化处理过的信息。uts名字空间包含了运行内核的名称、版本、底层体系结构类型等信息,提供了主机名和域名的隔离,进程可以在调用函数clone()或unshare()时制定clone_newuts标识来创建uts名字空间,也可以根据需要创建自己独特的uts名字空间,其中包含主机名和域名等,虽然uts名字空间内包装的utsname是从原始数据复制而来,用户进程可以在uts名字空间内拥有属于自己的主机名hostname和域名domainname标识,这个标识可让uts名字空间内的执行环节独立于宿主机和其上的其他容器,从而提高了汽车仪表显示系统的启动速率。
35.在另一个可行的实施例中,本发明还提供了一种存储介质,存储介质上存储有指令,指令被处理器执行时实现上述的汽车仪表显示系统的启动方法的步骤。
36.在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
37.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
38.以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
技术特征:
1.一种汽车仪表显示系统的启动方法,其特征在于,包括以下步骤:获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,其中,汽车仪表显示系统包括宿主机、客户机和linux内核,宿主机通过linux内核与客户机连接,属性信息包括输入驱动信息、输出驱动信息和版本;根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs;linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机。2.根据权利要求1所述的汽车仪表显示系统的启动方法,其特征在于,启动lxc容器和初始化与rootfs所在的分区对应的android系统以完成汽车仪表显示系统的正常开机,包括:获取lxc容器的运行环境并根据运行环境启动容器环境的内部命令生成容器运行指令,并在android系统的内核中运行容器运行指令;根据容器运行指令获取容器的进程信息,根据进程信息启动android系统中的init进程得到android的核心服务,其中,容器的进程信息包括init.lxc、sh和ps,init.lxc为容器的启动程序,sh为容器内部的shell,ps为调用的命令。3.根据权利要求2所述的汽车仪表显示系统的启动方法,其特征在于,android系统的最底层为linux的输入子系统,客户机作为linux输入子系统的用户,通过对操作linux输入子系统创建的设备节点和硬件层进行交互,android系统的输入模块包括输入事件收集器、输入事件读取器、输入事件分发器和输入设备驱动;输入事件收集器用于从输入设备中收集输入事件,对这些输入事件进行识别与封装,并提交给上一层进行处理;输入事件读取器用于从输入事件收集器中获取输入事件,将事件交给输入事件分发器;输入事件分发器用于接收输入事件读取器传来的事件信息并管理处理该事件的目标窗口;输入设备驱动用于接收物理设备的事件输入得到事件信息,并将事件信息传给输入事件收集器;当客户机对输入设备进行操作时,输入设备驱动会捕捉该操作,输入事件收集器不断从输入设备驱动中获取待处理的事件,输入事件读取器从输入事件收集器中获取原始事件并进行加工处理事件,将处理事件传给输入事件分发器,输入事件分发器将接收到的处理事件分发到合适的窗口中。4.根据权利要求3所述的汽车仪表显示系统的启动方法,其特征在于,输入事件收集器的执行过程包括:获取当前容器的编号和当前运行环境的容器编号,若运行的容器环境不是当前容器对应的前台系统,则丢掉所有的输入事件;若运行的容器环境是当前容器对应的前台系统,则不做任何的操作,将事件信息传给下个处理模块。5.根据权利要求2所述的汽车仪表显示系统的启动方法,其特征在于,android系统的
显示模块包括android应用程序所产生的图像数据、在显示模块中用于管理应用程序所产生的图像数据的窗口管理服务、经过窗口管理服务加工处理后的显示数据、与硬件层的屏幕直接联系的系统服务,android系统的显示模块执行过程包括:每一个应用将自己的显示内容绘制到一个图像数据中,将图像数据传递给窗口管理服务进行处理,根据客户机当前显示的状态对图像数据添加相应的参数,系统服务获取到图像数据的参数后对所有图像数据合成为显示数据,系统服务将需要显示的显示数据传递给屏幕设备,屏幕显示该显示数据的内容。6.根据权利要求1所述的汽车仪表显示系统的启动方法,其特征在于,linux内核将lxc容器挂载至rootfs所在的分区,包括:获取客户机中的,roofts并将rootfs输入android系统的编译环境中,添加一个与rootfs对应的烧录分区;将rootfs打包成lxcdata.img分区镜像,并将编译好的版本烧录至客户机以完成分区制作。7.根据权利要求1所述的汽车仪表显示系统的启动方法,其特征在于,根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,包括:创建容器文件系统的创建只读层、容器读写层和挂载点,将只读层和读写层挂载到挂载点;添加宿主机的文件夹到容器的数据卷和对应的标签得到挂载标签,判断数据卷是否为空;若是,表示客户机未使用挂载标签,结束创建过程;若否,则使用函数解析数据卷的字符串,当函数返回的字符数组长度为2,且数据元素均不为空时,则挂载数据卷;否则,提示客户机创建数据卷输入值不正确。8.根据权利要求7所述的汽车仪表显示系统的启动方法,其特征在于,挂载数据卷的过程包括:读取宿主机的默认文件目录,根据默认文件目录创建宿主机的初始文件目录,在容器文件系统中创建与默认文件目录对应的装入点;将数据卷从宿主机的初始文件目录中自动挂载到相应的容器中所需挂载的节点以启动容器的挂载过程。9.一种汽车仪表显示系统的启动装置,其特征在于,包括:获取单元,用于获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取linux内核的属性信息,其中,汽车仪表显示系统包括宿主机、客户机和linux内核,宿主机通过linux内核与客户机连接,属性信息包括输入驱动信息、输出驱动信息和版本;构建单元,用于根据linux内核的属性信息对宿主机进行虚拟化得到lxc容器,并在客户机内建立与lxc容器对应的分区存放根目录记为rootfs;启动单元,用于linux内核将lxc容器挂载至rootfs所在的分区,启动lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机。10.一种存储介质,存储介质上存储有指令,指令被处理器执行时实现上述权利要求1-8任一项所述的汽车仪表显示系统的启动方法的步骤。
技术总结
本发明公开了汽车仪表显示系统的启动方法、装置及存储介质,通过获取汽车仪表显示系统的预加载指令,并对预加载指令进行编译获取Linux内核的属性信息,根据Linux内核的属性信息对宿主机进行虚拟化得到Lxc容器,并在客户机内建立与Lxc容器对应的分区存放根目录记为rootfs,Linux内核将Lxc容器挂载至rootfs所在的分区,启动Lxc容器与rootfs所在的分区对应的操作系统以完成汽车仪表显示系统的正常开机,保证部署在任何操作系统环境中的软件都能始终如一地正常运行,可以提高汽车仪表显示系统的启动速度、安全性和灵活性。安全性和灵活性。安全性和灵活性。