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 安装步骤
安装过程其实不复杂,但有几个细节要注意。我直接说步骤:
- 解压安装包:通常是一个
.run文件。在终端里执行chmod +x qnx-sdp-7.1.0.run,然后./qnx-sdp-7.1.0.run。 - 选择安装路径:我习惯装到
/opt/qnx710。注意路径里不要有中文或空格,否则后面编译会出一些莫名其妙的错误。 - 选择组件:全选就行,别省那点硬盘空间。一个完整的 SDP 大概 8-12GB。
- 配置环境变量:安装完成后,需要把 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 Profiler 和 Memory Analyzer,对排查性能问题帮助很大。
3.2.1 启动与配置
Momentics IDE 就在 SDP 安装目录下:
/opt/qnx710/host/linux/x86_64/ide/qde
双击启动,或者直接命令行执行 ./qde。第一次启动会让你选择工作空间(workspace),我建议单独建一个目录,比如 ~/qnx_workspace,别跟其他项目混在一起。
3.2.2 创建工程
创建一个 QNX 工程很简单:
- File → New → QNX C/C++ Project
- 选择工程类型:QNX Executable(可执行文件)或 QNX Shared Library(动态库)
- 选择工具链:比如
QNX 7.1 ARMv8 LE(根据你的目标机架构选) - 填写工程名,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 里配置目标机连接:
- Window → Preferences → QNX → QNX Target Navigator
- 点击 Add,填写目标机的 IP 地址(比如 192.168.1.100)
- 端口默认 8000,不用改
- 点击 Test Connection,如果显示 Connection Successful,就说明连上了
如果测试失败,最常见的原因是:
- 防火墙:宿主机或目标机的防火墙挡住了 8000 端口。关掉防火墙试试。
- 网络不通:用
ping命令测试一下宿主机和目标机是否在同一个网段。 - qconn 没启动:回到目标机上确认
qconn是否在运行。
3.3.4 文件传输
连接成功后,你可以在 Momentics 的 Target Navigator 视图里看到目标机的文件系统。直接拖拽文件就能上传或下载,非常方便。
如果你更喜欢命令行,也可以用 scp 或 ftp。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 程序,跑在目标机上。到时候你会发现,前面这些准备工作,都是值得的。