信息创新环境下的嵌入式软件交叉调试技术

2022-04-25 08:36丁吕繁陈玮彤王俊翔杨曦
电子元器件与信息技术 2022年2期
关键词:嵌入式软件断点插件

丁吕繁,陈玮彤,王俊翔,杨曦

(1.四川大学 计算机学院,四川 成都 610041;2.成都创腾软件有限公司,四川 成都 610095)

0 引言

为突破国外组织、机构对操作系统配套软件集成开发环境的垄断,弥补国内研发的操作系统软件生态不成熟、国内研发的操作系统对国产处理器支持不充分的问题,本项目实现了一个基于OSGi规范的嵌入式软件开发环境平台。该嵌入式软件开发环境支持银河麒麟操作系统,可以运行在国产飞腾处理器上,实现了对嵌入式软件开发过程的信息创新,在自主运行环境上突破代码编辑、管理、编译、项目管理、过程控制、项目发布、代码调试、覆盖率分析、性能优化等关键技术。

嵌入式软件因其实用性和灵活性,在近年来越来越受到人们的欢迎[1],而嵌入式平台的软件开发与桌面软件开发有很大的不同,其一般需要使用交叉编译和交叉调试环境,这意味着需要在宿主机上实现代码的编译,而代码的运行则是在目标机上,这使得编译和调试的过程更加复杂[2]。在一个软件的开发周期中,软件调试需要的时间往往占总开发时间的一半以上,一个好的调试环境可以极大地加快软件的开发速度[3]。

虽然目前已有少量针对国内研发的操作系统的交叉调试软件[4],但是总体来看,国内研发的操作系统下的交叉调试软件还是不足。针对目前在适配国内研发的操作系统中嵌入式软件开发工具的缺失,开发了一个适用于国产银河麒麟操作系统的嵌入式软件开发环境。在本文中,主要描述了嵌入式开发环境的调试部分,详细介绍了实现调试功能的各个组件及其功能,说明了调试流程的运行原理,最后给出了调试过程的图形化界面。

1 Eclipse平台

1.1 Eclipse基础框架

Eclipse项目是一个由多个软件公司参与研究和推广的通用集成开发环境,是一个开放源代码的、使用Java开发的可扩展开发平台,其核心是动态发现插件(Plugin)的体系结构[5]。Eclipse采用以OSGi规范为基础实现的一个微内核,该微内核负责处理基本环境的后台工作,其余工作由按规范开发的插件完成。

Eclipse由多个子系统构成,包括平台运行库(Platform Runtime)、工作区(workspace)、工作台(workbench)、图形API(SWT/JFace)、Java开发环境插件(JDT)、插件开发环境(PDE)等核心部分[6]。图1为Eclipse的体系结构。

图1 Eclipse 体系结构

通过集成来自不同供应商的插件,Eclipse可以不断扩展,实现各种不同的功能。各个工具建造者通过构建符合Eclipse要求的插件来扩展Eclipse的功能[7]。

Eclipse目前已经成为编写嵌入式软件集成开发环境的主流平台,包含了嵌入式软件开发调试过程中的各种工具,如源代码编辑、项目构建、交叉运行、交叉调试、交叉测试等。

1.2 Eclipse插件技术

Eclipse平台的子系统都依靠插件的形式实现,插件是一种按照指定应用程序接口规范编写的程序。插件技术使得系统结构清晰明了,提高了可维护性和移植性,便于调整系统功能,每个插件之间的连接关系是通过声明扩展点和扩展其它插件声明的扩展点来实现的[8]。

当Eclipse启动时,平台运行库(Platform Runtime)将扫描Plugins目录下所有插件,然后将插件逐个添加到注册表中,但此时并不会激活系统注册表中的插件,而是仅仅加载各个插件的配置文件中的信息,只有当用户在使用过程中真正需要某个插件时,平台才会将该插件的执行文件调入内存并激活使用。这种机制可以有效避免内存浪费,当该插件不再使用时,系统将适时将其清除出内存。

扩展点在Eclipse中作为一个松耦合的功能模块被广泛使用。在开发插件时,开发人员需要在插件清单中声明所开发插件的扩展点,提供接口和相关类的最小集合供他人使用。当其它插件需要使用到该插件时,需要声明该扩展点的扩展项,实现其接口,并引用提供的类或基于提供的类进行创建。

1.3 GDB调试器

GBD是GNU开源组织发布的跨平台源码级调试工具,可以用于C/C++等程序的跟踪调试。在嵌入式系统开发中,开发人员能够使用GDB以远程调试的方式控制目标机上的程序,实现单步运行、设置断点、查看内存信息、和目标平台交换信息等功能。GDB可以和目标机进行高效的交互,其在远程调试的动态性和实时性等方面也有明显优势[9]。

使用GDB调试器连接目标机时,可以使用通信端口或者TCP/IP的方式进行通信。在进行主从通信时,需要在目标机上维持一个进程,称之为目标机代理,其作用是执行从宿主机调试器发送过来的调试命令,并及时向宿主机调试器反馈目标机的状态信息和异常事件。宿主机调试器与目标机代理之间的通信遵循“GDB远程串行协议”,简称“GDB RSP协议”[10]。

2 基于Equinox OSGi框架的交叉调试环境的实现

2.1 交叉调试结构

本嵌入式软件开发环境的交叉调试功能由三个模块构成,分别为“目标机管理”、“调试环境”、“控制台”,调试模块结构如图2所示。在我们实现的信息创新集成开发环境中,宿主机搭载了使用国产飞腾处理器的银河麒麟操作系统,目标机搭载了使用国产龙芯处理器的嵌入式操作系统。

图2 调试模块结构

2.1.1 目标机管理

“目标机管理”模块是宿主机调试类工具和目标机服务器进行通信的中心,由“远程系统管理插件”和“目标机服务器”构成。“远程系统管理插件”提供目标机连接的创建、删除、连接、断开等功能,“目标机服务器”用于实现宿主机与目标机之间数据的路由和交换功能,可通过网络方式为远程宿主机提供调试服务。

其提供以下功能:①目标机连接管理,提供图形化的用户界面对目标机连接进行管理;②支持物理通信连接复用,可在单一物理连接上实现多个逻辑连接;③多目标机连接,支持一台宿主机同时连接多台目标机;④目标机共享,支持远程宿主机利用本地宿主机作为跳板,连接目标机。

2.1.2 调试环境

调试环境提供从宿主机下载执行程序到目标机的功能以及在宿主机上控制目标机上代码运行的功能。在宿主机的源代码上设置断点,通过调试环境可以控制目标机运行到断点处暂停,并且查看和修改目标机当前运行状态的上下文,如内存数据、寄存器当前值。

调试环境提供基本的调试功能,包括:运行控制、断点管理、符号表管理、信息查询、数据修改。为用户提供了三种断点:行断点、表达式断点、数据断点。其中,行断点和表达式断点都可以由软件断点和硬件断点两种方式实现,而数据断点只能由硬件断点方式实现。

调试环境提供“系统级调试”和“分区级调试”两种调试方式。“系统级调试”在断点或异常的处理过程中会使得整个系统暂停,等待用户的下一步命令,其调试的对象是整个目标机系统;“分区级调试”在断点或异常的处理过程中,只停止被调试的分区,其余分区照常运行,被调试的对象是用户指定的分区。

2.1.3 控制台

控制台向开发者提供命令行操作的功能,包括“宿主机控制台”和“目标机控制台”。其中“宿主机控制台”提供一个菜单可以直接启动宿主机开发环境提供的命令行窗口,“目标机控制台”接收开发者在控制台输入的命令,使用GDB调试器将命令发送给目标机并反馈结果。

2.2 交叉调试流程

与其它平台的交叉调试流程类似[11],我们的交叉调试工具在进行调试时,大致分为三个步骤。

第一步,宿主机与目标机之间的连接,初始化二者的交叉调试环境,包括启动宿主机端的远程调试器和目标机端的代理服务器等操作。

第二步,“调试环境”组件利用“目标机管理”组件,发送一系列内存读写的指令,将需要运行的程序镜像下载到目标机的内存上。并且根据用户在调试页面的操作,将断点信息传输到目标机,在适当位置设置断点,方便用户进行远程调试。

第三步,开始运行程序,在遇到用户设置的断点之前,程序将正常执行。当程序运行遇到断点时,程序的控制权将从目标机处理器转移到目标机的代理服务器上,而此时代理服务器将通过“目标机管理”组件向宿主机报告遇到断点,并发送断点的上下文信息,方便宿主机上的用户判断下一步的操作,此时目标机服务器将一直等待宿主机的回复,不会有下一步操作。宿主机在得知目标机运行遇到断点之后,便可以如本机调试一样,查看和修改断点时刻的寄存器信息、内存信息等上下文信息。

2.3 应用实例

建目标机连接时,由于目标机使用的处理器为国产龙芯处理器,其体系结构为mips,因此设置体系结构为mips,连接类型为UDP,在连接参数中有目标机服务器的调试端口IP地址,设置超时时间为5000ms。若发生连接超时,可以重启IDE再尝试连接。连接页面如图3所示。

图3 连接目标机

右键项目名,选择调试,等待一段时间后,选择分区加载。若遇到分区映像已存在,则选择覆盖。选择界面如图4所示。

图4 选择加载分区

在点击加载之后,就可以进入调试状态,在下图中main.c中双击设置断点,点击上方工具栏的继续按钮,开始调试程序,程序会在断点处暂停,查看目标机的状态信息。调试界面如图5所示。

图5 调试界面

在交叉调试的过程中,会使用到多个调试按钮,分别为继续、暂挂、终止、断开连接、单步跳入、单步跳过、单步返回。

3 结语

本文介绍了在国产银河操作系统下,嵌入式软件开发环境中的调试功能和实现技术。首先对Eclipse框架和相应的插件机制进行了说明,在此基础上详细描述了调试功能的相关组件及结构,对具体的调试流程进行了解释,并且给出了在实际调试过程中的用户界面。通过使用该嵌入式软件开发环境,开发人员可以较为方便地在银河麒麟操作系统上开发针对龙芯等mips架构嵌入式开发板的软件,提高了在银河麒麟操作系统上进行嵌入式开发的效率,丰富了国内研发的操作系统的软件开发生态。

猜你喜欢
嵌入式软件断点插件
断点
嵌入式软件测试数据传输稳定性检测方式分析
自编插件完善App Inventor与乐高机器人通信
基于安全性分析的嵌入式软件测试
用Eclipse调试Python
火力发电机组自启停(APS)系统架构设计方案
一类无限可能问题的解法
基于OSGi的军用指挥软件插件机制研究
全景相机遥控器嵌入式软件V1.0 相关操作分析
基于VPRS方法的汽车嵌入式软件品质评估