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 上安装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 里。这样你可以在终端直接调用 qcc 和 make。
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 &
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
/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 验证环境
所有配置完成后,做个快速验证:
- 在IDE里新建一个QNX C/C++项目
- 写一个简单的Hello World
- 配置Target连接(IP: 192.168.1.100,端口: 8000)
- 点击Build & Run
如果能在目标机上看到输出,恭喜你,环境搭建成功。如果报错,别急,按这个顺序排查:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| IDE连不上目标机 | qconn未启动或端口被屏蔽 | 检查qconn进程,telnet测试8000端口 |
| 编译报错找不到头文件 | QNX安装路径有空格或中文 | 重装到纯英文路径 |
| SSH连接被拒绝 | sshd未启动或配置错误 | 检查sshd进程,查看/var/log/auth.log |
| 文件传输失败 | 权限不足或路径错误 | 检查目标机目录权限,使用绝对路径 |
嗯,这一章的内容就这些。环境搭好了,后面咱们才能真正开始玩调试和性能分析。下一章我会讲怎么用IDE的调试器单步跟踪QNX进程,到时候你会感谢今天把环境配好的自己。
公众号:蓝海资料掘金营,微信deep3321