第二章 开发环境搭建:QNX Momentics IDE安装、QNX SDK配置、交叉编译工具链、目标机与宿主机连接

好,咱们直接进入正题。搭建开发环境这件事,说难不难,说简单也不简单。我见过太多人卡在这一步,折腾一整天连个Hello World都跑不起来。其实说白了,只要理清几个关键点,半小时就能搞定。

2.1 QNX Momentics IDE安装

QNX Momentics IDE,本质上是个定制版的Eclipse。嗯,如果你用过Eclipse开发Java,那上手会很快。但如果你是从Visual Studio或VS Code转过来的,可能会觉得它有点「复古」。

我个人习惯用QNX Software Center来安装。这个工具会自动处理依赖关系,省去很多麻烦。

安装步骤:

  1. 从QNX官网下载QNX Software Center安装包
  2. 运行安装程序,选择安装路径(建议不要有中文和空格)
  3. 启动QNX Software Center,登录你的QNX账号
  4. 在「Available Software」中搜索「Momentics IDE」
  5. 选择对应版本(我一般选最新稳定版)
  6. 点击Install,等待下载完成

小技巧:安装路径我建议用 C:\qnx/opt/qnx。别问我为什么,问就是血的教训——路径太长会导致某些工具链报错,尤其是Windows系统。

安装完成后,第一次启动IDE会让你选择工作空间。我建议单独建一个目录,比如 D:\qnx_workspace,别跟其他项目混在一起。

2.2 QNX SDK配置

SDK配置这块,很多人容易搞混。QNX的SDK不是单独安装的,而是跟IDE一起打包的。但要注意,不同版本的QNX对应不同的SDK。

我记得有一次项目紧急,我随手装了个7.0的SDK,结果目标机跑的是6.6的系统。编译出来的二进制文件一运行就报错,折腾了两天才发现是SDK版本不匹配。

重要提醒:SDK版本必须与目标机上的QNX系统版本一致。大版本号不同,ABI不兼容,程序根本跑不起来。

配置SDK的步骤:

  • 打开QNX Software Center
  • 在「Installed Software」中查看已安装的SDK
  • 如果需要添加新SDK,点击「Install New Software」
  • 选择对应的QNX版本(比如QNX 7.0或QNX 6.6)
  • 安装完成后,在IDE的Preferences中设置默认SDK

你想想看,SDK里包含了什么?头文件、库文件、工具链,还有最重要的——系统镜像。没有正确的SDK,你连printf都调不通。

2.3 交叉编译工具链

交叉编译,说白了就是在你的电脑上编译出能在目标机上运行的程序。为什么不能直接在目标机上编译?因为目标机资源有限,跑个编译器太奢侈了。

QNX的交叉编译工具链通常位于 ${QNX_BASE}/host/linux/x86_64/usr/bin/ 或类似路径。工具链的名字很有规律:

工具 名称示例 说明
C编译器 ntoaarch64-gcc 针对ARM 64位架构
C++编译器 ntoaarch64-g++ 同上,C++版本
链接器 ntoaarch64-ld 链接目标文件
调试器 ntoaarch64-gdb 远程调试用

我曾经犯过一个低级错误:直接在宿主机上用gcc编译,然后拷到目标机上运行。结果当然是「Segmentation fault」。从那以后,我每次编译前都会检查一下工具链前缀。

验证工具链是否配置正确:

# 查看工具链版本
ntoaarch64-gcc --version

# 编译一个简单的测试程序
ntoaarch64-gcc -o hello hello.c

# 查看生成文件的架构信息
file hello
# 输出应该包含 "ELF 64-bit LSB executable, ARM aarch64"

如果 file 命令显示的是x86架构,那说明你用的不是交叉编译器。嗯,赶紧回去检查环境变量吧。

2.4 目标机与宿主机连接

连接目标机和宿主机,是调试的基础。QNX支持多种连接方式:串口、以太网、USB。我个人最常用的是以太网,速度快,稳定。

连接前需要确认几件事:

  • 目标机和宿主机在同一个网段
  • 目标机上运行了 qconn 服务
  • 宿主机能ping通目标机

配置qconn服务:

# 在目标机上启动qconn
qconn &

# 查看qconn是否在运行
pidin | grep qconn

# 如果没启动,检查/etc/config/qconn.conf配置文件

在IDE中配置目标机连接:

  1. 打开QNX Momentics IDE
  2. 进入Window → Show View → QNX System Information
  3. 右键点击空白处,选择「New QNX Target」
  4. 输入目标机的IP地址和端口(默认是8000)
  5. 点击「Test Connection」验证

我记得第一次配置时,怎么都连不上。后来发现是防火墙把8000端口给封了。你想想看,这种问题排查起来多浪费时间。所以建议先把防火墙关掉,或者添加例外规则。

连接失败的常见原因:

  • 目标机没启动qconn服务
  • 防火墙阻挡了端口
  • IP地址配置错误
  • 目标机和宿主机不在同一网段
  • 目标机上的QNX版本与SDK不匹配

连接成功后,你可以在IDE的「QNX System Information」视图中看到目标机的详细信息,包括CPU架构、内存大小、系统版本等。这时候,你就可以开始远程调试了。

嗯,到这里,开发环境就搭建好了。下一章我们会讲如何创建第一个QNX项目,并跑通Hello World。到时候你会发现,环境搭好了,后面的路就顺了。