第3章:QNX开发环境搭建

说实话,很多初学者在QNX上栽的第一个跟头,不是代码写错了,而是环境没搭好。我见过太多人花了一整天装SDP,结果连个Hello World都跑不起来。嗯,今天我就带你一步步搞定这件事。

3.1 QNX SDP安装——别急着点下一步

QNX Software Development Platform(SDP)是整个开发的基础。我个人习惯先确认好版本兼容性,再动手安装。目前主流的是QNX 7.0和7.1,如果你做的是量产项目,我建议用7.0——为什么?因为我在项目中遇到过7.1某些BSP驱动在旧硬件上不兼容的情况,折腾了两天才回退。

安装前必做清单:

  • 确认宿主机系统:Windows 10/11 或 Ubuntu 18.04/20.04(我推荐Ubuntu,命令行操作更顺手)
  • 预留至少20GB磁盘空间(别问我怎么知道的,第一次装到一半磁盘满了)
  • 关闭杀毒软件(尤其是Windows Defender,它会误删QNX的某些工具链)
  • 以管理员权限运行安装程序

安装过程其实很简单,双击安装包,一路Next。但这里有个坑——安装路径不要有中文和空格。我曾经有个同事把路径设成了“D:\QNX开发工具”,结果编译时死活找不到头文件,查了半天才发现是路径编码问题。

我的个人习惯:安装完成后,立刻设置环境变量。在.bashrc或.zshrc里加上:

export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$PATH:$QNX_HOST/usr/bin

然后source一下,确保qcc命令能正常调用。

3.2 Momentics IDE配置——别被花哨界面迷惑

Momentics IDE是基于Eclipse的,所以如果你用过Eclipse,上手会很快。但说实话,我一开始觉得这IDE有点笨重,启动慢,还经常卡。后来我学乖了——只把它当编辑器用,编译和调试都走命令行

不过对于新手来说,IDE的图形化界面确实友好。安装完SDP后,Momentics通常会自动集成。如果没有,你需要手动指定QNX安装路径:

  1. 打开Momentics,点击 Window → Preferences
  2. 选择 QNX → QNX System Information
  3. 在 QNX Installation Directory 里填入你的SDP路径,比如 /opt/qnx710
  4. 点击 Apply and Close

配置完成后,新建一个QNX C/C++项目试试。我记得第一次创建项目时,IDE默认选了GCC编译器,结果编译出来的程序在目标机上跑不了——因为QNX必须用qcc编译器。所以你要手动在项目属性里把工具链改成QNX GCC。

注意:如果你在IDE里看到“No toolchains found”的报错,别慌。这通常是因为环境变量没配好。回到终端,执行一下 source ~/.bashrc,然后重启IDE就好了。

3.3 目标机与宿主机连接——最折腾的一步

环境搭好了,代码写完了,怎么跑起来?这就涉及到目标机和宿主机的连接了。QNX支持多种连接方式:串口、网口、USB。我个人最推荐网口,速度快,稳定,而且调试信息一目了然。

连接前,你需要确保目标机已经烧录了QNX系统镜像。如果还没有,可以参考上一章的内容。假设你的目标机已经跑起来了,接下来要做的是:

3.3.1 网络配置

目标机和宿主机要在同一个网段。我习惯把宿主机IP设为静态,比如192.168.1.100,目标机设为192.168.1.101。在目标机的QNX shell里执行:

ifconfig en0 192.168.1.101 netmask 255.255.255.0 up

然后在宿主机上ping一下:

ping 192.168.1.101

如果能ping通,恭喜你,网络通了。如果ping不通,先检查网线,再检查防火墙。我曾经被Windows防火墙坑过一次,关了就好了。

3.3.2 配置QNX连接

在Momentics IDE里,点击 Window → Show View → Target Navigator。右键空白处,选择 New QNX Target:

参数 说明 示例值
Connection Name 随便起个名字 MyQNXTarget
Hostname/IP 目标机的IP地址 192.168.1.101
Port 默认8000,不用改 8000
Username 默认root root
Password 默认空 (留空)

配置好后,点击 Test Connection。如果显示“Connection successful”,那就稳了。如果失败,检查目标机上是否启动了qconn服务:

qconn &

嗯,这个qconn就是QNX的通信守护进程,没有它,IDE连不上目标机。

3.3.3 上传并运行程序

连接成功后,在IDE里右键你的项目,选择 Run As → QNX C/C++ Application。IDE会自动把可执行文件上传到目标机的 /tmp 目录,然后远程执行。你会在 Console 窗口里看到程序的输出。

一个小技巧:如果你不想每次都通过IDE上传,可以用scp命令手动拷贝:

scp ./hello root@192.168.1.101:/tmp/

然后在目标机上直接运行:

/tmp/hello

这样调试起来更快,尤其是当你频繁修改代码的时候。

3.4 常见问题与避坑指南

环境搭建这块,我踩过的坑比写过的代码还多。下面列几个最常见的,你遇到了可以直接翻到这里查:

  • qcc: command not found —— 环境变量没配好,重新source一下.bashrc
  • Connection refused —— 目标机上没启动qconn,或者防火墙挡住了8000端口
  • Permission denied —— 上传到目标机时,目标机的/tmp目录权限不够,用chmod 777 /tmp临时解决
  • Segmentation fault —— 最常见的原因是编译器版本不匹配。确保宿主机和目标机用的是同一套SDP

我曾经有一次,折腾了整整一个下午,发现目标机上的qconn版本和宿主机上的SDP版本不一致,导致通信协议对不上。从那以后,我每次搭建环境都会先检查版本号:

# 宿主机上查看SDP版本
qcc --version

# 目标机上查看qconn版本
qconn -v

确保它们来自同一个SDP版本,否则你会遇到各种莫名其妙的问题。

3.5 小结

环境搭建这件事,说白了就是耐心活。你按照步骤来,一步都不要跳,基本不会出大问题。如果真遇到了,别慌,先检查网络,再检查版本,最后检查权限——90%的问题都出在这三个地方。

下一章我们会正式开始写代码,到时候你就能感受到QNX实时系统的魅力了。嗯,先把环境搭好,别到时候跑不起来又来找我诉苦。