2. 开发环境搭建:QNX Momentics IDE安装、交叉编译工具链配置、目标板与宿主机连接
好,咱们正式开始动手。这一章要解决的是「工欲善其事,必先利其器」的问题。很多新手在QNX开发上栽跟头,其实不是代码写错了,而是环境没搭对。我见过太多人花了一整天装IDE,结果连不上目标板,最后发现是网络配置少了个网关。
咱们一步步来,把这三个环节吃透:IDE安装、交叉编译链配置、宿主机与目标板连接。嗯,顺序很重要,别跳步。
2.1 QNX Momentics IDE 安装
QNX Momentics IDE 是基于 Eclipse 的。说白了,它就是个定制版的 Eclipse,集成了 QNX 的编译、调试、分析工具。我个人习惯用 6.6 或 7.0 版本,这两个版本比较稳定。
核心要点:IDE 版本必须与目标系统的 QNX 版本匹配。比如你目标板跑的是 QNX 6.6,就别装 7.0 的 IDE,否则 BSP 包可能不兼容。
安装步骤
- 下载安装包:从 QNX 官网或你的授权渠道获取。注意区分 Windows 版和 Linux 版。我一般在 Ubuntu 18.04/20.04 上装,比较省心。
- 执行安装:
安装路径我建议用chmod +x qnxmomentics-7.0.run sudo ./qnxmomentics-7.0.run/opt/qnx700,别用带空格的目录,否则后面编译脚本容易出幺蛾子。 - 配置环境变量:
记得把这几个变量写到export QNX_HOST=/opt/qnx700/host/linux/x86_64 export QNX_TARGET=/opt/qnx700/target/qnx7 export PATH=$QNX_HOST/usr/bin:$PATH~/.bashrc里,不然每次开终端都要 export 一遍,烦得很。
小技巧:安装完成后,先跑一下 qcc --version 看看能不能正常输出。如果提示找不到命令,八成是 PATH 没配好。
2.2 交叉编译工具链配置
交叉编译,说白了就是在你的 PC(x86)上编译出能在 ARM 或 x86 目标板上运行的代码。QNX 的工具链叫 qcc,它是个封装器,背后调用的是真正的编译器(如 gcc 或 llvm)。
我在项目中遇到过一个问题:同事直接用了系统自带的 gcc 编译,结果放到目标板上跑不起来,报错说缺少动态库。嗯,这就是没用交叉编译链的典型后果。
配置步骤
- 确认工具链路径:
如果能看到文件,说明工具链安装正常。ls $QNX_HOST/usr/bin/qcc - 测试编译:
写一个简单的 hello.c:
然后编译:#include <stdio.h> int main() { printf("Hello from QNX!\n"); return 0; }
这里的qcc -Vgcc_ntoaarch64le hello.c -o hello_arm-Vgcc_ntoaarch64le指定了目标架构为 ARM 64 位。如果是 x86 目标板,用-Vgcc_ntox86。 - 检查生成的文件:
输出应该类似file hello_armELF 64-bit LSB executable, ARM aarch64。如果显示的是 x86,说明你忘了加-V参数。
注意:交叉编译时,链接器会去找 $QNX_TARGET 下的库。如果你的目标板用了自定义的库路径,记得用 -L 参数指定。我曾经因为没加这个,折腾了整整一个下午。
2.3 目标板与宿主机连接
环境搭好了,代码也能编译了,下一步就是让宿主机(你的 PC)和目标板(比如 Raspberry Pi 或 i.MX6 开发板)能互相通信。这里通常有两种方式:串口 和 网络。
我个人强烈推荐用网络连接。为什么?因为串口速度慢,传个大点的文件能急死人。而且 QNX 的调试器(如 gdb)走网络更稳定。
网络连接配置
- 硬件连接:用网线直连宿主机和目标板。如果通过交换机或路由器也行,但记得把防火墙关掉。
- 设置 IP 地址:
在目标板上(通过串口终端或之前配好的网络):
在宿主机上:ifconfig en0 192.168.1.100 netmask 255.255.255.0 up
注意:两个 IP 必须在同一网段,否则 ping 不通。sudo ifconfig eth0 192.168.1.101 netmask 255.255.255.0 up - 测试连通性:
在宿主机上:
如果能收到回复,恭喜你,网络通了。ping 192.168.1.100
避坑指南:我曾经遇到过 ping 不通的情况,排查了半天,最后发现是目标板上的 io-pkt 没启动。QNX 的网络栈需要手动启动:io-pkt -d e1000(驱动名根据你的网卡调整)。
使用 QNX Momentics 连接目标板
- 打开 IDE,点击 Window → Show View → Target Navigator。
- 右键空白处,选择 New QNX Target。
- 填写目标板的 IP 地址(比如 192.168.1.100),端口默认 8000。
- 点击 Finish。如果连接成功,你会看到目标板的信息,比如 CPU 类型、内存大小等。
小技巧:如果连接失败,检查目标板上是否运行了 qconn 服务。这个服务是 QNX 的远程连接代理,默认监听 8000 端口。启动命令:qconn &。
2.4 验证环境
所有步骤完成后,我们来做个快速验证:在 IDE 中创建一个简单的 C 项目,编译后通过 Target Navigator 上传到目标板并运行。
- 在 IDE 中新建 QNX C Project。
- 编写 hello.c 并编译(记得选对构建配置,比如 Release 或 Debug)。
- 右键项目 → Run As → QNX C/C++ Application。
- 选择目标板,点击 OK。
如果控制台输出了 "Hello from QNX!",说明你的开发环境完全搭建成功了。嗯,这一步走完,后面的开发就顺了。
最后提醒:不同版本的 QNX 在工具链和 IDE 上可能有细微差别。如果你用的是 QNX 7.1 或 8.0,记得查阅对应的 Release Notes。我手头有个项目从 6.6 迁移到 7.0,光是 BSP 适配就花了两周。所以,版本匹配真的很重要。
好,这一章就到这儿。下一章咱们开始写第一个真正的网络驱动——一个简单的以太网驱动框架。到时候我会把我在实际项目中踩过的坑一一拆解给你看。