启动加载程序镜像数组嵌入应用程序存储区的自动映射方法、装置及存储介质与流程
本发明涉及嵌入式系统,特别涉及启动加载程序镜像数组嵌入应用程序存储区的自动映射方法、装置及存储介质。
背景技术:
1、现有技术中,嵌入式产品开发中常采用启动加载程序(bootloader,boot)与应用程序(application,app)分离的双工程架构。生产发布时,通常需要分别生成启动加载程序镜像和应用程序镜像,再通过外部脚本、烧录工具或人工合并方式生成最终烧录文件。
2、若启动加载程序镜像与应用程序镜像的合并、地址映射依赖人工处理,容易出现地址偏移错误、镜像遗漏、版本不一致等问题,影响量产效率和软件发布可靠性。
3、现有技术中,人工合并十六进制(hex)文件依赖人工步骤,容易因文件路径、版本、地址参数错误导致烧录文件异常;外部脚本拼接与编译工程割裂,闪存(flash)地址、长度变化后脚本需要同步维护且缺少编译器校验;独立烧录启动加载程序和应用程序增加生产节拍,且一旦某一步烧录失败或版本不匹配会导致设备启动异常。
4、因此,如何在应用程序工程编译阶段自动引入启动加载程序镜像、自动绑定指定闪存区域、自动参与链接生成最终烧录文件,是本领域亟需解决的问题。
5、因此,现有技术还有待改进和提高。
技术实现思路
1、本发明提供启动加载程序镜像数组嵌入应用程序存储区的自动映射方法、装置及存储介质,旨在解决现有技术中启动加载程序镜像与应用程序镜像的合并、地址映射和版本同步依赖人工处理或外部脚本,导致地址偏移、版本不一致、烧录文件异常且缺乏编译器校验的技术问题。
2、本发明的第一方面,提供启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,所述方法包括:
3、获取原始镜像文件,按字节顺序解析所述原始镜像文件得到镜像数据,生成目标数组文件及其对应的目标头文件,所述目标数组文件包含启动加载程序的全部二进制数据,所述目标头文件用于记录所述目标数组文件的长度、起始地址和校验信息;
4、在所述目标数组文件对应的对象定义上添加段属性声明,得到目标数组对象并将所述目标数组对象放入预定义输入段;
5、在应用程序工程的链接脚本中,为所述预定义输入段分配独立的目标闪存存储区,所述目标闪存存储区的地址区间与启动加载程序预期占用地址一致,并将所述预定义输入段映射至所述目标闪存存储区;
6、将所述目标数组文件加入所述应用程序工程并编译链接,得到目标代码,所述目标代码包含目标应用程序的指令代码及中断向量表;
7、由链接器将所述目标数组对象放置于所述目标闪存存储区,并将所述目标代码放置于所述目标闪存存储区之外的非重叠区域,生成同时包含启动加载程序和所述目标应用程序的统一烧录镜像。
8、本发明的第二方面,提供一种启动加载程序镜像数组嵌入应用程序存储区的自动映射装置,包括:
9、解析模块,用于获取原始镜像文件,按字节顺序解析所述原始镜像文件得到镜像数据,生成目标数组文件及其对应的目标头文件,所述目标数组文件包含启动加载程序的全部二进制数据,所述目标头文件用于记录所述目标数组文件的长度、起始地址和校验信息;
10、数组对象构建模块,用于在所述目标数组文件对应的对象定义上添加段属性声明,得到目标数组对象并将所述目标数组对象放入预定义输入段;
11、存储区分配模块,用于在应用程序工程的链接脚本中,为所述预定义输入段分配独立的目标闪存存储区,所述目标闪存存储区的地址区间与启动加载程序预期占用地址一致,并将所述预定义输入段映射至所述目标闪存存储区;
12、编译模块,用于将所述目标数组文件加入所述应用程序工程并编译链接,得到目标代码,所述目标代码包含目标应用程序的指令代码及中断向量表;
13、存储模块,用于由链接器将所述目标数组对象放置于所述目标闪存存储区,并将所述目标代码放置于所述目标闪存存储区之外的非重叠区域,生成同时包含启动加载程序和所述目标应用程序的统一烧录镜像。
14、本发明的第三方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一项所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法的步骤。
15、有益效果:与现有技术相比,本发明提供了启动加载程序镜像数组嵌入应用程序存储区的自动映射方法、装置及存储介质。本发明提供的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法中,首先,获取原始镜像文件,按字节顺序解析所述原始镜像文件得到镜像数据,生成目标数组文件及其对应的目标头文件,所述目标数组文件包含启动加载程序的全部二进制数据,所述目标头文件用于记录所述目标数组文件的长度、起始地址和校验信息,然后,在所述目标数组文件对应的对象定义上添加段属性声明,得到目标数组对象并将所述目标数组对象放入预定义输入段,之后,在应用程序工程的链接脚本中,为所述预定义输入段分配独立的目标闪存存储区,所述目标闪存存储区的地址区间与启动加载程序预期占用地址一致,并将所述预定义输入段映射至所述目标闪存存储区,进一步地,将所述目标数组文件加入所述应用程序工程并编译链接,得到目标代码,所述目标代码包含目标应用程序的指令代码及中断向量表,最后,由链接器将所述目标数组对象放置于所述目标闪存存储区,并将所述目标代码放置于所述目标闪存存储区之外的非重叠区域,生成同时包含启动加载程序和所述目标应用程序的统一烧录镜像。本发明为用户提供了一种启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,通过将启动加载程序镜像转换为数组文件并添加段属性声明,经链接脚本映射至指定闪存存储区,在应用程序工程编译链接时由链接器自动完成地址分配并生成统一烧录镜像,解决了现有人工合并或外部脚本拼接导致的地址偏移、版本不一致、烧录效率低且可靠性差的问题,达到了自动化程度高、地址映射可靠、版本一致性强、适合量产发布且便于空中升级的有益效果。
1.一种启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,所述方法包括:
2.根据权利要求1所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,读取所述原始镜像文件之前,还包括:
3.根据权利要求1所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,所述获取原始镜像文件,按字节顺序解析所述原始镜像文件得到镜像数据,生成目标数组文件及其对应的目标头文件,包括:
4.根据权利要求1所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,所述目标头文件中包含一致性校验宏,所述目标数组文件中包含与所述一致性校验宏对应的校验语句,当所述目标头文件与所述目标数组文件版本不一致时,所述校验语句触发编译错误。
5.根据权利要求1所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,在所述目标数组文件对应的对象定义上添加段属性声明,得到目标数组对象,包括:
6.根据权利要求1所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,所述链接脚本中设置有容量检查指令,所述容量检查指令用于在所述目标数组对象的尺寸超过所述目标闪存存储区的容量时使链接操作失败并输出错误信息。
7.根据权利要求1所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,所述目标闪存存储区的起始地址为目标芯片复位后硬件从程序闪存起始地址读取向量表数据的地址,所述目标数组对象至少包含向量表数据和启动代码,所述目标数组对象被放置于所述目标闪存存储区中,且所述目标闪存存储区包含所述起始地址,以使所述目标芯片复位后从所述起始地址读取向量表数据并执行启动加载程序。
8.根据权利要求5所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法,其特征在于,将所述目标数组文件加入所述应用程序工程并编译链接,得到目标代码,包括:
9.一种启动加载程序镜像数组嵌入应用程序存储区的自动映射装置,其特征在于,包括:
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1-8任一项所述的启动加载程序镜像数组嵌入应用程序存储区的自动映射方法的步骤。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com