2、QNX开发环境搭建:从零开始,让系统跑起来
说实话,搭建开发环境这件事,看着简单,但坑不少。我见过太多新手卡在这一步,折腾一整天连个Hello World都跑不出来。今天我就把这些年踩过的坑、总结的经验,一次性说清楚。
2.1 QNX Momentics IDE安装——别急着点下一步
QNX Momentics IDE,说白了就是一套基于Eclipse的集成开发环境。你可能会想,Eclipse谁不会装?但QNX的版本和你的Host OS有讲究。
我个人的习惯是:先在Windows上装,调试方便。但如果你做BSP开发,建议用Linux(Ubuntu 18.04或20.04)。为什么?因为QNX的BSP编译工具链在Linux下更稳定,我在Windows上遇到过莫名其妙的路径问题。
安装步骤其实不复杂:
- 去QNX官网下载Momentics IDE安装包(注意选对版本,7.0或7.1)
- 双击安装,一路默认路径就行
- 安装完成后,启动IDE,它会自动检测QNX SDK路径
嗯,这里有个小技巧:安装完成后,先别急着写代码。打开IDE的Preferences,找到QNX标签页,确认一下Build Variants里有没有勾上你的目标架构(比如x86_64或ARM)。我当年就是没勾,编译出来全是错的。
2.2 QNX虚拟机配置——跑个系统看看
没有开发板?没关系,QNX可以在虚拟机里跑。我个人推荐用VMware Workstation,VirtualBox也行,但性能差点。
配置虚拟机时,有几个关键点:
- CPU:至少2核,建议4核
- 内存:2GB起步,4GB更稳
- 硬盘:20GB就够了,但记得用SCSI控制器
- 网络:桥接模式,方便宿主机和虚拟机通信
你可能会问,为什么网络要用桥接?说白了,QNX的调试器需要通过TCP/IP连接目标机。如果用NAT模式,端口映射搞起来太麻烦。我刚开始学的时候用NAT,折腾了两天才发现是网络模式的问题。
虚拟机装好之后,你需要一个QNX的镜像文件。这个可以从QNX官网下载,或者自己编译一个。我个人建议先用官方预编译的镜像,等熟悉了再自己编译。
2.3 QNX BSP编译——从源码到镜像
BSP(Board Support Package)编译,是QNX开发中最核心的一步。说白了,就是把硬件相关的驱动和系统配置打包成一个可启动的镜像。
编译BSP的流程大致如下:
- 下载对应开发板的BSP源码包
- 解压后,进入src目录
- 运行
make命令
但事情没这么简单。我遇到过最坑的问题是:编译到一半报错,说缺少某个头文件。后来发现是环境变量没设对。正确的做法是:
source qnx-env.sh # 设置QNX环境变量
cd /path/to/bsp/src
make clean
make
这里有个细节:qnx-env.sh这个脚本一般在QNX SDK的安装目录下。如果你找不到,可以手动设置:
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
编译成功后,你会得到一个 .ifs 文件(Image Filesystem)。这就是QNX的启动镜像。把它放到虚拟机的硬盘上,或者烧录到开发板的SD卡里,就能启动了。
2.4 目标机与宿主机连接——让两边说上话
环境搭好了,镜像也跑起来了,接下来就是让宿主机(你的电脑)和目标机(虚拟机或开发板)建立连接。QNX的调试器通过这个连接来下载程序、设置断点、查看变量。
连接方式主要有两种:
- 串口:稳定,但速度慢。适合调试内核
- 网络:速度快,但需要配置IP。适合应用开发
我个人更推荐网络连接。配置方法很简单:
- 在目标机上,用
ifconfig查看IP地址 - 在宿主机上,打开Momentics IDE,新建一个QNX Target
- 输入目标机的IP地址,端口默认8000
你可能会问,端口8000是干嘛的?这是QNX的qconn服务监听的端口。说白了,就是QNX自己搞的一个远程调试协议。我刚开始不知道,还以为是SSH,折腾了半天连不上。
qconn -p 8001 换个端口试试。
连接成功后,你可以在IDE的Target Navigator里看到目标机的文件系统。这时候,你就可以像操作本地文件一样,往目标机上拖拽程序了。
嗯,最后说一句:如果连接不稳定,试试用网线直连,别经过交换机。我遇到过交换机广播风暴导致连接断断续续的情况,直连就没事了。
好了,环境搭好了,下一章我们开始写第一个QNX程序。到时候你会发现,前面这些折腾都是值得的。