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
安装步骤其实很简单:
- 从QNX官网下载
qnxmomentics-7.0-<版本号>-linux.x86_64.bin - 给执行权限:
chmod +x qnxmomentics-7.0-*.bin - 运行安装:
./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,然后:
- 选择
QNX 7.0作为SDK - 选择
aarch64le作为架构 - 编译器选
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 aarch64 和 ld-qnx.so.2,说明工具链配置正确。
2.4 目标板连接
代码编译好了,怎么跑到板子上?这里有两种方式:网络连接和串口连接。
网络连接(推荐):
我个人最常用这种方式。前提是目标板和开发机在同一个网段。
- 在目标板上启动
qconn服务:qconn & - 在IDE的
QNX Target Navigator视图里,右键 ->New QNX Target - 输入目标板的IP地址,端口默认8000
连接成功后,你会看到目标板的文件系统、进程列表、系统信息。这时候你就可以直接把编译好的程序拖进去运行了。
一个小技巧:如果连不上,先 ping 一下目标板。能ping通但连不上,八成是防火墙把8000端口封了。我在客户现场遇到过好几次,最后发现是IT部门的安全策略。
串口连接(备用方案):
当网络不通时,串口是最后的救命稻草。你需要一根USB转串口线,然后:
- Linux下:
screen /dev/ttyUSB0 115200 - Windows下:用PuTTY,选Serial,波特率115200
串口只能传文件,不能像网络那样直接拖拽。你得用 sz/rz 或者 scp(如果板子上有网络但IDE连不上)。
2.5 验证环境是否就绪
所有配置完成后,我建议你跑一个完整的流程:
- 在IDE里写一个简单的程序
- 交叉编译,生成ARM可执行文件
- 通过网络或串口传到目标板
- 在目标板上运行,看到输出
如果每一步都走通了,恭喜你,开发环境搭建完成。接下来就可以开始真正的HMI开发了。
常见问题速查:
| 问题 | 可能原因 | 解决办法 |
|---|---|---|
| IDE启动报错 | Java版本不对 | 安装OpenJDK 11 |
| 编译报错找不到头文件 | SDK路径未正确配置 | 检查Preferences里的SDK路径 |
| 连接目标板超时 | 防火墙或qconn未启动 | 关闭防火墙,确认qconn进程存在 |
| 程序运行段错误 | 编译器选错(用了gcc而非qcc) | 重新用qcc编译 |
嗯,环境搭建这部分就这些。看起来步骤多,其实熟练了十分钟就能搞定。下一章我们开始讲HMI框架的选型,那才是真正有意思的部分。