一种用于系统引导时出图及平滑过渡到内核的方法与流程

文档序号:18940035发布日期:2019-10-23 01:04阅读:550来源:国知局
一种用于系统引导时出图及平滑过渡到内核的方法与流程

本发明涉及一种用于系统引导时出图及平滑过渡到内核的方法,属于计算机领域。



背景技术:

在传统摄像头出图方式中,想要从摄像头抓拍一幅图像显示出来,需要在系统内核完全加载完毕后方可启动软件控制摄像头输入,最终输出数据图像。此方式存在的缺陷就是,出图时间过长,在一些需要快速出图的场景下无法满足要求,例如在车载系统中的快速倒车场景下,用户启动车辆后需要倒车,需等到系统内核启动后才可以看到后置摄像头的图像。

现有技术公开了一种近似技术方案1,其具体为一种开机显示动画的方法及电子设备(专利号:cn201210523632),该技术方案通过系统引导阶段提前准备动画资源,在过渡到系统内核阶段时会传一些必要参数给系统内核,系统内核阶段就可以直接显示动画,达到开机显示动画的目的。

现有技术公开了一种近似技术方案2,其具体为一种冷启动快速显示倒车视频的装置和方法(专利号:cn201711231125),该方案同样是在系统引导启动视频输入和输出装置,同样实现平滑过渡到系统内核阶段,但是其需要三个及以上的buffer才能完成csi获取数据并显示。



技术实现要素:

本发明提供了一种用于系统引导时出图及平滑过渡到内核的方法,在系统引导阶段就提前初始化摄像头和片端摄像头控制接口,并实现与显示对接;在系统引导内核启动过程中实现显示摄像头实时画面不间断,即可以平滑过渡到系统内核;如果最终需要在应用程序中启动相机串行接口,那么驱动需要做设配,即最后在应用程序加载后实现接管相机串行接口。

本发明的技术方案包括一种用于系统引导时出图及平滑过渡到内核的方法,其特征在于,该方法包括:s100,在系统引导阶段前对传感器和相机串行接口进行初始化,对接显示后预览画面;s200,在系统内核加载后,将系统引导将相机串行接口平滑对接到系统内核阶段;s300,在应用程序启动后,使应用程序接管相机串行接口。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s100具体包括:s110,在系统引导阶段使用轮询的方式查找是否需要进入倒车功能,如果是则对显示进行初始化,并实现图像显示接口;s120,从解码时间标签中获取csi工作所需时钟,并根据初始值对其进行初始化;s130,解析配置文件,获取传感器需要的硬件资源和相机串行接口的子设备编号;s140,对使用到的twi号进行初始化;s150,对相机串行接口各个子设备进行注册;s160,创建dma中断处理函数,在帧头中断中获取上一帧的数据后直接送显示,同时设置下一帧数据的地址;s170,对传感器执行上电操作;s180,初始化相机串行接口各个子设备寄存器,打开总体数据流。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s110具体包括:s111,系统引导启动后会进入轮询状态--判断gpio口是否拉高,如果拉高,则进入倒车状态--初始化相机串行接口,抓拍画面进行显示;s112,在系统引导阶段中内核启动时候,轮询结束,如果此时用户需要倒车,则不会立即响应,当内核中相机串行接口初始化后,使用原有的内核响应快速倒车的方式。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s120具体包括:s121,通过设置解码时间标签的节点别名获取节点号;s122,通过地址偏移,遍历所有时钟节点,保存于数组中;s123,依次获取各个时钟,并根据它们之间的关系,依次设置时钟对应的时钟源;s124,根据传感器挂载的接口,初始化需要使用到的时钟。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s180具体包括:调用i2c接口对传感器的寄存器进行初始化,以及,根据配置信息一次对mipi寄存器、isp寄存器、scaler寄存器、dma寄存器及parser寄存器初始化,其中mipi寄存器、isp寄存器及parser寄存器为共享寄存器,设置有标志位,其中标志位用于避免重复初始化。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s180还包括:其中对根据配置信息对isp寄存器进行初始化包括以下步骤:在系统内核运行isp库得到指定的isp参数,并将其存放于数组a中;为isp分配加载寄存器地址和两个存放isp参数的地址;将数组a中的数据使用memcpy依次负责到分配好的load寄存器地址和两个存放isp参数的地址中;根据配置信息设置isp寄存器;在开启isp数据流前,将加载寄存器地址和两个存放isp参数的地址对应的缓存进行刷新。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s200具体包括:s21,关闭dma中断,屏蔽dma中断处理函数;s22,在数据流打开之前,获取一帧数据内存地址,并把内存地址写到dma寄存器,同时将内存姿势发给显示装置进行显示;s23,获取lowmem地址,将lowmem地址高位往低位为csi和isp预留一块地址;s24,根据图片的尺寸和isp需要的统计值计算缓存地址、加载寄存器地址与两个存放isp参数的地址的总合;s25,在设备树解码时间标签内存预留区域进行预留;s26,使用预留的地址作为图像缓存地址。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s300具体包括:s310,内核加载启动完毕后,加载相机串行接口的文件时,屏蔽与时钟和传感器上下电的对应操作;s320,应用第一次启动时,除了资源申请和链路的创建等外,屏蔽有关传感器上电和配置各个子设备寄存器操作;s330,复位各个子设备使能寄存器函数完成使能dma和isp的中断;s340,应用程序启动完成后,相机串行接口出图方式不再由硬件自动搬移过程,而是更改为系统内核中断处理函数中缓存轮询管理方式,此时相机串行接口正式由应用程序进行接管。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s310具体包括:s311,屏蔽可用时钟函数和传感器上电函数;s312,检查传感器与i2c是否链通,直接返回正确,以创建视频节点;s313,屏蔽不可用时钟函数和传感器下电函数。

根据所述的用于系统引导时出图及平滑过渡到内核的方法,其中s330具体包括:s331,将各个子设备的使能寄存器设置为不可用状态;s332,将各个子设备的使能寄存器设置为可用状态;s333,在将dma和isp使能寄存器设置为可用前,使能dma和isp中断使能寄存器。

本发明的有益效果为:选择在引导内核启动的系统引导阶段阶段初始化相机串行接口,达到急速出图的效果,然后在实现平滑过渡到系统内核,确保可以一直预览画面。

附图说明

图1所示为根据本发明实施方式的本发明结构流程示意图;

图2所示为根据本发明实施方式的数据帧在csi和显示之间的流通图;

图3所示为根据本发明实施方式的四路智能后视镜快速倒车编码通路的数据流框图;

图4所示为根据本发明实施方式的内核阶段实现平滑过渡的流程图。

具体实施方式

本发明的技术方案公开了一种用于系统引导时出图及平滑过渡到内核的方法,适用于适用于基于linux内核的嵌入式操作系统。以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。

需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本公开中所使用的上、下、左、右等描述仅仅是相对于附图中本公开各组成部分的相互位置关系来说的。在本公开中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本技术领域的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种元件,但这些元件不应限于这些术语。这些术语仅用来将同一类型的元件彼此区分开。例如,在不脱离本公开范围的情况下,第一元件也可以被称为第二元件,类似地,第二元件也可以被称为第一元件。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。

图1所示为根据本发明实施方式的本发明结构流程示意图。u-boot阶段实现基本功能(s1):在u-boot阶段提前把sensor(传感器)和csi(相机串行接口)初始化,对接显示后预览画面;kernel阶段实现平滑过渡(s2):在kernel加载后,需要实现u-boot阶段csi平滑对接到kernel阶段;应用层阶段实现工作接管(s3):在应用程序(比如androidcameraapk)起来后,需要实现应用程序对csi的接管操作;

本发明适用于基于linux内核的嵌入式操作系统,所以步骤(s3)中提及的应用程序可以是linux应用层程序,也可以是androidapk。

图2所示为根据本发明实施方式的数据帧在csi和显示之间的流通图。该图为四路智能后视镜快速倒车编码通路的数据流框图,四个camera通过sensor(转mipi芯片)交织为一路输入到mipi子设备,在parser子设备处解交织为四路送往四路dma,最终形成四路数据输出。假设智能后视镜出图参数为:四路通路最终显示的数据类型为nv12,帧率为25fps,分辨率为480p(640*480)。即智能后视镜在u-boot阶段通过四个camera采集数据,然后csi与de对接,最终显示在屏幕上,达到快速倒车目的。

图3所示为根据本发明实施方式的四路智能后视镜快速倒车编码通路的数据流框图。为四路智能后视镜快速倒车编码通路的数据流框图,四个camera通过sensor(转mipi芯片)交织为一路输入到mipi子设备,在parser子设备处解交织为四路送往四路dma,最终形成四路数据输出。假设智能后视镜出图参数为:四路通路最终显示的数据类型为nv12,帧率为25fps,分辨率为480p(640*480)。即智能后视镜在u-boot阶段通过四个camera采集数据,然后csi与de对接,最终显示在屏幕上,达到快速倒车目的。

具体地,步骤(s1)包含以下步骤:

(s11)在u-boot阶段使用轮询的方式查找是够需要进入倒车功能,如果是则对显示进行初始化,并实现图像显示接口。

(s12)从dts中获取csi工作所需时钟,并根据初始值对其进行初始化。

(s13)解析配置文件,获取sensor需要的硬件资源和csi的子设备号。

(s14)对使用到的twi号进行初始化。

(s15)csi各个子设备进行注册。

(s16)编写dma中断处理函数,在帧头中断中获取上一帧的数据后直接送显示,同时设置下一帧数据的地址。

(s17)sensor上电操作。

(s18)初始化csi各个子设备寄存器,打开了整个数据流。

首先我们需要需要把sensor的硬件资源信息在配置文件里面注明,最终我们会去获取配置文件信息对sensor执行下面提及的两点。其次编写sensor驱动程序,sensor驱动程序主要注意的两点就是:(1)sensor上电步骤,这是sensor工作后与外界(通过i2c与cpu通讯)通讯的基础;(2)为sensor配置一个固定分辨率和帧率的寄存器列表,之后通过i2c对sensor进行写寄存器操作。

进一步地,步骤(s11)包括以下步骤:

(s111)u-boot启动后会进入轮询状态--判断gpio口是够拉高,如果拉高,则进入倒车状态--初始化csi,抓拍画面进行显示。

(s112)在u-boot引导内核启动时候,轮询结束。如果此时用户需要倒车,则不会马上响应,需要内核中csi初始化后,在内核相应快速倒车,即使用原有的内核响应快速倒车的方式。

进一步地,步骤(s12)包含以下步骤:

(s121)通过设置dts的节点别名获取节点号。

(s122)通过地址偏移,遍历所有时钟节点,保存于数组中。

(s123)依次获取各个时钟,并根据它们之间的关系,依次设置时钟对应的时钟源。

(s124)根据sensor挂载的接口,初始化需要使用到的时钟。

进一步地,步骤(s13)包含以下步骤。

(s131)封装解析配置文件信息函数,包括整型数、字符串和gpio口。

(s132)依次获取sensor需要的硬件资源和csi的子设备号。

进一步地,步骤(s15)包含以下步骤:

(s151)mipi子设备注册。

(s152)parser子设备注册。

(s153)dma子设备注册。

(s154)isp子设备注册。

(s155)scaler子设备注册。

如图三所示,我们需要对四条通路上的子设备进行注册,但是值得注意的是mipi、parser和isp属于共享部分,只需要注册一次,所以需要添加标志位进行判断,避免重复注册。所谓的标志位,即每个子设备都有一个计数,计数只有等于1才会去注册,而计数为其它值则忽略此步骤。

进一步地,步骤(s18)包含以下步骤:

(s181)调用i2c接口对sensor的寄存器进行初始化。

(s182)根据配置信息对mipi寄存器进行初始化。

(s183)根据配置信息对isp寄存器进行初始化。

(s184)根据配置信息对scaler寄存器进行初始化。

(s185)根据配置信息对dma寄存器进行初始化。

(s186)根据配置信息对parser寄存器进行初始化。

与步骤(s15)类似,我们需要对四条通路上的子设备的寄存器进行初始化,但是值得注意的是mipi、parser和isp属于共享部分,只需要初始化一次,所以需要添加标志位进行判断,避免重复初始化。所谓的标志位,即每个子设备都有一个计数,计数只有等于1才会去初始化,而计数为其它值则忽略此步骤。

进一步地,步骤(s183)包含以下步骤:

(s1831)在kernel跑isp库得到正确的isp参数(需要针对特定的sensor),并将其存放于数组a中。

(s1832)为isp分配load寄存器地址和两个存放isp参数的地址。

(s1833)将数组a中的数据使用memcpy依次负责到分配好的load寄存器地址和两个存放isp参数的地址中。

(s1834)根据配置信息设置isp寄存器。

(s1835)在开启isp数据流前,把load寄存器地址和两个存放isp参数的地址对应的cache进行刷新,避免memcpy后cache数据没有及时更新到申请的地址里面。

图4所示为根据本发明实施方式的内核阶段实现平滑过渡的流程图。步骤(s2)包含以下步骤:

(s21)关闭dma中断,屏蔽dma中断处理函数。

(s22)在数据流打开之前,我们申请一帧数据内存地址,并把它写到dma寄存器,同时把它发给显示,数据流开启后csi会不断往这一块地址中存放数据帧,而显示也会不断取出数据帧来显示,这样就可以完成让硬件自动完成帧数据从csi到显示的搬移。

(s23)获取lowmem地址,我们将会从lowmem地址高位往低位为csi和isp预留一块地址,避免过渡到kernel后csi和isp操作到被使用的地址导致kernel崩溃。

(s24)根据图片的尺寸和isp需要的统计值buffer地址、load寄存器地址与两个存放isp参数的地址的总合,以此计算需要预留内存大小。

(s25)为了避免预留的地址在kernel起来后会被其他模块申请使用,需要在设备树dts内存预留区域进行预留。

(s26)图像buffer地址和(s1832)中isp所需的buffer地址不再需要申请,可以直接使用预留的地址。

假设我们获取的lowmem的地址范围是0xc0000000-0xe1800000,预留地址是由高往低预留,即从0xe18000000往下预留。而四路480p图像大小和isp所需的内存大小为:640*480*

1.5*4+0x12c00=0x1c2000+0x12c00=1d4c00b。我们取整为0x200000=2m。所以需要预留的地址范围是0xe1600000-0xe1800000。

进一步地,步骤(s3)包含以下步骤:

(s31)内核加载启动完毕后,加载csiko文件时,与时钟和sensor上下电的有关操作需要屏蔽。

(s32)应用第一次启动时,除了资源申请和链路的创建等外,有关sensor上电和配置各个子设备寄存器操作需要屏蔽。

(s33)由于需要使能dma和isp的中断,所以需要实现复位各个子设备使能寄存器函数。

(s34)应用程序启动完成后,csi出图方式不再由硬件自动搬移过程,而是更改为kernel中断处理函数中buffer轮询管理方式,此时csi正式由应用程序进行接管。

进一步地,步骤(s31)包含以下步骤:

(s311)屏蔽enable时钟函数和sensor上电函数。

(s312)去除检查sensor与i2c是否链通,直接返回正确,以创建video节点。

(s313)屏蔽disable时钟函数和sensor下电函数。

进一步地,步骤(s33)包含以下步骤:

(s331)先disable各个子设备的使能寄存器。

(s332)enable各个子设备的使能寄存器。

(s333)在enabledma和isp使能寄存器前,使能dma和isp中断使能寄存器。

本发明适用于基于linux内核的嵌入式操作系统,所以对于智能后视镜android系统来说同样适用。由于android系统需要经过u-boot系统和kernel系统双系统启动后才可以启动android,最后启动androidcameraapk。所以本方法缩短出图时间在android系统上显得极为重要。

本发明的方案中的u-boot只是表示引导内核启动的程序而已,所以只要在bootloader中完成上述步骤(s1),并使用上述步骤(s2)实现平滑过渡到需要引导启动的系统,都是替换方案。其中bootloader可以是u-boot、e-boot、redboot和vivi。

对于编码产品来说:运动相机需要1s冷启动出图,经过实际计算u-boot阶段csi出图时间为80ms左右,相比较之下kernel阶段出图需要220ms(1080p),就单纯csi来说优化了140ms左右。

对于车载产品来说:在车载上有个快速倒车的需求,即在开机后倒车需要快速得到车后方摄像头输出的画面,满足客户体验效果。

应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。

此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。

进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、ram、rom等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。

计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。

以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1