3、开发环境搭建:QNX SDP 7.1安装、QNX Momentics IDE配置、目标板与模拟器连接
好,咱们正式开始动手了。这一章,我带你把开发环境搭起来。说实话,环境搭建这事儿,看着简单,但坑不少。我见过太多人卡在这一步,折腾一整天连个Hello World都跑不起来。所以咱们稳一点,一步步来。
3.1 QNX SDP 7.1 安装:别急着点下一步
QNX Software Development Platform 7.1,简称SDP 7.1。这是咱们整个课程的基础。你想想看,没有它,你连编译工具链都没有。
安装前的准备
- 一台Linux主机(我推荐Ubuntu 20.04 LTS,亲测最稳)
- 至少50GB磁盘空间(别问我为什么,装完你就知道了)
- 8GB以上内存(虚拟机也行,但别低于4GB)
安装包从哪里来?嗯,这里要注意。QNX是商业软件,你需要从BlackBerry官网或者你们公司的内部仓库获取。我个人习惯用命令行安装,因为后续自动化脚本好写。
核心步骤:
# 解压安装包
tar -xzf qnx-sdp-7.1.0-xxx-linux-x64.tar.gz
# 运行安装脚本
cd qnx-sdp-7.1.0
./qnx-sdp-7.1.0-install
# 设置环境变量(记得加到.bashrc里)
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
我在项目中遇到过一个问题:安装路径里带了空格或者中文,结果编译死活报错。所以,路径里不要有空格,不要有中文。这是血的教训。
避坑指南:我曾经因为安装时选了默认路径(带空格的Program Files),结果折腾了三个小时才发现问题。后来我统一用 /opt/qnx710,再也没出过事。
3.2 QNX Momentics IDE 配置:别被花哨界面迷惑
Momentics IDE,说白了就是Eclipse套了个QNX的壳。但你别小看它,调试功能是真的强。
IDE安装与启动
安装完SDP后,IDE其实已经在里面了。你只需要:
# 启动IDE
/opt/qnx710/ide/qde
第一次启动会让你选工作空间。我建议单独建一个目录,比如 ~/qnx_workspace。别跟其他项目混在一起,不然以后找文件找到你怀疑人生。
配置交叉编译链
IDE启动后,需要告诉它你的工具链在哪。嗯,这里要注意:
- 打开 Window → Preferences → QNX → QNX Toolchains
- 点击 Add,选择你的SDP安装路径(比如 /opt/qnx710)
- IDE会自动识别出所有可用的架构(x86_64、aarch64等)
你想想看,如果你忘了配这一步,IDE会一直用你本机的gcc编译,那编译出来的东西在目标板上根本跑不了。我刚开始学的时候犯过这个错,编译了半小时,一运行就Segmentation fault,心态直接崩了。
小技巧:我个人习惯在IDE里同时配两个架构——x86_64用于模拟器测试,aarch64用于实际目标板。这样切换起来特别方便。
3.3 目标板与模拟器连接:让代码跑起来
环境搭好了,代码写好了,怎么跑?两种方式:模拟器或者真实目标板。
3.4.1 模拟器连接(适合前期开发)
QNX自带的模拟器叫qemu,但人家封装了一层,叫qnx-sim。启动方式很简单:
# 启动一个x86_64的模拟器
qnx-sim -S x86_64 -m 2G -c 4
# 启动后,它会打印出IP地址,比如 10.0.2.15
# 然后在另一个终端连接
qconn 10.0.2.15
为什么先连模拟器?因为快啊!我在项目中调试网络协议栈的时候,先在模拟器上跑通了逻辑,再部署到目标板。省去了来回烧写的痛苦。
3.4.2 目标板连接(真实环境)
真实目标板,比如瑞萨R-Car H3、NXP i.MX8,连接方式稍微复杂一点。你需要:
- 串口线(用于看启动日志)
- 网线(用于文件传输和调试)
- 电源线(这个不用我说吧)
典型连接步骤:
- 用串口工具(比如minicom)连接目标板,波特率115200
- 目标板上电,观察启动日志
- 启动后,在目标板上运行
qconn服务 - 在主机上运行
qconn [目标板IP]建立连接
验证连接是否成功:
# 在主机上执行
qconn 192.168.1.100
# 如果看到类似下面的输出,说明连接成功
Connected to target: 192.168.1.100
Target architecture: aarch64
QNX version: 7.1.0
我曾经在连接目标板时,发现qconn服务死活起不来。查了半天,原来是目标板上的防火墙把端口给封了。嗯,这里要注意:qconn默认使用8000端口,确保防火墙放行。
避坑指南:我曾经因为网线质量不好,导致qconn频繁断连。后来换了根六类屏蔽线,稳如老狗。别在这种小地方省钱。
3.4 验证环境:跑个Hello World
环境搭好了,连接也通了,咱们跑个程序验证一下。写个最简单的:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
printf("Hello from QNX!\n");
printf("Running on: %s\n", getenv("QNX_TARGET") ? "Target" : "Simulator");
return 0;
}
在IDE里新建一个QNX C Project,选好架构(x86_64或aarch64),编译。然后右键 → Run As → QNX Application。如果一切顺利,你会看到控制台输出:
Hello from QNX!
Running on: Simulator
看到这个输出,恭喜你,环境搭建成功了!
小技巧:我习惯在代码里加个环境变量判断,这样一眼就能看出程序跑在模拟器还是目标板上。调试的时候特别有用。
好了,环境搭建就到这里。下一章咱们开始真正写代码,搞一个简单的虚拟化示例。你先把环境跑通,有问题随时翻回来看看。记住,环境搭好了,后面的事就顺了。