CN107315587B - 一种基于二次链接的航天器在轨维护注入码生成方法 - Google Patents
一种基于二次链接的航天器在轨维护注入码生成方法 Download PDFInfo
- Publication number
- CN107315587B CN107315587B CN201710476446.5A CN201710476446A CN107315587B CN 107315587 B CN107315587 B CN 107315587B CN 201710476446 A CN201710476446 A CN 201710476446A CN 107315587 B CN107315587 B CN 107315587B
- Authority
- CN
- China
- Prior art keywords
- file
- orbit
- spacecraft
- maintenance
- software
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种基于二次链接的航天器在轨维护注入码生成方法,包括:(1)还原航天器在轨运行软件的状态,生成在轨状态目标文件;(2)编写在轨维护源代码;(3)使用编译器对编写的在轨维护源代码进行单独编译,生成待上传目标文件;(4)新建二次链接的脚本文件;(5)基于建立的二次链接脚本文件,对在轨状态目标文件和待上传目标文件进行链接,生成新的可执行文件;(6)将新的可执行文件转换成链接指令文件或BIN文件,从链接指令文件或BIN文件中直接提取指定起始地址的注入码指令。本发明在保证原在轨软件二进制码不发生变化的前提下,自动实现在轨维护软件中各个地址相关项的重定位过程,从而大大提升了航天器在轨维护注入码的生成效率和正确性。
Description
技术领域
本发明涉及一种基于二次链接的航天器在轨维护注入码生成方法,属于航天器在轨维护领域。
背景技术
航天器软件的在轨维护能力是保证航天器长寿命不可或缺的手段,与硬件的冗余备份相比,这种方法更经济更灵活。通过软件在轨维护来提高航天器的长寿命和高可靠性的方法越来越受到重视。
当前我国航天器在轨运行的处理器平台主体是sparc系列体系架构。航天器在轨运行维护的主要手段是实施软件的在轨维护。航天器在轨软件的维护,主要是基于钩子函数的方法。在可写存储注入区上注一段可执行指令码,当在轨维护使能时,钩子函数通过指定的地址跳转到注入区执行,执行完毕后再返回或退出原函数继续执行。在这种应用场景下,在轨维护注入码的生成是软件在轨维护的关键环节,同时也是一件比较困难的工作。之前在轨维护注入码的生成主要是通过对原在轨软件和在轨维护软件编译结果文件进行解析,梳理出在轨维护指令码中所有需要重定位的信息,并完成重定位。该过程一方面要求熟练掌握编译结果文件格式,能够梳理出所有的重定位信息;另一方面要求对指令规则集有较深入的了解,能够对在轨维护指令码实现重定位。并且当在轨维护软件的编写需要使用原在轨运行软件中未用到的库函数时,原有通过文件解析实现指令码重定位的方法实现起来比较麻烦。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提出一种基于二次链接的航天器在轨维护注入码生成方法,在保证原在轨软件二进制码不发生变化的前提下,自动实现在轨维护软件中各个地址相关项的重定位过程,从而大大提高了航天器在轨维护注入码的生成效率和正确性。
本发明的技术方案是:
一种基于二次链接的航天器在轨维护注入码生成方法,步骤如下:
(1)还原航天器在轨运行软件的状态,生成新的在轨状态目标文件;
(2)编写在轨维护源代码;
(3)使用编译器对步骤(2)中编写的在轨维护源代码进行单独编译,生成待上传目标文件;
(4)新建二次链接的脚本文件;
(5)基于步骤(4)建立的二次链接脚本文件,使用编译器,对所述在轨状态目标文件和待上传目标文件进行链接,生成新的可执行文件;
(6)通过编译器将所述新的可执行文件转换成链接指令文件或BIN文件,从链接指令文件或BIN文件中直接提取指定起始地址的注入码指令,从而完成航天器在轨维护注入码的生成。
所述步骤(1)还原航天器在轨运行软件的状态,生成新的在轨状态目标文件,具体为:使用航天器原在轨软件的源文件编译目录进行编译并实现一次链接,将第一次链接后生成的可执行文件进行文件格式转换,生成新的在轨状态目标文件。
所述步骤(2)编写在轨维护源代码,具体为:在航天器原在轨软件的源文件编译目录下,新建在轨维护的注入代码源文件,并编写好相应的在轨维护源代码。
所述步骤(4)新建二次链接的脚本文件,具体为:在脚本文件SECTIONS一节中,依据原在轨软件的输出段的地址设置,新建第一输出段空间,将所述新建的第一输出段空间的起始地址设置为原在轨软件的输出段的起始地址,将所述新建的第一输出段空间的输入段元素设置为第一次链接后生成的在轨状态目标文件,再依据预先设定的注入区起始地址,新建第二输出段空间,将所述第二输出段空间的起始地址设置为预先设定的注入区起始地址,将所述第二输出段空间的输入段元素设置为在轨维护软件编译后生成的待上传目标文件。
本发明与现有技术相比的有益成果是:
(1)本发明技术方案通过二次链接实现航天器在轨维护注入码的生成,通过编译器的两次链接,自动实现在轨维护软件注入码相对原在轨软件的地址信息重定位,大大提高了在轨维护注入码生成的效率和正确性。
(2)通过二次链接方式,相较于原有文件解析方式生成注入码的方法,消除了新增全局变量、新增库函数调用等多方面的在轨维护代码编写限制要求,大大提高了在轨维护源代码的实现效率。
(3)本发明方法已经在多个SPARC平台航天器软件在轨维护设计中得到了验证,提高了在轨航天器软件的可维护性,为后续航天器星上软件的研制,提供了新的在轨维护设计方法。
附图说明
图1为本发明方法流程图。
具体实施方式
如图1所示,本发明提出了一种基于二次链接的航天器在轨维护注入码生成方法,主要是面向但不限于SPARC处理器平台的航天器软件,依据航天器软件在轨维护任务需求,编写相应的在轨维护源代码(C语言),通过新建链接脚本文件,与原在轨软件编译后的可执行文件实现二次链接,从而完成航天器在轨维护注入码的生成。
本发明具体步骤如下:
(1)还原航天器在轨运行软件的状态,生成新的在轨状态目标文件;
具体为:使用航天器在轨软件的源文件编译目录进行编译并实现一次链接,所述航天器在轨软件的源文件编译目录要与航天器在轨软件可执行代码生成时的状态保持一致。将第一次链接后生成的可执行文件a.out进行文件格式转换,生成新的在轨状态目标文件,新的在轨状态目标文件是扩展名为.o的ELF目标文件格式。
进行文件格式转换可以利用编译器自带工具objcopy实现。
(2)编写在轨维护源代码;
具体为:在航天器在轨软件的源文件编译目录下,新建扩展名为.c的在轨维护代码源文件,并编写好相应的在轨维护源代码及所需头文件。
(3)使用编译器对步骤(2)中编写的在轨维护源代码进行单独编译,生成待上传目标文件,待上传目标文件是扩展名为.o的ELF目标文件格式;
(4)新建二次链接的脚本文件;
具体为:新建一个新的链接脚本文件,在新的链接脚本文件SECTIONS一节中,依据航天器原在轨软件的输出段的地址设置,新建第一输出段空间,将所述新建的第一输出段空间的起始地址设置为航天器原在轨软件的输出段的起始地址,将所述新建的第一输出段空间的输入段元素设置为第一次链接后生成的在轨状态目标文件,再依据预先设定的注入区起始地址,新建第二输出段空间,将所述第二输出段空间的起始地址设置为预先设定的注入区起始地址,将所述第二输出段空间的输入段元素设置为在轨维护软件编译后生成的待上传目标文件。
(5)基于步骤(4)建立的二次链接脚本文件,使用编译器,对所述在轨状态目标文件和待上传目标文件进行链接,生成新的可执行文件a.out;
(6)通过编译器,使用objdump命令将所述新的可执行文件a.out转换成扩展名为.lst的链接指令文件,或者使用objcopy命令将所述新的可执行文件a.out转换成扩展名为.bin的BIN文件,从上述生成的链接指令文件或BIN文件中直接提取指定起始地址的注入码指令,从而完成航天器在轨维护注入码的生成。
实施例:
(1)在确保航天器在轨软件的源文件编译目录与航天器在轨软件可执行代码生成时状态一致的前提下,使用编译器sparc-rtems-gcc,通过makefile文件,对航天器在轨软件的源文件编译目录进行编译并实现一次链接,生成一次链接的可执行文件a.out,然后使用sparc-rtems-objcopy命令将一次链接的可执行文件a.out进行文件格式转换,生成ELF格式的在轨状态目标文件a.o。
(2)在航天器在轨软件的源文件编译目录下,新建在轨维护的注入代码源文件task_inject.c,并在task_inject.c源文件中编写在轨维护源代码,如表1所示:
表1 在轨维护源代码示例
(3)使用编译器sparc-rtems-gcc对在轨维护源代码task_inject.c进行单独编译,生成目标文件task_inject.o。
(4)新建链接脚本文件linkobsm作为二次链接的脚本文件,如表2所示:
表2 二次链接脚本文件示例
(5)基于二次链接脚本文件linkobsm,使用编译器sparc-rtems-gcc,对在轨状态目标文件a.o和待上传目标文件task_inject.o进行链接,生成新的二次链接后的可执行文件a.out;
(6)使用编译器的sparc-rtems-objdump命令将步骤(5)生成的新的二次链接后的可执行文件a.out转换成扩展名为.lst的链接指令文件boot.lst,或者使用sparc-rtems-objcopy命令将步骤(5)生成的新的二次链接后的可执行文件a.out转换成扩展名为.bin的BIN文件boot.bin。从上述生成的文件boot.lst或boot.bin文件中直接提取起始地址为0x21a0000的注入码指令,从而完成航天器在轨维护注入码的生成。
本实施例技术方案通过编译器的两次链接,自动实现在轨维护软件注入码相对原在轨软件的地址信息重定位,大大提高了在轨维护注入码生成的效率和正确性。相较于原有文件解析方式生成注入码的方法,消除了新增全局变量、新增库函数调用等多方面的在轨维护代码编写限制要求,大大提高了在轨维护源代码的实现效率。
本发明未详细说明部分属本领域技术人员公知常识。
Claims (6)
1.一种基于二次链接的航天器在轨维护注入码生成方法,其特征在于步骤如下:
(1)还原航天器在轨运行软件的状态,生成新的在轨状态目标文件;
(2)编写在轨维护源代码;
(3)使用编译器对步骤(2)中编写的在轨维护源代码进行单独编译,生成待上传目标文件;
(4)新建二次链接的脚本文件;具体为:在脚本文件SECTIONS一节中,依据原在轨软件的输出段的地址设置,新建第一输出段空间,将所述新建的第一输出段空间的起始地址设置为原在轨软件的输出段的起始地址,将所述新建的第一输出段空间的输入段元素设置为第一次链接后生成的在轨状态目标文件,再依据预先设定的注入区起始地址,新建第二输出段空间,将所述第二输出段空间的起始地址设置为预先设定的注入区起始地址,将所述第二输出段空间的输入段元素设置为在轨维护软件编译后生成的待上传目标文件;
(5)基于步骤(4)建立的二次链接脚本文件,使用编译器,对所述在轨状态目标文件和待上传目标文件进行链接,生成新的可执行文件;
(6)通过编译器将所述新的可执行文件转换成链接指令文件或BIN文件,从链接指令文件或BIN文件中直接提取指定起始地址的注入码指令,从而完成航天器在轨维护注入码的生成。
2.根据权利要求1所述的一种基于二次链接的航天器在轨维护注入码生成方法,其特征在于:所述步骤(1)还原航天器在轨运行软件的状态,生成新的在轨状态目标文件,具体为:使用航天器原在轨软件的源文件编译目录进行编译并实现一次链接,将第一次链接后生成的可执行文件进行文件格式转换,生成新的在轨状态目标文件。
3.根据权利要求1所述的一种基于二次链接的航天器在轨维护注入码生成方法,其特征在于:所述步骤(2)编写在轨维护源代码,具体为:在航天器原在轨软件的源文件编译目录下,新建在轨维护的注入代码源文件,并编写好相应的在轨维护源代码。
4.根据权利要求3所述的一种基于二次链接的航天器在轨维护注入码生成方法,其特征在于:航天器在轨运行软件以及在轨维护源代码均使用C语言编写。
5.根据权利要求4所述的一种基于二次链接的航天器在轨维护注入码生成方法,其特征在于:所述在轨状态目标文件和所述待上传目标文件均为扩展名为.o的ELF目标文件格式。
6.根据权利要求4所述的一种基于二次链接的航天器在轨维护注入码生成方法,其特征在于:所述的链接指令文件是扩展名为.lst的文件,BIN文件是扩展名为.bin的二进制文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710476446.5A CN107315587B (zh) | 2017-06-21 | 2017-06-21 | 一种基于二次链接的航天器在轨维护注入码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710476446.5A CN107315587B (zh) | 2017-06-21 | 2017-06-21 | 一种基于二次链接的航天器在轨维护注入码生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107315587A CN107315587A (zh) | 2017-11-03 |
CN107315587B true CN107315587B (zh) | 2020-08-14 |
Family
ID=60183422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710476446.5A Active CN107315587B (zh) | 2017-06-21 | 2017-06-21 | 一种基于二次链接的航天器在轨维护注入码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107315587B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108491197B (zh) * | 2018-02-13 | 2021-06-11 | 北京控制工程研究所 | 一种基于同平台组合编译的航天器在轨维护注入码生成方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508657A (zh) * | 2011-10-18 | 2012-06-20 | 北京空间飞行器总体设计部 | 一种航天器嵌入式软件模块维护方法 |
CN102799502A (zh) * | 2012-06-28 | 2012-11-28 | 航天恒星科技有限公司 | 一种星载嵌入式软件在轨维护方法 |
US8627305B1 (en) * | 2009-03-24 | 2014-01-07 | Mcafee, Inc. | System, method, and computer program product for hooking code inserted into an address space of a new process |
CN104820586A (zh) * | 2015-04-09 | 2015-08-05 | 北京空间机电研究所 | 一种航天器嵌入式软件在轨维护方法 |
CN106020812A (zh) * | 2016-05-16 | 2016-10-12 | 北京控制工程研究所 | 一种针对dsp平台航天器软件的动态在轨维护方法 |
-
2017
- 2017-06-21 CN CN201710476446.5A patent/CN107315587B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8627305B1 (en) * | 2009-03-24 | 2014-01-07 | Mcafee, Inc. | System, method, and computer program product for hooking code inserted into an address space of a new process |
CN102508657A (zh) * | 2011-10-18 | 2012-06-20 | 北京空间飞行器总体设计部 | 一种航天器嵌入式软件模块维护方法 |
CN102799502A (zh) * | 2012-06-28 | 2012-11-28 | 航天恒星科技有限公司 | 一种星载嵌入式软件在轨维护方法 |
CN104820586A (zh) * | 2015-04-09 | 2015-08-05 | 北京空间机电研究所 | 一种航天器嵌入式软件在轨维护方法 |
CN106020812A (zh) * | 2016-05-16 | 2016-10-12 | 北京控制工程研究所 | 一种针对dsp平台航天器软件的动态在轨维护方法 |
Non-Patent Citations (1)
Title |
---|
基于Eclipse的航天嵌入式软件集成开发环境设计与实现;郝王松等;《空间控制技术与应用》;20150815;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107315587A (zh) | 2017-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103838584B (zh) | 一种移动终端应用的开发方法及装置 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN104298534B (zh) | 基于Lua语言的编程方法和装置 | |
US6934940B2 (en) | Source code transformation-temporary object reduction | |
CN104572238A (zh) | 一种高效的生成可执行软件包的方法及系统 | |
CN109255107A (zh) | 组态软件处理方法、装置、计算机设备和存储介质 | |
CN105447246A (zh) | 一键生成电气原理图的方法与系统 | |
CN104899138A (zh) | 一种uvm验证环境中复用c程序测试向量的方法 | |
CN111158680A (zh) | 一种页面构建的方法、装置、设备及存储介质 | |
Yie et al. | Advanced traceability for ATL | |
CN108491197B (zh) | 一种基于同平台组合编译的航天器在轨维护注入码生成方法 | |
CN107315587B (zh) | 一种基于二次链接的航天器在轨维护注入码生成方法 | |
CN112783558A (zh) | 一种加快Linux内核启动的自解压阶段的方法 | |
CN104991810A (zh) | 自动添加apk到安卓系统中的方法及处理系统 | |
CN110580146B (zh) | 一种基于eros的混合应用解决系统 | |
CN108874395B (zh) | 一种组件化流处理过程中的硬编译方法及装置 | |
CN111279318B (zh) | 计算机软件优化系统和方法 | |
CN111913704A (zh) | 一种基于VSCode快速开发GSP7脚本的方法及插件工具 | |
CN109960510B (zh) | Android应用动态链接库的加固方法及相关设备 | |
CN115237390A (zh) | 一种继电保护装置逻辑图生成代码方法、装置及存储介质 | |
CN114995828A (zh) | 智能合约在线调用方法、系统、介质及设备 | |
CN104750482A (zh) | 一种构建基于MapReduce的动态脚本执行引擎的方法 | |
CN110457064B (zh) | 网络割接脚本的生成方法及装置 | |
CN103488519A (zh) | 一种交互式脚本语言解释器的实现方法 | |
CN107563025B (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 |