3、开发环境搭建:QNX SDP安装与配置、Momentics IDE使用、目标机与宿主机连接

好,咱们进入第三章。这一章,说白了就是「把家伙事儿备齐」。

很多新手朋友上来就急着写代码,结果编译不过、连不上板子,折腾一整天。我当年也干过这种傻事。所以这一章,咱们踏踏实实把环境搭好,后面才能跑得快。

3.1 QNX SDP 安装与配置

QNX SDP(Software Development Platform)是整套开发工具链的核心。它包含了编译器、链接器、调试器、头文件、库文件,以及最重要的——BSP(板级支持包)

3.1.1 获取安装包

你需要从 BlackBerry QNX 官网或者你们公司的内部仓库获取 SDP 安装包。目前主流版本是 QNX SDP 7.0 和 7.1。我个人建议:能用 7.1 就别用 7.0,因为 7.1 修复了不少坑,尤其是对 ARMv8 架构的支持更完善。

版本选择建议:

  • QNX SDP 7.0:适合老项目维护,或者对实时性有极端要求的场景
  • QNX SDP 7.1:适合新项目开发,支持更多 SoC,工具链更稳定

3.1.2 安装步骤

安装过程其实不复杂,但有几个细节要注意。我直接说步骤:

  1. 解压安装包:通常是一个 .run 文件。在终端里执行 chmod +x qnx-sdp-7.1.0.run,然后 ./qnx-sdp-7.1.0.run
  2. 选择安装路径:我习惯装到 /opt/qnx710。注意路径里不要有中文或空格,否则后面编译会出一些莫名其妙的错误。
  3. 选择组件:全选就行,别省那点硬盘空间。一个完整的 SDP 大概 8-12GB。
  4. 配置环境变量:安装完成后,需要把 QNX 的工具链加到 PATH 里。在 ~/.bashrc~/.zshrc 里添加:
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
export MAKEFLAGS=-j8  # 根据你的CPU核心数调整

然后 source ~/.bashrc 使其生效。

小技巧: 我习惯在 /opt/qnx710 下创建一个 env.sh 文件,里面放这些环境变量。每次打开新终端,直接 source /opt/qnx710/env.sh 就行,不用每次都改 .bashrc

3.1.3 验证安装

安装完别急着高兴,先验证一下:

qcc --version
# 应该输出类似:qcc (QNX C/C++ Compiler) 8.3.0 2019-03-15

ntox86_64-gcc --version
# 确认交叉编译器可用

如果提示 command not found,别慌。检查一下环境变量是否生效,或者看看 $QNX_HOST/usr/bin 下有没有 qcc 这个文件。我曾经遇到过安装路径选错了,结果 qcc 跑到另一个目录去了。

3.2 Momentics IDE 使用

Momentics IDE 是基于 Eclipse 的集成开发环境。说实话,我平时写代码更喜欢用 VSCode 或者 Vim,但调试的时候,Momentics 确实好用。尤其是它的 System ProfilerMemory Analyzer,对排查性能问题帮助很大。

3.2.1 启动与配置

Momentics IDE 就在 SDP 安装目录下:

/opt/qnx710/host/linux/x86_64/ide/qde

双击启动,或者直接命令行执行 ./qde。第一次启动会让你选择工作空间(workspace),我建议单独建一个目录,比如 ~/qnx_workspace,别跟其他项目混在一起。

3.2.2 创建工程

创建一个 QNX 工程很简单:

  1. File → New → QNX C/C++ Project
  2. 选择工程类型:QNX Executable(可执行文件)或 QNX Shared Library(动态库)
  3. 选择工具链:比如 QNX 7.1 ARMv8 LE(根据你的目标机架构选)
  4. 填写工程名,Finish

工程创建后,IDE 会自动生成一个 .qnxproject 文件和一个 Makefile。嗯,这里要注意:不要手动修改 Makefile,除非你非常清楚自己在做什么。Momentics 的构建系统会自动管理依赖关系。

3.2.3 编译与调试

编译:右键工程 → Build Project。或者直接点工具栏上的小锤子图标。

调试:右键工程 → Debug As → QNX C/C++ Application。IDE 会自动启动 QNX 的 qconn 服务,连接到目标机。

避坑指南: 我曾经在调试时发现程序跑不起来,折腾了半天,最后发现是 调试配置里的 IP 地址写错了。目标机的 IP 变了,但 IDE 里还是旧的。所以每次调试前,先确认目标机的 IP 是否正确。

3.3 目标机与宿主机连接

这是整个开发环境搭建中最容易出问题的一步。很多朋友卡在这里,连不上板子,心态就崩了。别急,咱们一步步来。

3.3.1 连接方式

QNX 支持多种连接方式,最常见的是:

连接方式 适用场景 优点 缺点
以太网(Ethernet) 开发板、虚拟机 速度快,稳定 需要网络配置
串口(Serial) 早期调试、无网络环境 简单可靠 速度慢,只能传文本
USB 部分开发板支持 即插即用 驱动配置麻烦

我个人最推荐以太网连接。速度快,而且可以同时跑调试、文件传输、日志输出,非常方便。

3.3.2 配置目标机

目标机上需要运行 qconn 服务。这个服务默认在 QNX 的 BSP 镜像里已经包含了。你只需要在目标机的终端里执行:

qconn &

然后确认它是否在监听:

netstat -an | grep 8000
# 应该看到 tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN

如果没看到,可能是网络没配好。检查一下 IP 地址:

ifconfig
# 确认有 IP 地址,比如 192.168.1.100

小技巧: 我习惯在目标机的 /etc/rc.d/rc.local 里加上 qconn &,这样每次开机自动启动,省得手动敲命令。

3.3.3 配置宿主机

在 Momentics IDE 里配置目标机连接:

  1. Window → Preferences → QNX → QNX Target Navigator
  2. 点击 Add,填写目标机的 IP 地址(比如 192.168.1.100)
  3. 端口默认 8000,不用改
  4. 点击 Test Connection,如果显示 Connection Successful,就说明连上了

如果测试失败,最常见的原因是:

  • 防火墙:宿主机或目标机的防火墙挡住了 8000 端口。关掉防火墙试试。
  • 网络不通:用 ping 命令测试一下宿主机和目标机是否在同一个网段。
  • qconn 没启动:回到目标机上确认 qconn 是否在运行。

3.3.4 文件传输

连接成功后,你可以在 Momentics 的 Target Navigator 视图里看到目标机的文件系统。直接拖拽文件就能上传或下载,非常方便。

如果你更喜欢命令行,也可以用 scpftp。QNX 默认支持 ftp,但安全性一般。我建议用 scp

# 从宿主机上传文件到目标机
scp my_program qnxuser@192.168.1.100:/tmp/

# 从目标机下载文件到宿主机
scp qnxuser@192.168.1.100:/tmp/log.txt ./

核心要点总结:

  • SDP 安装后一定要验证环境变量和编译器
  • Momentics IDE 调试功能强大,但注意检查 IP 配置
  • 目标机与宿主机连接,qconn 是核心,网络是基础

好了,环境搭建就到这里。下一章咱们开始写第一个 QNX 程序,跑在目标机上。到时候你会发现,前面这些准备工作,都是值得的。