2. INTEGRITY开发环境搭建
INTEGRITY 是一个面向高可靠实时系统的分离内核(Separation Kernel)操作系统,其开发过程高度依赖 Green Hills Software 提供的 MULTI IDE 集成开发环境。MULTI 不仅提供编辑器、编译器、调试器,还集成了对 INTEGRITY 目标板的连接管理、许可证校验、工程构建与下载运行能力。本节将围绕“从零搭建一个可运行 INTEGRITY 工程”这一目标,依次说明 MULTI IDE 的安装与配置、目标板连接、许可证管理,以及第一个 Hello World 工程的创建与运行方法。
一、MULTI IDE 安装与配置
MULTI IDE 通常以安装包形式提供,安装前需确认主机操作系统版本、目标架构(如 ARM、PowerPC、x86)以及是否已获得对应许可证文件。安装过程本身较为直接,但安装后的配置决定了后续能否顺利连接目标板并编译 INTEGRITY 工程。
安装完成后,首次启动 MULTI 需要设置若干关键路径与选项:
- 编译器路径:指向 Green Hills 编译器安装目录,例如
C:\ghs\comp_201714或/usr/ghs/comp_201714。该目录下应包含ccarm、cxarm等交叉编译器可执行文件。 - INTEGRITY 安装路径:指向 INTEGRITY 操作系统及 BSP(板级支持包)所在目录,例如
C:\ghs\integrity_201714。BSP 中通常包含目标板初始化代码、链接脚本和驱动配置。 - 许可证服务器或本地许可证文件:若使用浮动许可证,需配置
GHS_LMHOST与GHS_LMWHICH环境变量;若使用节点锁定许可证,则需将.lic文件放置到指定目录。 - 目标连接方式:选择以太网、串口或 JTAG 等调试通道,并设置对应的 IP 地址、端口号或设备节点。
配置完成后,建议通过 MULTI 的 Build > Compiler Options 检查默认编译器是否可被正确调用。若出现“compiler not found”或“license invalid”提示,应优先排查路径与许可证配置,而不是直接进入工程创建阶段。
二、目标板连接
INTEGRITY 开发通常采用“主机—目标板”模式:主机运行 MULTI IDE,目标板运行 INTEGRITY 内核及应用程序。两者之间通过调试通道通信。常见连接方式包括以太网调试、串口调试和 JTAG 调试。其中以太网方式速度较快,适合下载较大镜像;串口方式配置简单,适合初步验证;JTAG 方式则常用于底层启动调试。
以以太网连接为例,典型配置如下:目标板 IP 设为 192.168.1.100,主机 IP 设为 192.168.1.10,子网掩码 255.255.255.0。在 MULTI 中通过 Target > Connect 选择 INTEGRITY Ethernet,填入目标 IP 与端口(默认通常为 7000 或 8000,具体以 BSP 文档为准)。连接成功后,MULTI 底部状态栏会显示目标板名称、内核版本及连接状态。
若连接失败,可按以下顺序排查:目标板是否已上电并运行 INTEGRITY 引导程序;网线是否连接正确;主机与目标板是否在同一网段;防火墙是否拦截调试端口;BSP 中的网络驱动是否已正确初始化。串口方式下,还需确认波特率(如 115200)、数据位、停止位和校验位与目标板一致。
三、许可证管理
Green Hills 的许可证分为节点锁定(Node-Locked)和浮动(Floating)两种。节点锁定许可证与特定主机网卡 MAC 地址或硬盘序列号绑定,适合单机开发;浮动许可证部署在许可证服务器上,多台主机可共享,适合团队开发。
节点锁定许可证的配置步骤通常为:将供应商提供的 .lic 文件复制到 C:\ghs\license 或 /usr/ghs/license 目录;设置环境变量 GHS_LMWHICH=ghs;若使用浮动许可证,还需设置 GHS_LMHOST=27000@license-server,其中 27000 为默认端口,license-server 为服务器主机名或 IP。配置完成后,可在命令行执行 lmutil lmstat -c 27000@license-server 查看许可证状态。
若编译时提示 License error: cannot connect to license server,应检查网络连通性、防火墙端口以及服务器端 lmgrd 进程是否运行。若提示 Invalid hostid,则说明许可证绑定的主机标识与当前主机不一致,需要重新申请或更换许可证。
四、第一个 Hello World 工程创建与运行
完成上述配置后,即可创建第一个 INTEGRITY 工程。在 MULTI 中选择 File > New > Project,选择 INTEGRITY Application 模板,指定工程名称(如 HelloIntegrity)和保存路径。随后在工程向导中选择目标板对应的 BSP,例如 arm_integrity_bsp,并选择内核配置(如 integrity.tgt)。
工程创建后,MULTI 会自动生成若干目录与文件,其中最关键的是 main.c 和 integrity.tgt。将 main.c 内容替换为以下示例代码:
#include <stdio.h>
#include <INTEGRITY.h>
int main(void)
{
printf("Hello, INTEGRITY!\n");
printf("System tick: %d\n", GetSystemTick());
return 0;
}
该示例中,printf 用于向调试串口或控制台输出字符串,GetSystemTick() 返回系统启动以来的时钟节拍数,可用于验证内核已正常运行。代码编写完成后,点击 Build 按钮进行编译。若编译成功,MULTI 会在 Output 窗口显示 Build succeeded,并生成可下载的镜像文件,通常位于 HelloIntegrity/out/ 目录下。
接下来通过 Target > Download 将镜像下载到目标板。下载完成后,选择 Target > Run 启动程序。若连接了串口控制台,可在串口终端中看到类似输出:
Hello, INTEGRITY!
System tick: 1024
若未看到输出,应依次检查:目标板是否已正确连接;下载是否成功;串口终端波特率是否匹配;printf 是否被重定向到正确的调试通道。在 INTEGRITY 中,标准输出通常通过 BSP 配置的 console 设备输出,若 BSP 未启用控制台,则需要修改 integrity.tgt 中的 Console 配置项。
main.c 并非运行在通用操作系统之上,而是运行在分离内核管理的分区中。因此,标准 C 库的部分函数(如文件操作、动态内存分配)可能受分区配置限制。在 Hello World 阶段,仅使用 printf 和简单系统调用即可,避免引入未配置的系统服务。
至此,一个完整的 INTEGRITY Hello World 工程已经创建、编译、下载并运行成功。该过程涵盖了 MULTI IDE 安装配置、目标板连接、许可证管理以及工程创建与运行四个关键环节,是后续所有 INTEGRITY 开发工作的基础。在实际项目中,还需要根据目标板硬件特性调整 BSP 配置、分区内存布局和调试通道参数,但基本流程与本节所述一致。