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

说实话,很多新手学QNX,第一步就卡在环境搭建上。我见过太多人把IDE装好了,结果连不上目标机,折腾一整天。其实没那么复杂,今天我就把整套流程拆开揉碎了讲给你听。

2.1 QNX Momentics IDE安装

QNX Momentics IDE,说白了就是基于Eclipse的一套定制化开发环境。QNX官方把它打包成了一个独立的安装包,省去了你自己配Eclipse插件的麻烦。

安装步骤:

  1. 获取安装包:从QNX官网或你的License服务器上下载对应版本的安装包。我记得QNX 6.6.0和7.0的安装包大小差不少,7.0的包更大,因为集成了更多工具链。
  2. 运行安装程序:在Linux宿主机上,直接给安装脚本加执行权限然后运行就行。
chmod +x qnxmomentics-700-linux64.run
./qnxmomentics-700-linux64.run

嗯,这里要注意,安装路径里不要有中文或空格。我有个同事曾经把路径写成了“Program Files (x86)”,结果编译时各种路径解析错误,折腾了半天才发现是空格惹的祸。

  1. 选择组件:安装过程中会让你选组件。我个人习惯把“Host Development”和“Target Support”都勾上。如果你硬盘空间够,建议全选,省得后面缺东西再补装。
  2. 配置工作空间:启动IDE时会让你选Workspace路径。我建议单独建一个目录,比如~/qnx_workspace,别跟其他项目混在一起。
小提示:如果你用的是QNX 7.0及以上版本,IDE默认集成了GCC和LLVM双工具链。我个人更偏爱GCC,因为社区支持更好,遇到问题好查资料。

2.2 QNX SDK配置

SDK配置是很多人容易忽略的一步。你想想看,IDE装好了,但编译器找不到头文件、链接器找不到库文件,那还玩什么?

环境变量设置:

安装完SDK后,第一件事就是设置环境变量。我一般把它写到~/.bashrc里,这样每次开终端自动生效。

export QNX_HOST=/opt/qnx700/host/linux/x86_64
export QNX_TARGET=/opt/qnx700/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
export MAKEFLAGS=-j4

这里解释一下:QNX_HOST指向宿主机工具链,QNX_TARGET指向目标机系统文件。我曾经见过有人把这两个变量搞反了,结果编译出来的程序在目标机上跑不起来,报了一堆“找不到动态库”的错误。

IDE内配置:

打开IDE,进入 Window -> Preferences -> QNX -> QNX System Information。在这里添加你的SDK路径。IDE会自动扫描并识别出可用的工具链和系统镜像。

重点:如果你同时安装了多个版本的QNX SDK(比如6.6.0和7.0),一定要在IDE里指定当前项目用哪个版本。我习惯在项目属性里单独设置,而不是改全局配置,这样不同项目可以灵活切换。

2.3 目标机与宿主机连接

环境搭好了,接下来就是让宿主机和目标机能“说上话”。QNX支持多种连接方式:串口、USB、以太网。我个人最推荐以太网,速度快、稳定、调试方便。

硬件连接:

用一根网线把宿主机和目标机直连,或者通过交换机连接。如果你用的是开发板(比如TI的AM335x或NXP的i.MX系列),板子上通常有两个网口,一个用于调试,一个用于业务。我建议把调试网口单独用一根网线直连宿主机。

IP地址配置:

目标机启动后,进入QNX系统,用ifconfig命令配置IP地址。

ifconfig en0 192.168.1.100 netmask 255.255.255.0 up

宿主机这边,把网口IP设为同一网段,比如192.168.1.101。然后互相ping一下,确认连通。

ping 192.168.1.100

如果ping不通,别急着怀疑配置。先检查网线是不是好的,灯亮了没。我曾经有一次折腾了半小时,最后发现是网线水晶头松了——这种低级错误,说出来都是泪。

注意:目标机的IP地址建议固定下来,不要用DHCP。因为后面IDE调试、文件传输都要靠这个IP,万一变了会很麻烦。我一般把IP写在目标机的/etc/rc.d/rc.local里,开机自动配置。

2.4 SSH与网络配置

QNX默认不带SSH服务,需要自己装。不过别担心,QNX SDK里已经包含了SSH相关的二进制文件,你只需要把它部署到目标机上就行。

部署SSH服务:

在宿主机上找到SSH相关的文件:

find $QNX_TARGET -name "sshd" -o -name "ssh" -o -name "scp"

把这些文件拷贝到目标机的/usr/sbin/usr/bin目录下。同时别忘了拷贝配置文件:

scp $QNX_TARGET/etc/ssh/sshd_config root@192.168.1.100:/etc/ssh/

启动SSH服务:

在目标机上执行:

sshd

然后从宿主机尝试连接:

ssh root@192.168.1.100

第一次连接会提示确认主机密钥,输入yes就行。如果一切顺利,你就进入了目标机的QNX系统。

小技巧:我习惯在宿主机上配置SSH免密登录,这样调试时不用每次都输密码。方法是在宿主机生成密钥对,然后把公钥追加到目标机的/root/.ssh/authorized_keys文件里。

网络文件系统(NFS)配置:

如果你像我一样,经常需要把编译好的程序传到目标机上调试,那NFS绝对是神器。配置方法如下:

在宿主机上安装并启动NFS服务:

sudo apt install nfs-kernel-server
sudo mkdir -p /export/qnx_target
sudo mount --bind $QNX_TARGET /export/qnx_target
echo "/export/qnx_target *(rw,no_root_squash,async)" | sudo tee -a /etc/exports
sudo exportfs -a
sudo systemctl restart nfs-server

在目标机上挂载:

mount -t nfs -o tcp,nolock 192.168.1.101:/export/qnx_target /mnt

这样,你在宿主机上编译好的程序,目标机直接就能在/mnt下看到,省去了每次scp的麻烦。

避坑指南:我曾经在NFS配置上栽过跟头。目标机挂载NFS时,如果报RPC: Timed out错误,多半是防火墙没关。在宿主机上执行sudo ufw disable,或者开放NFS相关端口(111、2049等)就能解决。

好了,到这里你的QNX开发环境就基本搭建完成了。IDE装好了,SDK配好了,目标机也能连上了。下一章我们聊聊怎么创建第一个QNX项目,到时候你就知道今天这些配置有多重要了。