2、开发环境搭建:QNX Momentics IDE安装、目标机与宿主机配置、SSH连接与文件传输

好,咱们正式开始动手。这一章要解决的是「工欲善其事,必先利其器」的问题。很多新手在QNX上栽跟头,其实不是代码写错了,而是环境没搭对。我见过太多人花一整天装IDE,结果连不上目标机,最后发现是防火墙没关——这种坑,咱们今天一次性填平。

2.1 QNX Momentics IDE 安装

QNX Momentics IDE,说白了就是一套基于Eclipse的集成开发环境。QNX官方把它打包好了,你不需要自己折腾Eclipse插件。我个人习惯用7.1版本,稳定,坑少。

2.1.1 下载与系统要求

先确认你的宿主机。我建议用Ubuntu 18.04或20.04 LTS,Windows也行,但后续交叉编译时路径问题会让你头疼。嗯,这里要注意:QNX Momentics IDE 是32位应用,64位系统需要安装32位兼容库。

⚠ 重要提醒: 如果你用Ubuntu 20.04以上版本,记得先装好32位库,否则安装程序直接报错退出。
# Ubuntu 上安装32位库
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

2.1.2 安装步骤

下载下来的文件是一个.bin可执行文件。别双击,老老实实命令行执行:

chmod +x qnxmomentics-7.1.bin
./qnxmomentics-7.1.bin

安装过程是图形化的,一路Next就行。但有一个关键点——安装路径。我曾经图省事装在了有中文或空格的路径下,结果编译时各种找不到头文件。所以,请用纯英文路径,比如 /opt/qnx710

💡 我的习惯: 安装完成后,把 /opt/qnx710/host/linux/x86_64/usr/bin 加到 PATH 里。这样你可以在终端直接调用 qccmake

2.2 目标机与宿主机配置

环境搭好了,接下来要让宿主机(你的电脑)和目标机(嵌入式板子)能「说上话」。这里分两块:网络配置和QNX系统服务。

2.2.1 网络配置

我建议用静态IP。为什么?因为DHCP在嵌入式环境里有时候会掉链子,尤其是板子重启后IP变了,你SSH连不上,还得去接串口线查IP,太折腾。

在目标机上,编辑 /etc/rc.d/rc.local 或者直接命令行配置:

# 目标机(QNX侧)
ifconfig en0 192.168.1.100 netmask 255.255.255.0 up
route add default 192.168.1.1

宿主机侧,把网卡IP设成同一网段,比如 192.168.1.10。然后用 ping 测试:

ping 192.168.1.100

能通,就说明物理链路没问题。不通?先查网线,再查防火墙。我遇到过最奇葩的一次,是板子的网口灯亮着,但交换机端口被VLAN隔离了——嗯,这种问题查起来真要命。

2.2.2 QNX系统服务:qconn

QNX Momentics IDE 是通过 qconn 服务与目标机通信的。这个服务默认在QNX系统启动时运行,但有些裁剪过的系统可能没开。检查一下:

# 目标机上执行
pidin | grep qconn

如果没有输出,手动启动:

qconn &
🔑 关键点: qconn 默认监听端口是8000。确保防火墙没有屏蔽这个端口。在宿主机上可以用 telnet 192.168.1.100 8000 测试连通性。

2.3 SSH连接与文件传输

qconn 是IDE专用的调试通道,但日常的文件传输和命令行操作,我更喜欢用SSH。QNX系统默认不带SSH服务,需要自己装。别慌,QNX官方提供了openssh的二进制包。

2.3.1 安装SSH服务

openssh-7.5p1-qnx7.1-x86_64.pkg 拷贝到目标机上,然后:

# 目标机上执行
pkg-installer install openssh-7.5p1-qnx7.1-x86_64.pkg

安装完成后,启动SSH服务:

sshd

检查是否启动成功:

pidin | grep sshd
⚠ 注意: QNX的SSH默认不允许root登录。你需要编辑 /etc/ssh/sshd_config,把 PermitRootLogin 改成 yes,然后重启sshd。当然,生产环境不建议这么干,但开发调试阶段方便很多。

2.3.2 文件传输:scp 与 sftp

SSH通了之后,文件传输就简单了。我常用scp,一条命令搞定:

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

# 从目标机拉文件到宿主机
scp root@192.168.1.100:/var/log/mylog.log ./

如果你需要传整个目录,加 -r 参数:

scp -r my_project/ root@192.168.1.100:/home/

sftp 交互式操作也很方便,适合不记得路径的时候:

sftp root@192.168.1.100
# 然后可以用 ls, cd, get, put 等命令

2.3.3 免密登录配置

每次输密码很烦,尤其是调试时要频繁传文件。配置SSH密钥对,一劳永逸:

# 宿主机上生成密钥对
ssh-keygen -t rsa -b 4096

# 把公钥拷贝到目标机
ssh-copy-id root@192.168.1.100

之后再用scp或ssh,就不用输密码了。我在项目中经常用这个方式配合脚本做自动化部署,省了不少时间。

💡 小技巧:~/.ssh/config 里配置主机别名,比如:
Host qnx_target
    HostName 192.168.1.100
    User root
    Port 22
之后直接 ssh qnx_target 就行,省得记IP。

2.4 验证环境

所有配置完成后,做个快速验证:

  1. 在IDE里新建一个QNX C/C++项目
  2. 写一个简单的Hello World
  3. 配置Target连接(IP: 192.168.1.100,端口: 8000)
  4. 点击Build & Run

如果能在目标机上看到输出,恭喜你,环境搭建成功。如果报错,别急,按这个顺序排查:

现象 可能原因 解决方法
IDE连不上目标机 qconn未启动或端口被屏蔽 检查qconn进程,telnet测试8000端口
编译报错找不到头文件 QNX安装路径有空格或中文 重装到纯英文路径
SSH连接被拒绝 sshd未启动或配置错误 检查sshd进程,查看/var/log/auth.log
文件传输失败 权限不足或路径错误 检查目标机目录权限,使用绝对路径

嗯,这一章的内容就这些。环境搭好了,后面咱们才能真正开始玩调试和性能分析。下一章我会讲怎么用IDE的调试器单步跟踪QNX进程,到时候你会感谢今天把环境配好的自己。


公众号:蓝海资料掘金营,微信deep3321