CN109710320B - 一种两级驱动的启动引导BootLoader方法 - Google Patents
一种两级驱动的启动引导BootLoader方法 Download PDFInfo
- 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
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程序中的功能进行模块划分,形成不同的功能模块;
一级驱动启动引导在地面状态采用在线编程模块固化程序,在空中状态引导二级驱动启动运行;
二级驱动在地面状态根据输入,调用对应的所述功能模块执行相应功能,在空中状态引导操作系统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字节开始固化文件数据内容;
在启动引导相应固化程序时,可根据所述固化数据的长度计算固化程序校验值,将计算得到的校验值和之前记录的校验值进行比较,若两者一致,则运行固化程序,若两者不一致,报错并结束程序运行。
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)
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)
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架构及刷写方法 |
-
2018
- 2018-12-11 CN CN201811511196.5A patent/CN109710320B/zh active Active
Patent Citations (2)
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)
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 |