一种基于存储卡的量产系统固件量产方法与流程

文档序号:17948485发布日期:2019-06-18 23:50阅读:267来源:国知局
本发明涉及一种基于存储卡的量产系统固件量产方法,属于嵌入式系统量产领域。
背景技术
::随着消费类电子产品的普及以及物联网技术的发展,物联网产品具有的万物互联的本质使其广泛应用于网络的融合中,产品的形态也越来越小型化,简单化。功能越来越智能化,价格也越来越便宜。电子产品丰富功能一般都是通过固件(firmware,写入到产品存储介质内的程序,决定着硬件设备的功能和性能,是硬件设备的灵魂)来完成的,芯片设计厂商根据芯片规格定义支持多种外部存储介质(nandflash、norflash、emmc等),由客户自行选择最适合自己产品功能的存储介质,同时也支持多种方式的固件烧写方式,由客户根据产品定义去选择适合自己的一种,将产品的操作系统固件烧写到产品内部的介质中。产品方案厂商为降低bom(billofmaterial物料清单)表的成本,尽可能去掉产品规格外的元器件,并且设计上能用软件实现的也尽量避免使用硬件。目前在汽车电子、无人机、公共监控等行业领域,大部分产品不再使用usb进行设备之间的通讯连接,而是采用wifi、4g等方式进行通讯,使用sd/tf卡进行音视频数据存储,使用卡量产(基于存储卡的量产系统)的方式进行固件的烧写也成为一个基本的产品需求,而不会单独使用usb来完成固件烧写的操作。工厂在对这些电子产品生产时,需要将固件以某种方式写入到存储卡来制作成量产卡,一般需要专门的制卡工具软件进行制卡,流水线上的工人通过量产卡对产品进行固件烧写操作。制卡工具除了将固件烧写到量产卡之外,也需要将量产程序也写入到量产卡上,所以量产卡的数据分布对量产操作的稳定性和产品的量产速度极为重要。基于存储卡的量产系统需要与电子产品的启动系统相兼容,这样产品就不需要额外的外围电路和软件操作,一般芯片内部会固化一段引导程序到芯片的rom(readonlymemory只读存储器),固化程序执行简单的引导功能,运行的内存空间大多也是sram(staticrandomaccessmemory静态随机存取储存器),sram存放rom代码的数据和栈,sram出于成本的考虑容量也会尽可能地小,但是量产程序可能比较大,加载时需要比较大的sram硬件才能完全加载成功,如果直接使用dram,加载至dram空间,这时需要固化在芯片的引导程序执行dram初始化的代码,会导致芯片对dram的兼容性比较差。这样在量产程序运行之前需要再存放若干个引导程序,运行在sram上,逐步将dram初始化之后,才将量产程序引导运行至dram上,基于存储卡的量产系统的数据分布也需要考虑产品的这种需求.为了满足上述的产品在生产过程中固件烧写需求,同时解决只有sd/tf外部存储的接口产品的固件烧写的需求,并且尽可能减少sram等硬件成本的付出,需要设计一种基于存储卡的固件量产方法。技术实现要素:本发明提供一种基于存储卡的量产系统固件量产方法,采用逐级引导的过程,逐步加载量产程序,来执行复杂的固件量产功能。本发明的技术方案第一方面为一种基于存储卡的量产系统固件量产方法,所述方法包括以下步骤:通过固件烧写目标的启动引导程序查找并解析存储卡中的量产系统数据,所述量产系统数据采用自定义的ebt数据结构存储于逐级引导的分区中;逐级引导加载各分区中的量产系统数据,根据各分区的索引信息将系统固件逐级引导至固件烧写目标实现对系统固件的烧写。进一步,所述查找并解析存储卡中的量产系统数据,包括:从存储卡的0x0地址获取量产系统数据的数据结构信息,所述数据结构信息包括数据头信息和分区信息;根据所述数据结构信息逐级解析并加载存储卡中各分区的量产系统数据。进一步,所述的根据所述数据结构信息逐级解析并加载存储卡中各分区的量产系统数据之前还包括:根据所述数据头信息确认并校验当前存储卡中的量产系统数据是否为有效的ebt数据。进一步,所述数据头信息包括用于确定数据类型的魔数、用于校验数据有效性的校验码、用于标识分区数量的分区数量标识、用于标识数据头长度的数据长度标识以及用作保留空间的占位符。进一步,所述分区信息包括分区名称、分区占用扇区大小、分区起始扇区地址、分区索引、分区属性、分区中数据占用空间长度以及未使用的保留空间。进一步,所述逐级引导的分区包括:引导程序分区,用于存储引导程序,所述引导程序用于解析ebt数据并根据其索引引导加载参数分区;参数分区,用于存储初始化参数信息,所述初始化参数传递给引导程序以调用执行相应的初始化操作;量产程序分区,用于存储量产程序,所述量产程序被引导程序引导加载以执行量产操作;固件分区,用于存储量产系统固件,所述量产系统固件被量产程序引导烧写入固件烧写目标。进一步,所述根据所述数据结构信息逐级解析并加载存储卡中各分区的量产系统数据是通过分区索引号逐级查找并加载各分区的数据。本发明的技术方案第二方面为一种计算机装置,包括存储器、处理器及储存在存储器上并能够在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述第一方面的方法。本发明的技术方案第三方面为一种计算机可读存储介质,其上储存有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面的方法。本发明的有益效果为:支持基于存储卡的方式将固件烧写到嵌入式设备的存储介质中,不再需要使用usb等其他的方式进行固件烧写操作,节省硬件成本;使用自定义数据结构且进行分区引导加载,降低了应用程序之间的耦合性,提高了量产过程的稳定性;采用逐级引导的方式逐步加载量产程序以执行复杂的固件量产功能,使得引导过程可以分散在多介质上运行,可以加快加载启动量产程序的速度,且减少对ram的空间需求。附图说明图1所示为根据本发明的方法的基本流程图;图2所示为根据本发明方法的一种具体实施方式的流程框图;图3所示为根据本发明实施方式的分区示意图。具体实施方式以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本公开中所使用的上、下、左、右等描述仅仅是相对于附图中本公开各组成部分的相互位置关系来说的。在本公开中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本
技术领域
:的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。本发明的基于存储卡的量产系统固件量产方法能够实现通过存储卡的方式将固件烧写到嵌入式设备的存储介质中(nor、nand、emmc),可以解决在只有卡槽的嵌入式产品中,不用额外再设计usb接口进行固件烧写,降低硬件成本。参考图1,一种基于存储卡的量产系统固件量产方法,所述方法包括以下步骤:s1、通过固件烧写目标的启动引导程序查找并解析存储卡中的量产系统数据,所述量产系统数据采用自定义的ebt数据结构存储于逐级引导的分区中;s2、逐级引导加载各分区中的量产系统数据,根据各分区的索引信息将系统固件逐级引导至固件烧写目标实现对系统固件的烧写。进一步,所述查找并解析存储卡中的量产系统数据,包括:从存储卡的0x0地址获取量产系统数据的数据结构信息,所述数据结构信息包括数据头信息和分区信息;根据所述数据结构信息逐级解析并加载存储卡中各分区的量产系统数据。其中数据头信息如表1所示,名称为ebt_header,长度固定为32byte,功能用来标识整个ebt的信息,包括如下信息:magic魔数必须为“ebth”;check_code整个ebt结构的校验码,check_code参与校验的值默认为0x12345678;part_cnt表示ebt结构包含的有效分区个数;head_size为ebt_header的固定长度32byte。字节名称含义0~3magic魔数,必须为"ebth"4~7check_code校验码8~11part_cntebt内所有的分区数量12~27resv默认0,保留28~31header_size结构体长度,必须为32表1其中分区信息如表2所示,名称为boot_part,每个ebt数据成员固定为64byte,ebt结构的boot_parts数组的元素由此数据结构组成,表示ebt结构中包含分区的数据类型。具体包含如下信息:part_name分区的名字,不超过16byte,part_size表示分区实际占用空间存储卡的扇区数,part_start分区在存储卡中的起始扇区地址(相对于整个存储卡)、part_index分区索引,由0开始计数,引导程序需要知道自己需要扫描的分区索引号。part_attr分区属性,主要包含以下属性:part_attr_app:当前分区存放的是应用程序;part_attr_data:当前分区存放的是数据,包含一些参数等信息;part_attr_fw:当前分区是要烧写的固件,是量产程序需要解析和执行烧写操作的固件数据;part_file_len表示分区内数据真实长度,以byte为单位。字节名称含义0~15part_name分区名称,最大16byte16~19part_size分区占用的扇区大小20~23part_start分区起始的扇区地址24~27part_index分区在整个ebt中的索引28~31part_attr分区属性32~39part_file_len数据文件占用的字节数40~63resv保留表2本发明要求处理的目标量产系统满足以下条件:1)嵌入式产品上电后需要一个能够解析存储卡的量产系统的ebt数据结构启动引导程序(目前是固化到rom中的启动代码);2)需要引导程序或者量产程序记录自己所处的part_index,并且可以自行解析ebt数据结构;3)量产程序可以独立执行系统固件的解析和烧写操作。本发明的大致流程是:采用自定义的ebt(extendboottable)结构来描述量产系统的数据在存储卡上的分布,将量产相关的程序、数据以及系统固件按照分区的方式进行存储,ebt结构可以快速可靠的索引读取分区内的程序和数据,采用逐级引导的方式可以快速加载并启动量产程序,减少ram的使用和模块间的耦合性,提升量产系统的可靠性。基于存储卡的量产系统,其相关的引导程序、量产程序、数据以及系统固件都采用分区的方式进行存储,使用ebt数据结构进行管理。嵌入式芯片产品上电后,引导程序解析ebt数据结构(由固化到rom中的启动代码执行)、根据boot_part的part_index成员找到要加载执行的boot_part分区,根据其part_start和part_file_len加载具体的二进制程序和代码,加载过程从part_index为0的索引开始进行,逐级启动多个引导程序,直至启动到固件量产程序,引导程序和量产程序本身也需要解析ebt数据结构,以便自己执行下个程序或者解析固件分区。量产程序启动后,根据part_index和part_attr查找固件分区的boot_part,然后根据boot_part去校验固件,并进行固件烧写操作。量产系统在存储卡内部的分区分布如图3所示,ebt数据分区存放在0x0地址,cpu上电后固化引导程序会直接从存储卡的0x0地址读取ebt数据。除了ebt数据分区外,ebt数据结构的boot_part与存储卡上的真实分区的分布一一对应,具体包括:引导程序分区,用于存储引导程序,所述引导程序用于解析ebt数据并根据其索引引导加载参数分区;参数分区,用于存储初始化参数信息,所述初始化参数传递给引导程序以调用执行相应的初始化操作;量产程序分区,用于存储量产程序,所述量产程序被引导程序引导加载以执行量产操作;固件分区,用于存储量产系统固件,所述量产系统固件被量产程序引导烧写入固件烧写目标;保留分区,用作保留空间的分区,本发明的ebt数据结构未使用到。本发明的具体实现如图2所示:芯片产品上电后,固化在rom中的启动引导程序启动,启动引导程序从存储卡的0x0地址获取ebt结构的信息,首先获取ebt_header信息,通过magic确认是否为ebt结构的数据,然后根据ebt_header的part_cnt成员确定当前ebt数据包含的有效分区数量,进一步确认当前ebt数据的整个长度为32+64*part_cnt,然后使用check_code对整个ebt结构进行校验,确认ebt结构合法有效后,开始遍历查找part_index为0的boot_part分区结构,根据part_name获取分区名称为引导程序booster,然后根据boot_part的part_start和part_file_len加载引导程序booster,可以对booster程序进行校验,然后启动booster。booster程序启动后,需要完成自身模块的主要功能,初始化dram、gpio等,这些信息存储在参数分区中,booster程序首先查找part_index为1的boot_part分区结构,获取分区名称为param,然后根据boot_part的part_start和part_file_len参数分区内容,booster获取这些参数后,执行初始化dram参数和配置gpio等操作。准备就绪后,booster查找part_index为2的boot_part分区结构,获取分区名称为量产程序leaver,然后根据boot_part的part_start和part_file_len量产程序leaver分区内容,同时校验量产程序leaver,校验通过后,加载并运行量产程序leaver。量产程序leaver启动后,执行量产操作,需要读取进度图片等显示量产进度,为了减少模块间的耦合性,这些图片资源等也会放在parm参数分区,量产程序查找part_index为1的boot_part分区结构(参照上述对参数的获取),获取分区名称为param,解析分区的图片资源。量产程序准备就绪后,接着进行对固件的解析操作,首先查找part_index为3的boot_part分区结构,获取分区名称为fw.pkg,然后根据boot_part的part_start和part_file_len固件分区内容,校验固件后,整个基于存储卡的量产系统引导成功,量产程序开始执行对固件的量产。应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、ram、rom等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的基于存储卡的量产系统固件量产方法和技术编程时,本发明还包括计算机本身。计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1