CN109710320B - 一种两级驱动的启动引导BootLoader方法 - Google Patents

一种两级驱动的启动引导BootLoader方法 Download PDF

Info

Publication number
CN109710320B
CN109710320B CN201811511196.5A CN201811511196A CN109710320B CN 109710320 B CN109710320 B CN 109710320B CN 201811511196 A CN201811511196 A CN 201811511196A CN 109710320 B CN109710320 B CN 109710320B
Authority
CN
China
Prior art keywords
module
program
curing
function
bootloader
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811511196.5A
Other languages
English (en)
Other versions
CN109710320A (zh
Inventor
朱守园
刘明
杨玻
王亮
吴云
王璇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Aeronautics Computing Technique Research Institute of AVIC
Original Assignee
Xian Aeronautics Computing Technique Research Institute of AVIC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xian Aeronautics Computing Technique Research Institute of AVIC filed Critical Xian Aeronautics Computing Technique Research Institute of AVIC
Priority to CN201811511196.5A priority Critical patent/CN109710320B/zh
Publication of CN109710320A publication Critical patent/CN109710320A/zh
Application granted granted Critical
Publication of CN109710320B publication Critical patent/CN109710320B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明涉及一种两级驱动的启动引导BootLoader方法,随着嵌入式软件的发展,BootLoader程序开发和移植工作复杂度越来越高,调试、在线编程操作的不便严重影响了嵌入式软件的开发进度。本发明提出了一种两级驱动的通用BootLoader架构,采用两级驱动方法以及模块化设计的结构,一级驱动BootLoader程序包含软件引导启动最小功能集,实现简单,状态稳定;二级驱动BootLoader程序包含软件引导启动全部功能,实现启动各种参数和操作的灵活配置;模块化设计能够有效提高复用率,且可以灵活裁剪、扩展和移植,大大提高了嵌入式软件开发的效率和可靠性。同时在BootLoader程序执行固化功能时,增加正确性检测信息和操作,加强对程序数据的正确性检查,为嵌入式软件正确可靠运行提供更多保障。

Description

一种两级驱动的启动引导BootLoader方法
技术领域
本发明属于涉及航空系统软件启动技术领域,具体涉及一种两级驱动的启动引导BootLoader方法。
背景技术
BootLoader程序作为嵌入式软件的引导启动程序,实现了硬件设备与操作系统的连接,然而BootLoader程序开发和移植工作复杂度越来越高,调试、在线编程操作的不便严重影响了嵌入式软件的开发进度。传统的一级架构BootLoader程序将启动引导所有功能集中在一起,BootLoader程序移植和变更调试困难,工作量大,效率低,固化无检测信息,程序可靠性较低。
针对传统BootLoader程序存在问题,为减少开发和移植工作量,提高复用率和可靠性,本发明提出了一种两级驱动的通用BootLoader架构,采用两级驱动方法以及模块化设计的结构,有效减少开发移植过程中的适配工作,提高BootLoader程序开发固化的灵活性。同时对固化文件进行正确性检测处理,提高BootLoader程序运行可靠性。
发明内容
本发明提供一种两级驱动的启动引导BootLoader方法,提高程序调试升级灵活性以及代码复用率和运行可靠性。
第一发明,本发明提供一种两级驱动的启动引导BootLoader方法,所述方法包括:
对启动引导BootLoader程序中的功能进行模块划分,形成不同的功能模块;
一级驱动启动引导在地面状态采用在线编程模块固化程序,在空中状态引导二级驱动启动运行;
二级驱动在地面状态根据输入,调用对应的所述功能模块执行相应功能,在空中状态引导操作系统OS程序启动。
可选的,方法还包括:
通过固化数据检测信息,对固化程序进行正确性检测,所述固化程序包括:一级驱动程序、二级驱动程序、操作系统OS程序。
可选的,所述功能模块,至少包括:
资源初始化模块,在线编程模块,设备状态检查模块,硬件驱动模块,代码搬家模块,主控程序模块,菜单显示模块,系统参数设置模块,引导模块。
可选的,一级驱动被固化在FLASH中映射的软件起始地址处,用于固化和加载二级驱动BootLoader程序。
可选的,二级驱动BootLoader程序,包含启动引导全部功能模块,可根据系统需求完成各项引导功能设置。
可选的,所述一级驱动启动引导在地面状态采用在线编程模块固化程序,在空中状态引导二级驱动启动运行,具体包括:
所述资源初始化模块和所述代码搬家模块在FLASH中运行,所述在线编程模块和所述引导模块在RAM中运行。
可选的,所述二级驱动在地面状态根据输入,调用对应的所述功能模块执行相应功能,在空中状态引导操作系统OS程序启动,具体包括:
所述资源初始化和所述代码搬家模块在FLASH中运行,所述在线编程模块,设备状态检查模块,硬件驱动模块,代码搬家模块,主控程序模块,菜单显示模块,系统参数设置模块,引导模块在RAM中运行。
可选的,根据FLASH地址和数据长度检测FLASH空间是否满足预设空间;
若固化空间中有空间已经被其他数据占用,则提示报错并放弃固化;若固化空间可用,则执行在线编程功能。
可选的,所述通过固化数据检测信息,对固化程序进行正确性检测,所述固化程序包括:一级驱动程序、二级驱动程序、操作系统OS程序,具体包括:
在线编程功能模块中进行文件固化时,在FLASH的前16字节中记录固化数据的长度和校验值,从第17字节开始固化文件数据内容;
在启动引导相应固化程序时,可根据所述固化数据的长度计算固化程序校验值,将计算得到的校验值和之前记录的校验值进行比较,若两者一致,则运行固化程序,若两者不一致,报错并结束程序运行。
综上所述,本发明采用模块化功能设计和两级驱动启动引导设计,其中对BootLoader程序中各功能采用模块化设计,模块功能独立且裁剪或扩展方便。一级驱动启动引导功能少且固定,主要用于固化或加载二级驱动程序;二级驱动启动引导功能全面,用于完成启动引导各项功能。在BootLoader程序中固化处加入正确性检测信息和操作,用于加载程序的正确性检测,加强程序运行可靠性保障。可以看出,针对传统BootLoader程序在应用开发过程中存在的问题,对程序架构、功能划分和正确性检测三个方面进行了改进设计,进行功能模块划分,将传统的一级BootLoader结构改为两级BootLoader结构,并在固化时进行固化空间正确性检测,增加固化数据长度和校验信息。改进的BootLoader程序不但运行可靠性高,代码复用率高,且BootLoader程序功能变更更加便捷,功能裁剪和移植更简单方便,大大提高了程序的开发效率。
附图说明
图1为本发明提供的一种两级驱动的BootLoader架构示意图;
图2为本发明提供的一种一级驱动运行流程图;
图3为本发明提供的一种二级驱动运行流程图。
具体实施方式
通过具体示例,对本发明作进一步详细说明。
1、两级驱动功能模块划分
两级驱动方法是指将软件的引导启动功能分为两部分,软件从一级驱动启动运行,通过一级驱动再引导二级驱动,之后由二级驱动引导操作系统(OS)运行。根据BootLoader实现功能的需求,将其功能划分为以下功能模块:
a)、资源初始化模块:实现处理器内部寄存器和内存控制器的初始化,一般采用汇编语言实现。
b)、设备状态检查模块:检测外部离散量设置的设备状态,根据设备状态执行对应的处理程序;
c)、硬件驱动模块:对BootLoader程序运行过程中使用的硬件设备驱动进行初始化;
d)、代码搬家模块:将代码从FLASH空间拷贝到RAM空间;
e)、主控程序模块:控制BootLoader程序运行流程,并启动菜单显示;
f)、菜单显示模块:显示BootLoader程序主菜单,可选择菜单命令选择对应的功能执行;
g)、在线编程模块:接收主机端数据,并将其固化在FLASH指定地址处,在固化前对固化地址空间进行检测,保证足够固化空间,若空间不够,报错并停止固化。在固化地址的前16个字节中写入固化数据的长度和校验值,从第17个字节开始固化数据内容。一般可用于固化二级驱动内容或其他文件内容(如OS程序或应用程序)。
h)、系统参数设置模块:对系统引导以及整个系统软件中用到的各类参数进行设置,包括默认启动项、网络IP和MAC、应用等待时间、各启动项启动地址等;
i)、引导模块:引导其他程序运行,对引导程序数据进行检测、搬家以及跳转执行,若发生错误则报错并结束程序。
其中一级驱动固化在FLASH中映射的软件起始地址处,用于完成最小启动引导功能,包括资源初始化模块、在线编程模块、外部设备检测模块、搬家模块和引导模块;二级驱动依然是BootLoader程序,可根据系统需求完成各项引导功能设置,一般包括所有模块功能。其中在线编程模块和搬家模块被两级驱动程序共用。在两级驱动中均包含资源初始化模块和外部设备检测模块,但接口内容不同,两级驱动分别只初始化程序运行所需资源,一级驱动只检测外部空地状态,而二级驱动检测外部所有状态。模块化的设计使得一级驱动BootLoader程序功能小而简单,二级驱动BootLoader程序可灵活裁剪和移植。两级驱动的BootLoader程序架构图如图1所示。
2、两级驱动运行设计
BootLoader程序的两级驱动各自独立,分别固化在FLASH不同空间处。一级驱动BootLoader程序通过JTAG固化在FLASH空间映射的软件启动处,用于上电或复位后直接启动运行且首先在FLASH空间运行。FLASH空间运行速度较低,完成基本的资源初始化后,将其他代码搬至RAM中执行,通过外部开关状态,判断是进入固化功能模块还是启动二级驱动功能模块。在Ground状态下首先根据GET_CMD进行人机交互判断,若在给定时间内,输入有效字符,则进入固化功能模块,若超时未收到有效字符,进入二级驱动模块;在Air状态下直接进入启动二级驱动模块。完成相应功能后,一级驱动BootLoader程序结束。一级驱动BootLoader程序运行流程图如图2所示。
BootLoader程序的一级驱动跳转到二级驱动执行后,二级驱动首先也是在FLASH中先执行资源初始化,之后将其他代码搬至RAM中执行,二级驱动的代码会覆盖一级驱动在RAM中的代码并运行,首先通过外部开关状态,判断是进入功能模块菜单还是启动操作系统功能模块。在Ground状态下进入功能模块菜单,通过人工选择相应菜单项执行相应功能;在Air状态下直接引导启动OS程序,引导方法同一级驱动引导二级驱动的方法。二级驱动引导程序运行流程如图3所示。OS程序在搬家到RAM中后会覆盖二级驱动在RAM中的程序,在RAM中只驻留当前运行程序,不但可以提高RAM利用率,也能够避免其他程序异常运行造成的破坏。
一级驱动BootLoader程序固化后不再进行升级,二级驱动BootLoader程序可根据需求灵活裁剪和修改,可以通过一级驱动固化引导,开发效率和可靠性更高。
3、错误检测设计
传统的一级驱动的BootLoader程序在固化和加载时,直接将数据按照设置的FLASH起始地址固化,无固化空间检测,经常发生固化的两部分数据重合的情况,导致数据内容被破坏;在加载时也不进行数据正确性检测,发生程序运行错误。针对软件运行中的问题,本发明从以下两方面进行了错误检测设计:
a)、在在线编程功能模块中进行文件固化时,首先根据FLASH地址和数据长度检测FLASH空间是否足够,若固化空间中有空间已经被其他数据占用,则提示报错并放弃固化,否则执行在线编程功能;
b)、在在线编程功能模块中进行文件固化时,在FLASH的前16字节中记录固化数据的长度和校验值,从第17字节开始固化文件数据内容,这样,在加载时,可根据记录的信息检测固化的内容是否正确,若正确则运行,否则报错并结束程序运行。
通过增加少量的错误检测信息和错误检测,就能够有效避免程序运行时的数据错误导致的程序运行失败。
4、对比
与传统的一级驱动BootLoader程序相比,两级驱动架构的BootLoader程序运行可靠性更高,功能裁剪和移植也更为灵活,程序调试更为方便,有效缩短开发周期、提高程序运行可靠性,具体表现在以下几方面:
a)、传统的一级驱动BootLoader程序如需修改,需要采用JTAG重新固化,且若修改错误则软件无法启动,修改调试风险较大,操作复杂;两级驱动架构的BootLoader程序中,一级驱动功能简单固定,固化后一般不再升级,BootLoader程序的修改完善一般在二级驱动中进行,固化操作简单,即使修改错误也不影响软件启动,程序可靠性、灵活性更高;
b)、传统的一级驱动BootLoader程序中只能在一处执行固化功能,两级驱动架构的BootLoader程序有两处固化功能,可靠性和灵活性更高;
c)、传统的一级驱动BootLoader程序中固化功能直接进行FLASH擦除和编程,两级驱动架构的BootLoader程序固化时会加上错误检测信息以及FLASH检测,防止固化地址空间重叠,也为数据加载的正确性检测提供更多信息,可靠性更高。
d)、模块化设计使得BootLoader程序的移植和裁剪更加灵活方便,各模块功能相对独立,修改影响范围可控,代码复用率高,程序可靠性高,且开发周期有效缩短。
在某双机嵌入式软件中,采用本发明设计的两级驱动的BootLoader程序,并在二级驱动BootLoader程序中增加双机同步运行功能,大大提高了双机同步功能的调试效率,且能够正确完成程序引导,启动OS运行。
综上所述,本发明采用模块化功能设计和两级驱动启动引导设计,其中对BootLoader程序中各功能采用模块化设计,模块功能独立且裁剪或扩展方便。一级驱动启动引导功能少且固定,主要用于固化或加载二级驱动程序;二级驱动启动引导功能全面,用于完成启动引导各项功能。在BootLoader程序中固化处加入正确性检测信息和操作,用于加载程序的正确性检测,加强程序运行可靠性保障。可以看出,针对传统BootLoader程序在应用开发过程中存在的问题,对程序架构、功能划分和正确性检测三个方面进行了改进设计,进行功能模块划分,将传统的一级BootLoader结构改为两级BootLoader结构,并在固化时进行固化空间正确性检测,增加固化数据长度和校验信息。改进的BootLoader程序不但运行可靠性高,代码复用率高,且BootLoader程序功能变更更加便捷,功能裁剪和移植更简单方便,大大提高了程序的开发效率。

Claims (6)

1.一种两级驱动的启动引导BootLoader方法,其特征在于,所述方法包括:
对启动引导BootLoader程序中的功能进行模块划分,形成不同的功能模块;所述功能模块,至少包括:资源初始化模块,在线编程模块,设备状态检查模块,硬件驱动模块,代码搬家模块,主控程序模块,菜单显示模块,系统参数设置模块,引导模块;
一级驱动启动引导在地面状态采用在线编程模块固化程序,在空中状态引导二级驱动启动运行;具体包括:所述资源初始化模块和所述代码搬家模块在FLASH中运行,所述在线编程模块和所述引导模块在RAM中运行;在Ground状态下首先根据GET_CMD进行人机交互判断,若在给定时间内,输入有效字符,则进入固化功能模块,若超时未收到有效字符,进入二级驱动模块;在Air状态下直接进入启动二级驱动模块;完成相应功能后,一级驱动BootLoader程序结束;
二级驱动在地面状态根据输入,调用对应的所述功能模块执行相应功能,在空中状态引导操作系统OS程序启动;具体包括:所述资源初始化和所述代码搬家模块在FLASH中运行,所述在线编程模块,设备状态检查模块,硬件驱动模块,代码搬家模块,主控程序模块,菜单显示模块,系统参数设置模块,引导模块在RAM中运行;在Ground状态下进入功能模块菜单,通过人工选择相应菜单项执行相应功能;在Air状态下直接引导启动OS程序;
在线编程模块和搬家模块被两级驱动程序共用;在两级驱动中均包含资源初始化模块和外部设备检测模块,但接口内容不同,两级驱动分别只初始化程序运行所需资源,一级驱动只检测外部空地状态,而二级驱动检测外部所有状态。
2.权利要求1所述的两级驱动的启动引导BootLoader方法,其特征在于,方法还包括:
通过固化数据检测信息,对固化程序进行正确性检测,所述固化程序包括:一级驱动程序、二级驱动程序、操作系统OS程序。
3.权利要求1所述的两级驱动的启动引导BootLoader方法,其特征在于:
一级驱动被固化在FLASH中映射的软件起始地址处,用于固化和加载二级驱动BootLoader程序。
4.权利要求1所述的两级驱动的启动引导BootLoader方法,其特征在于:
二级驱动BootLoader程序,包含启动引导全部功能模块,可根据系统需求完成各项引导功能设置。
5.权利要求2所述的两级驱动的启动引导BootLoader方法,其特征在于:
根据FLASH地址和数据长度检测FLASH空间是否满足预设空间;
若固化空间中有空间已经被其他数据占用,则提示报错并放弃固化;若固化空间可用,则执行在线编程功能。
6.权利要求2所述的两级驱动的启动引导BootLoader方法,其特征在于:所述通过固化数据检测信息,对固化程序进行正确性检测,所述固化程序包括:一级驱动程序、二级驱动程序、操作系统OS程序,具体包括:
在线编程功能模块中进行文件固化时,在FLASH的前16字节中记录固化数据的长度和校验值,从第17字节开始固化文件数据内容;
在启动引导相应固化程序时,可根据所述固化数据的长度计算固化程序校验值,将计算得到的校验值和之前记录的校验值进行比较,若两者一致,则运行固化程序,若两者不一致,报错并结束程序运行。
CN201811511196.5A 2018-12-11 2018-12-11 一种两级驱动的启动引导BootLoader方法 Active CN109710320B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811511196.5A CN109710320B (zh) 2018-12-11 2018-12-11 一种两级驱动的启动引导BootLoader方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811511196.5A CN109710320B (zh) 2018-12-11 2018-12-11 一种两级驱动的启动引导BootLoader方法

Publications (2)

Publication Number Publication Date
CN109710320A CN109710320A (zh) 2019-05-03
CN109710320B true CN109710320B (zh) 2022-03-15

Family

ID=66256329

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811511196.5A Active CN109710320B (zh) 2018-12-11 2018-12-11 一种两级驱动的启动引导BootLoader方法

Country Status (1)

Country Link
CN (1) CN109710320B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111045905B (zh) * 2019-11-14 2023-06-30 中国航空工业集团公司西安航空计算技术研究所 一种针对特定软件移植的跨处理器性能快速评估方法
CN110990041A (zh) * 2019-12-16 2020-04-10 杭州涂鸦信息技术有限公司 一种bootloader升级方法及系统
CN111488168B (zh) * 2019-12-25 2023-09-12 湖北航天飞行器研究所 一种基于boot二次加载的武器系统控制软件安全升级方法
CN111209059B (zh) * 2020-01-14 2023-03-03 中国北方车辆研究所 一种嵌入式软件多版本控制系统及方法
CN113672448A (zh) * 2021-07-07 2021-11-19 深圳Tcl新技术有限公司 BootLoader启动流程的监控方法、装置及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106528106A (zh) * 2016-10-31 2017-03-22 武汉光迅科技股份有限公司 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法
CN108647040A (zh) * 2018-05-10 2018-10-12 上海纳恩汽车技术有限公司 一种基于PEPS系统的Bootloader架构及刷写方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106528106A (zh) * 2016-10-31 2017-03-22 武汉光迅科技股份有限公司 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法
CN108647040A (zh) * 2018-05-10 2018-10-12 上海纳恩汽车技术有限公司 一种基于PEPS系统的Bootloader架构及刷写方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种通用BOOTLOADER架构研究;杨珂瑶,项涛;《航空计算技术》;20170331;第47卷(第2期);第131-134页 *

Also Published As

Publication number Publication date
CN109710320A (zh) 2019-05-03

Similar Documents

Publication Publication Date Title
CN109710320B (zh) 一种两级驱动的启动引导BootLoader方法
CN109358887B (zh) 一种单片机程序的在线升级方法、装置及系统
CN103150188B (zh) 非x86指令集计算机的x86兼容显卡快速初始化方法
US20130339718A1 (en) Information processing device and method for controlling information processing device
US20160291958A1 (en) Methods of updating software components, computer systems and memory apparatus
CN102945173A (zh) 用户程序在线升级系统和升级方法
CN105677398A (zh) 一种通用的嵌入式计算机软件在线升级方法
CN102567049A (zh) 嵌入式操作系统的升级方法
CN104407878A (zh) C6000数字信号处理器在线升级方法
US11030074B2 (en) Code update based on detection of change in runtime code during debugging
CN112540780A (zh) 一种编队无人机批量固件升级实现系统、方法
CN105740139A (zh) 一种基于虚拟环境的嵌入式软件调试方法
US9600397B2 (en) Dynamic debugging method of a software module and corresponding device
CN107506638B (zh) 一种基于硬件机制的内核控制流异常检测方法
US20130097412A1 (en) Performing A Boot Sequence In A Multi-Processor System
CN103729219A (zh) 一种uefi bios架构方法及系统
CN108536586B (zh) Android移动终端的信息获取方法、设备以及系统
CN115934114A (zh) 一种软件固件在线烧写方法、设备及计算机可读存储介质
CN106445504A (zh) 一种移动终端设备驱动的升级方法及系统
CN111984329B (zh) 一种boot引导软件标准化生成、执行方法及系统
CN112394965B (zh) 电池管理系统升级和运行方法,控制器,电池管理系统及存储介质
CN110716753B (zh) 云主机的初始化方法、装置、存储介质及电子设备
CN110333900A (zh) 一种升级单片机存储器内boot的方法
CN112346769A (zh) 一种基于tms320f28335的dsp软件在线升级方法
CN110275830A (zh) 基于延续的无人机编队飞控系统的动态调试方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant