面向跨平台可复用组件的交叉编译工具设计与实现

known 发布于 2025-08-25 阅读(394)

摘" 要:伴随着软件三化(通用化、系列化、组合化)的发展,军用领域软件跨平台可复用已成为一种趋势。针对这一趋势,文章设计并实现一种面向跨平台可复用组件的一体化交叉编译工具。首先介绍了基于组件框架的组件跨平台技术,其次从工具链管理、项目向导、并行构建管理等方面进行了交叉编译工具的设计,最后通过实现的编译工具同时编译出龙芯锐华、DSP锐华和ARM麒麟等多个目标平台的组件目标文件。实验结果表明,该交叉编译工具可支持组件的跨平台复用,提升了软件的复用性和可移植性,具有重要的理论和现实意义。

关键词:跨平台可复用组件;交叉编译;并行构建

中图分类号:TP242.6" " " 文献标识码:A" " 文章编号:2096-4706(2024)09-0158-06

Design and Implementation of Cross Compilation Tool for

Reusable Across-Platform Components

CHEN Dingcai, YIN Jun, XU Peng

(The 36th Research Institute of CETC, Jiaxing" 314033, China)

Abstract: With the development of software three standardization, generalization, serialization, and combination, cross-platform reusability of military software has become a trend. In response to this trend, it designs and implements an integrated cross compilation tool for reusable cross-platform components. Firstly, the cross-platform technology of components based on component framework is introduced. Secondly, the design of cross compilation tools is carried out from the aspects of tool chain management, project guide, and parallel construction management. Finally, the implemented compilation tool is used to simultaneously compile component target files for multiple target platforms such as Longxin Ruihua, DSP Ruihua, and ARM Qilin. The experimental results indicate that the cross compilation tool can support cross-platform reusability of components, improve softwares reusability and portability, and has important theoretical and practical significance.

Keywords: reusable across-platform component; cross compilation; parallel construction

0" 引" 言

随着装备技术的快速发展,各种装备的应用规模越来越大,面对任务的多样性,固定任务的装备已经难以满足需求,多功能、通用化、组件化的综合装备在这种情境下快速发展起来。在通用硬件平台上采用软件组件组合技术,实现对平台功能的修改、增加和升级,以适应不同电磁环境的功能要求。这一方式已逐渐成为主流,也是软件通用化、系列化、组合化的必经之路[1],组件作为封装特定算法和功能的模块化单元发挥着至关重要的作用。由于不同装备平台之间的差异性、通用硬件平台架构的多样性,以及处理器和操作系统的广泛性,对封装相同算法或功能的组件提出了适用于不同处理器和操作系统的要求。

装备平台有高稳定性的机载、星载平台,移动式车载、舰载平台,弹载平台,以及固定式平台;选择装备硬件平台中处理器需考虑的因素有性能、自主可控、稳定供货等,常用的处理器有X86、MIPS(龙芯)、ARM、Alpha(申威)架构CPU,以及DSP等[2];装备配备的操作系统各种各样,有锐华、天脉、风河操作系统,以及Linux、Windows系统[3]。对于硬件平台和操作系统的组合环境,组件都必须编译生成对应的目标文件。一般情况下,每个组合都有操作系统厂商或开源公司提供的一套集成开发环境(Integrated Development Environment, IDE),对于代码相同的组件,需要在不同的集成开发环境下交叉编译生成对应的目标文件,这给组件跨平台复用开发带来庞大的工作量;在组件开发过程中很难及时发现组件某块代码不适用于某环境,只有在该环境的集成开发工具进行交叉编译时才能发现问题所在,若发现问题则已经完成的交叉编译变得毫无意义,这会给组件开发带来重复性的工作。

Eclipse作为一个开放源代码、基于Java的可扩展开发平台,其本身由多个子系统构成,每个子系统又是由一个或多个插件实现的,它们都建立在平台运行库之上。安装CDT(C/C++ Development Toolkit)插件后,该平台就变成一个功能强大的C/C++ IDE了[4]。目前已广泛应用于Java、C++开发,遗憾的是CDT插件只支持单平台编译。

针对以上问题,基于Eclipse,通过交叉编译工具链管理方案、模板代码配置以及不同目标平台并行编译等方案,实现了面向跨平台可复用组件的交叉编译工具。

1" 组件跨平台可复用技术

1.1" 组件框架

根据《美军预警机现代化》文献资料,美军预警机软件模块化发展经历了两个阶段[5]:第一个阶段是模块杂乱无章,盘根错节,模块间依赖性复杂,模块独立性差;第二个阶段是软件模块遵循统一的规则,模块间无依赖,模块完全独立。两个阶段最大的差别在于软件体系结构中是否有“软件框架”[6,7]。如图1所示的“组件框架+组件”的软件架构已成为一种先进的软件架构和研发模式。

图1中组件框架架构包含硬件环境层、软件平台层和应用层,硬件环境层主要包括计算机处理资源,软件平台层包括操作系统、软件框架、通信中间件、计算中间件等,应用层包括一系列标准化的软件组件。

软件平台层是广义的组件框架,软件框架和通信中间件的组合为狭义的组件框架,本文中组件框架指的是狭义的组件框架。组件框架按统一方式创建、销毁、访问组件对象,全生命周期管理组件对象,是组件对象的载体和基座。

可以看出,针对不同的操作系统(如锐华、麒麟等)、不同架构的CPU(如X86、MIPS、ARM架构)和不同的处理机平台(如通用CPU、DSP平台),组件框架隔离了应用层组件与操作系统、硬件环境层的关联依赖。针对不同的硬件、软件环境,组件框架需根据操作系统、硬件平台进行适配,形成相应的组件框架软件。

1.2" 组件接口标准化封装

组件对外接口采用统一格式,接口实现细节由组件框架内部实现,不同平台和机器间的通信细节完全由组件框架进行屏蔽,组件间不直接通信,组件间完全松耦合。组件框架根据组件基类规范统一组件接口。组件接口设计如图2所示。

组件接口分为主动调用型接口和虚函数接口,图2中虚线接口为虚函数接口,由派生于组件基类的具体组件来实现;实线接口为主动调用型接口,具体组件可直接调用完成相应功能。

1.3" 跨平台可复用组件编程约束

作为支持跨平台可复用的组件,组件编程时只可使用四类接口:继承于组件基类的接口、操作系统POSIX接口、组件框架提供的通用接口、其他与操作系统无关的算法接口。只要满足编程约束,组件代码一定可以编译出不同平台下的目标文件,并且可由相应平台的组件框架加载运行。

2" 一体化交叉编译工具设计

C/C++开发者通常需要遵循一套标准的工作流程,包括创建项目、编辑源代码、配置构建环境、执行编译构建,以及开展运行和调试。开发工具必须支持和满足这些工作流程中的各项活动[8]。本文在Eclipse的基础上通过插件的方式拓展了项目向导、工具链管理、并行构建管理、代码模板管理模块,实现了一体化交叉编译工具,其组成如图3所示。

2.1" 工具链管理模块

工具链管理提供图形化界面,用以新增或删除各平台的交叉编译工具链。工具链的配置信息包括交叉编译工具链名称、工具链所在文件路径、对工具链的描述以及编译参数等信息。其中,编译参数又包含了编译设置与链接设置两大部分,为后续makefile的生成提供静态参数记录。将工具链的配置信息存储至XML配置文件,达到“一次配置多次可用”的目的。配置文件中工具链配置层级结构如下:

lt;工具链管理gt;

lt;名称=\"dsp-reworks\"/gt;

lt;工具链前缀=\"hr2-elf-\"/gt;

lt;工具链路径=\"XX\6.1.0-DSP\tools\build\gnuhr2\"/gt;

lt;输出文件前缀=\"\"/gt;

lt;输出文件后缀=\"so\"/gt;

lt;工具链简述gt;

宿主机:x86+windows

目标机:dsp+reworks

lt;/工具链简述gt;

lt;参数配置gt;

lt;编译配置gt;

lt;宏定义值=\"REWORKS\"/gt;

lt;头文件路径=\"XX/6.1.1-MIPS/resource/h\"/gt;

lt;优化级别=\"O0\"/gt;

lt;其他参数=\"-march=hr2 -D_GS464_\"/gt;

lt;/编译配置gt;

lt;链接配置gt;

lt;依赖库文件/gt;

lt;链接指令=\"ld -r --oformat=elf64-littlemips\"/gt;

lt;其他参数/gt;

lt;/链接配置gt;

lt;/参数配置gt;

lt;/工具链管理gt;

lt;工具链管理/gt;

2.2" 代码模板管理模块

为达到跨平台的目标,组件需派生于组件基类。为提高开发效率,减少基类重复代码的编写,本工具提供预置模板代码的功能,可为动态库项目、静态库项目和可执行程序项目创建多个模板。在创建项目时选择所需项目类别下的不同模板代码,在设置主类名称后可同时将模板代码的依赖加入工程依赖中,并且将所设置的主类名称替换为模板代码中的lt;EXTENTION_MAIN_CLASS_NAMEgt;字符串。模板代码配置的部分文件如下:

lt;模板代码组gt;

lt;模板代码 名称=\"C++基类模板1\" gt;

lt;组件基类路径=\"..\EXTENSION_MAIN_CLASS_NAME.cpp\"/gt;

lt;依赖文件夹路径=\"..\othercode1\"/gt;

lt;/模板代码gt;

lt;模板代码name=\"C++基类模板2\" gt;

lt;组件基类路径=\"..\EXTENSION_MAIN_CLASS_NAME.cpp\"/gt;

lt;依赖文件夹路径=\"..\othercode2\"/gt;

lt;/模板代码gt;

......

lt;/模板代码组gt;

lt;模板代码组/gt;

基于模板代码配置形成代码模板的具体流程如图4所示。

2.3" 项目向导模块

项目向导模块负责“跨平台组件”项目工程的入口向导,以图形化方式引导开发者设置项目名称、头文件路径、动态库路径、工具链选择等基本信息,从而完成多工具链管理项目的创建。项目向导流程如图5所示,具体步骤如下:

1)选择自定义的多工具链管理项目。

2)在填写完项目名称和主类后进行模板代码选择(详见代码模板管理模块)。

3)选择已有的交叉编译工具链(详见工具链管理模块)。

4)项目创建完成,其中模板代码及其依赖文件被复制到SRC文件夹下。

2.4" 并行构建管理模块

在传统的编译过程中,源代码经过预处理、编译、汇编和链接等步骤最终生成可执行文件。而在交叉编译过程中,由于目标设备与开发机之间存在硬件架构上的差异,需要额外使用特殊的编译器和工具链[9,10]。具体来说,交叉编译需要在开发机上搭建与目标设备相同的编译环境,并将编译器配置为生成目标设备可执行文件或库文件。图6为交叉编译过程图,具体步骤如下:

1)获取或构建适用于目标平台的交叉编译工具链,包括交叉编译器、交叉汇编器和交叉链接器。

2)设置交叉编译所需的环境变量,确保编译器能够找到正确的头文件和库文件。

3)编写源代码,通常使用与目标平台无关的高级语言,如C或C++。

4)使用配置好的交叉编译工具链将源代码编译成目标平台的机器代码。这一步生成目标平台可执行文件或库文件。

本模块通过读取工具链管理模块所提供的编译参数(编译配置信息在选定目标平台后被统一存储在隐藏项目文件cproject中),分别生成不同平台下的makefile文件,自动生成编译脚本并行执行不同平台下的编译指令,最终将编译结果文件存放至各目标平台文件夹下,具体流程如图7所示。

3" 一体化交叉编译工具实现

本文以频谱组件开发为例,在龙芯3A锐华平台、华睿DSP锐华平台以及ARM银河麒麟平台上进行频谱组件跨平台复用的实现验证。在项目创建之前,可先通过配置交叉编译工具链前缀与路径来添加不同平台下的工具链,通过界面添加相关信息后,本工具将这些信息存储至配置文件中,一次配置后下次便可直接使用。交叉编译工具链配置如图8所示。

在工具链配置完成后便可开始进行多工具链管理项目创建,点击项目向导,通过设置主类名称可对所选的代码模板与主类模板中的类名进行替换,并拷贝至当前项目的源代码目录下,如图9所示。

在组件代码编写完成后,查看已保存的交叉编译工具链并选择所需的多目标平台执行并行编译任务,如图10所示,项目并行编译后会自动生成arm-linux、dsp-reworks、mips-reworks,这三个文件夹用于存放编译过程生成的中间文件、makefile以及最终的二进制文件等。同时也按照不同平台开启不同窗口输出编译过程的日志信息。

4" 结" 论

本文针对组件跨平台应用开发中的交叉编译配置复杂、开发效率低等问题,设计并实现了基于Eclipse插件的多平台一体化交叉编译工具,该工具能够对同一份组件源代码完成多平台交叉编译。该工具具备多平台交叉编译组件源代码实时错误检测能力,解决了组件跨平台开发时多个IDE复杂及兼容性的问题,同时提高了跨平台组件的开发效率,为组件跨平台复用提供了理论和实践价值。

参考文献:

[1] 武志功.基于ISO/IEC26550的军用软件三化实现方法 [J].指挥信息系统与技术,2021,12(6):99-104.

[2] 李韶光,刘雷,郎金鹏,等.CPU发展概述及国产化之路 [J].网络空间安全,2020,11(4):114-117.

[3] 韩乃平,李蕾.国产操作系统生态体系建设现状分析 [J].信息安全研究,2020,6(10):887-891.

[4] 刘艳.基于Eclipse RCP的银行柜面软件架构可扩展性的研究 [J].软件,2018,39(5):18-21.

[5] 盛大同.关于预警机任务系统的软件架构研究 [J].中国电子科学研究院学报,2016,11(2):182-186.

[6] 盛春玲,王震,吴凯峰.航空电子软件组件化开发与管理技术研究和实现 [J].航空电子技术,2022,53(4):44-51.

[7] 黎贺,韩文俊,谢启超.标准化通用化组件框架设计 [J].信息技术与信息化,2022(7):169-172.

[8] 陈玮彤,黄天一,丁吕繁,等.自主可控环境下的集成开发环境 [J].现代计算机,2022,28(7):108-112.

[9] 杨光,李东方,沈炜,等.面向典型处理器架构的代码级侧信道仿真特性研究 [J].密码学报,2023,10(6):1225-1240.

[10] 蒋立兵,申秋,韩隆隆.内网漫游过程中的编译方法研究 [J].通信技术,202,54(7):1690-1695.

作者简介:陈鼎才(1977—),男,汉族,安徽宣城人,高级工程师,硕士,研究方向:软件无线电动态可重构框架研究;尹俊(1980—),男,汉族,浙江台州人,高级工程师,硕士,研究方向:通信控制系统软件总体研究;许鹏(1996—),男,汉族,江西抚州人,工程师,硕士,研究方向:应用软件开发技术。

标签:  组件 

免责声明

本文来自网络,不代表本站立场。如有不愿意被转载的情况,请联系我们。

iidomino cuppor