第2章 开发环境搭建:QNX Momentics IDE安装、QNX SDK配置、目标机与宿主机连接、SSH与网络配置

说实话,搭建开发环境这件事,看着简单,但坑不少。我见过太多新手卡在这一步,折腾一整天连个Hello World都跑不起来。今天我就把这几年的经验捋一捋,带你一次搞定。

2.1 QNX Momentics IDE安装

QNX Momentics IDE,说白了就是基于Eclipse的一套集成开发环境。QNX官方把它打包好了,我们直接装就行。

下载前要注意版本匹配

我个人习惯用QNX 7.0或7.1版本。为什么?因为这两个版本最稳定,社区资源也多。你想想看,如果选了个太新的版本,网上连个报错信息都搜不到,那多难受。

安装步骤其实很简单:

  1. 从QNX官网下载Momentics IDE安装包(大约2-3GB)
  2. 双击运行安装程序,选择安装路径
  3. 一路Next,直到完成
注意:安装路径不要有中文!不要有空格!我当年第一次装的时候,图省事直接放到了"Program Files"里,结果编译时各种路径解析错误,排查了半天才发现是空格惹的祸。

安装完成后,启动IDE。第一次启动会要求你选择工作空间(Workspace)。我建议单独建一个目录,比如D:\qnx_workspace,别跟系统盘混在一起。

2.2 QNX SDK配置

SDK配置是重头戏。很多人装完IDE就以为完事了,结果一编译就报错——找不到头文件、找不到库文件。嗯,这里要注意,SDK必须手动配置。

第一步:安装SDK

SDK通常是一个.qnx7后缀的文件。双击它,会弹出安装向导。选择安装路径时,我建议和IDE放在同一个盘符下,方便管理。

第二步:配置环境变量

安装完成后,需要设置QNX_TARGETQNX_HOST这两个环境变量。举个例子:

# 假设SDK安装在 C:\QNX700
QNX_TARGET=C:\QNX700\target\qnx7
QNX_HOST=C:\QNX700\host\win64\x86_64

为什么要设这两个变量?因为编译器、链接器、头文件路径都靠它们来定位。我曾经遇到一个项目,同事没设环境变量,结果每次编译都要手动指定路径,那叫一个痛苦。

第三步:在IDE中配置SDK

打开Momentics IDE,点击菜单栏:

  1. WindowPreferences
  2. 找到 QNXQNX SDKs
  3. 点击 Add,选择SDK安装目录
  4. 确认后,IDE会自动识别SDK版本
小技巧:配置完成后,可以新建一个空工程试试编译。如果编译通过,说明SDK配置成功了。如果报错,八成是环境变量没设对。

2.3 目标机与宿主机连接

QNX开发通常是交叉编译——在宿主机(你的PC)上写代码,编译成目标机(比如ARM板子)能运行的二进制文件。那问题来了:怎么把编译好的程序传到目标机上?

连接方式有两种:

方式 优点 缺点
串口 简单可靠,适合调试内核 速度慢,不适合传大文件
以太网 速度快,支持SSH和FTP 需要配置网络

我个人更推荐以太网方式。为什么?因为开发过程中要频繁传文件,串口那速度能急死人。我记得有一次用串口传一个10MB的驱动文件,等了快两分钟,从那以后我就再也没用过串口传文件了。

硬件连接步骤:

  1. 用网线连接目标机和宿主机(或者通过交换机)
  2. 给目标机上电,确认启动正常
  3. 在宿主机上打开命令行,ping一下目标机的IP地址

如果ping不通,别慌。先检查网线,再检查IP地址是否在同一网段。我遇到过最奇葩的一次,是目标机的网口灯亮着,但就是ping不通,最后发现是网线质量太差,换了一根就好了。

2.4 SSH与网络配置

SSH是连接宿主机和目标机的核心工具。QNX系统默认带了SSH服务,但需要手动启动。

在目标机上启动SSH服务:

# 启动SSH服务
sshd

# 查看SSH服务状态
ps -ef | grep sshd

# 设置开机自启
echo "sshd" >> /etc/rc.d/rc.local

配置静态IP地址:

开发环境里,我建议用静态IP,别用DHCP。为什么?因为DHCP分配的IP会变,你每次都要重新查IP,太麻烦了。

# 查看当前网络接口
ifconfig

# 设置静态IP(以en0为例)
ifconfig en0 192.168.1.100 netmask 255.255.255.0 up

# 设置默认网关
route add default 192.168.1.1
避坑指南:我曾经在配置网络时,忘了设置网关,结果宿主机和目标机能互相ping通,但目标机访问不了外网。排查了半天才发现是网关没配。所以,如果你需要目标机联网下载东西,一定要配网关。

宿主机连接目标机:

配置好网络后,在宿主机上打开终端,输入:

ssh root@192.168.1.100

第一次连接会提示确认主机密钥,输入yes即可。然后输入密码(默认通常是空密码或root)。

连接成功后,你就可以在宿主机上远程操作目标机了。传文件用scp命令:

# 从宿主机传文件到目标机
scp my_driver.so root@192.168.1.100:/tmp/

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

2.5 验证环境是否搭建成功

环境搭没搭好,跑个Hello World就知道了。在IDE中新建一个QNX C项目,写个简单的程序:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    printf("Hello QNX World!\n");
    return EXIT_SUCCESS;
}

编译后,把生成的可执行文件传到目标机上,运行看看。如果打印出"Hello QNX World!",恭喜你,环境搭建成功了!

总结一下今天的重点:

  • 安装IDE时注意路径不要有中文和空格
  • SDK配置要设置环境变量,并在IDE中指定SDK路径
  • 宿主机和目标机用以太网连接,配置静态IP
  • SSH是远程操作的主要工具,学会用scp传文件

环境搭建是开发的第一步,也是最容易出问题的一步。别怕踩坑,每个坑都是经验。下一章我们开始讲QNX驱动框架,那才是真正的重头戏。