2. 开发环境搭建:QNX Momentics IDE安装、QNX SDK配置、交叉编译工具链设置、目标板连接

好,咱们正式开始动手。这一章,说白了就是给你的电脑装上「武器」,让它能跟QNX系统对话。很多新手在这一步就卡住了,不是装不上,就是连不上目标板。别急,我带你一步步走一遍。

2.1 QNX Momentics IDE 安装

这个IDE,其实就是Eclipse套了个QNX的壳。我个人习惯用7.0版本,稳定,坑少。

安装前确认:

  • 操作系统:Ubuntu 18.04/20.04 或 Windows 10 x64
  • 硬盘剩余空间:至少 15GB(SDK和工具链很占地方)
  • 内存:8GB以上,我建议16GB

安装步骤其实很简单:

  1. 从QNX官网下载 qnxmomentics-7.0-<版本号>-linux.x86_64.bin
  2. 给执行权限:chmod +x qnxmomentics-7.0-*.bin
  3. 运行安装:./qnxmomentics-7.0-*.bin

嗯,这里要注意。安装路径不要有中文,不要有空格。我曾经有个同事把路径写成了「D:\QNX 开发工具」,结果死活编译不过,折腾了一下午才发现是空格惹的祸。

2.2 QNX SDK 配置

IDE装好了,只是个空壳。你得给它配上SDK,它才知道怎么编译QNX的程序。

SDK的安装包通常是一个 .qnx-sdp 文件。双击就能导入IDE。但我更喜欢手动配,因为更可控。

我的习惯做法:

把SDK解压到一个固定目录,比如 /opt/qnx/qnx700。然后在IDE的 Window -> Preferences -> QNX -> QNX SDKs 里添加这个路径。这样万一IDE崩了重装,SDK不用重新解压。

配置完成后,你可以在IDE里看到类似这样的信息:

QNX SDK 7.0
  Target: aarch64le
  Compiler: qcc (基于GCC 8.3.0)
  Host: Linux x86_64

为什么会看到 aarch64le?因为现在车机芯片基本都是ARM 64位的,小端模式。如果你用的是老款i.MX6,那可能是 armv7le

2.3 交叉编译工具链设置

交叉编译,说白了就是「在电脑上编译,在板子上运行」。你的电脑是x86架构,目标板是ARM架构,编译器得知道怎么生成ARM的机器码。

工具链其实就藏在SDK里。你不需要额外下载。关键是要让IDE知道用哪个。

在IDE里新建一个C/C++项目时,选择 QNX C/C++ Project,然后:

  1. 选择 QNX 7.0 作为SDK
  2. 选择 aarch64le 作为架构
  3. 编译器选 qcc,不要选 gcc

注意:qcc是QNX的封装编译器,它会自动链接QNX的库。如果你直接用gcc,编译出来的程序在目标板上跑不起来,因为缺少QNX的运行时库。我刚开始学的时候踩过这个坑,编译了三天,烧进去就是跑不了。

验证工具链是否生效,可以写个简单的Hello World:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Hello from QNX!\n");
    return EXIT_SUCCESS;
}

编译后,用 file 命令查看生成的可执行文件:

$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-qnx.so.2, not stripped

看到 ARM aarch64ld-qnx.so.2,说明工具链配置正确。

2.4 目标板连接

代码编译好了,怎么跑到板子上?这里有两种方式:网络连接和串口连接。

网络连接(推荐):

我个人最常用这种方式。前提是目标板和开发机在同一个网段。

  1. 在目标板上启动 qconn 服务:qconn &
  2. 在IDE的 QNX Target Navigator 视图里,右键 -> New QNX Target
  3. 输入目标板的IP地址,端口默认8000

连接成功后,你会看到目标板的文件系统、进程列表、系统信息。这时候你就可以直接把编译好的程序拖进去运行了。

一个小技巧:如果连不上,先 ping 一下目标板。能ping通但连不上,八成是防火墙把8000端口封了。我在客户现场遇到过好几次,最后发现是IT部门的安全策略。

串口连接(备用方案):

当网络不通时,串口是最后的救命稻草。你需要一根USB转串口线,然后:

  • Linux下:screen /dev/ttyUSB0 115200
  • Windows下:用PuTTY,选Serial,波特率115200

串口只能传文件,不能像网络那样直接拖拽。你得用 sz/rz 或者 scp(如果板子上有网络但IDE连不上)。

2.5 验证环境是否就绪

所有配置完成后,我建议你跑一个完整的流程:

  1. 在IDE里写一个简单的程序
  2. 交叉编译,生成ARM可执行文件
  3. 通过网络或串口传到目标板
  4. 在目标板上运行,看到输出

如果每一步都走通了,恭喜你,开发环境搭建完成。接下来就可以开始真正的HMI开发了。

常见问题速查:

问题 可能原因 解决办法
IDE启动报错 Java版本不对 安装OpenJDK 11
编译报错找不到头文件 SDK路径未正确配置 检查Preferences里的SDK路径
连接目标板超时 防火墙或qconn未启动 关闭防火墙,确认qconn进程存在
程序运行段错误 编译器选错(用了gcc而非qcc) 重新用qcc编译

嗯,环境搭建这部分就这些。看起来步骤多,其实熟练了十分钟就能搞定。下一章我们开始讲HMI框架的选型,那才是真正有意思的部分。