第二章:QNX系统安装——虚拟机环境搭建、SDP安装与IDE配置
好,咱们直接进入正题。这一章讲的是QNX开发环境的搭建。说实话,很多初学者觉得这步就是“下一步、下一步”的傻瓜操作,但我在项目里见过太多因为环境没配好,导致后面调试到崩溃的案例。所以,这一章我会把关键点掰开揉碎了讲清楚。
2.1 QNX虚拟机环境搭建
为什么要用虚拟机?说白了,QNX是一个硬实时系统,它需要跑在特定的硬件上。但咱们做开发,不可能人手一块开发板。所以,先在虚拟机里搭一个QNX环境,用来验证代码逻辑、跑跑单元测试,这是最经济高效的方式。
我个人习惯用VMware Workstation,当然VirtualBox也行。但注意,QNX对虚拟化支持有一些特殊要求,我踩过坑。
2.1.1 虚拟机配置要点
- CPU核心数:建议至少分配2核。我曾经图省事只给1核,结果编译QNX内核时慢得让人抓狂。
- 内存:最低4GB,推荐8GB。QNX本身很轻量,但如果你要跑Momentics IDE,内存小了会卡。
- 硬盘:建议40GB以上动态扩展。QNX SDP安装包加上后续的工程文件,很容易就吃掉十几GB。
- 网络适配器:一定要选NAT模式。桥接模式在有些公司网络环境下会出问题,我遇到过DHCP获取不到IP的情况。
2.1.2 安装QNX虚拟机镜像
QNX官方提供了虚拟机镜像文件(.vmdk格式)。你从QNX官网下载后,直接挂载到虚拟机上就行。启动后,你会看到一个命令行界面。嗯,这里要注意,默认用户名是root,密码为空。
我第一次登录时,还以为系统坏了,怎么敲命令都没反应。后来才发现,QNX默认的shell是ksh,它的Tab补全和Linux的bash不太一样。习惯就好。
2.2 QNX SDP安装
SDP(Software Development Platform)是QNX的软件开发套件。它包含了编译器、链接器、调试器、头文件、库文件等等。说白了,没有SDP,你连个“Hello World”都编译不出来。
2.2.1 获取SDP安装包
QNX SDP目前最新版本是7.1,但很多工业项目还在用7.0。我个人建议,如果是学习,直接用7.1;如果是做产品,先确认你的BSP(板级支持包)支持哪个版本。
安装包是一个.bin文件,大约2GB左右。下载后,你需要给它执行权限:
chmod +x qnx-sdp-7.1.0.bin
./qnx-sdp-7.1.0.bin
2.2.2 安装过程中的关键选择
安装过程是图形化的,但有几个选项我要特别提醒你:
| 安装步骤 | 我的建议 | 踩坑记录 |
|---|---|---|
| 安装路径 | 不要有空格和中文路径 | 我曾经装在C:\Program Files\QNX下,结果某些工具链脚本解析路径时崩溃了 |
| 选择目标架构 | 至少勾选x86_64和aarch64 | 很多初学者只选x86,结果拿到ARM开发板后傻眼了 |
| 是否安装文档 | 建议全选 | QNX的官方文档写得非常好,离线查看比上网搜快得多 |
~/.bashrc或~/.profile中添加:
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
然后执行source ~/.bashrc使其生效。
2.3 QNX Momentics IDE配置
Momentics IDE是基于Eclipse的集成开发环境。说实话,Eclipse本身有点重,但QNX的插件做得相当不错。你想想看,一个IDE能同时管理C/C++代码、调试多线程、分析内存泄漏,这在嵌入式开发里已经很难得了。
2.3.1 安装IDE
IDE的安装包在SDP安装目录下的ide文件夹里。你直接运行qnxmomentics可执行文件就行。注意,IDE需要Java运行环境,版本要求Java 11以上。
我记得有一次,一个同事的IDE死活打不开,查了半天发现是系统里装了Java 8。嗯,版本兼容性问题,老生常谈了。
2.3.2 配置交叉编译工具链
这是最关键的一步。你要告诉IDE,你的代码要编译成什么架构的。具体操作如下:
- 打开IDE,点击
Window → Preferences → QNX → QNX Tool Chain - 点击
Add,选择你的SDP安装路径 - IDE会自动检测到可用的工具链,比如
gcc_qnx_7.1.0_aarch64le - 点击
Apply and Close
C/C++ Build → Settings → Tool Chain。如果能看到你刚才添加的工具链,说明配置成功。如果看不到,重启IDE试试。
2.3.3 配置调试器
QNX的调试器是qconn,它通过TCP/IP与目标机通信。配置步骤如下:
- 在IDE中,点击
Run → Debug Configurations - 选择
QNX QConn (IP) Debug - 在
Connection选项卡中,输入目标机的IP地址 - 在
Debugger选项卡中,选择gdb调试器(IDE会自动关联)
我曾经犯过一个低级错误:目标机的防火墙没关,导致qconn连接不上。折腾了半小时才发现。所以,如果你连不上,先ping一下目标机,再telnet一下端口8000(qconn默认端口)。
2.3.4 验证环境
最后,我们来写一个简单的程序验证一下:
#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"));
return 0;
}
编译后,如果能在虚拟机或开发板上看到输出,恭喜你,环境搭建成功了!
cannot find -lc 之类的错误,别慌。这通常是因为工具链路径没配好。检查一下 $QNX_TARGET 环境变量是否指向了正确的目标架构目录。我曾经因为路径里多了一个斜杠,浪费了一下午。
好了,这一章的内容就到这里。环境搭建是枯燥的,但也是最重要的。你想想看,如果地基没打好,后面盖再高的楼也是白搭。下一章,我们会正式进入QNX的进程管理,那才是真正有意思的部分。