3. QNX开发环境搭建:Momentics IDE安装、目标机与宿主机配置、SSH连接调试

好,咱们直接进入正题。开发环境搭建这事儿,说简单也简单,说坑也多。我见过不少新手,卡在环境配置上好几天,最后发现是某个小细节没注意。今天我就把这些年踩过的坑、积累的经验,一次性给你讲透。

3.1 QNX Momentics IDE安装——别急着点下一步

QNX Momentics IDE,说白了就是基于Eclipse的一套定制化开发工具。你可以在QNX官网下载,注意要选对版本——我建议直接用最新LTS版本,稳定。

安装前必看:

  • 宿主机建议用Ubuntu 20.04或CentOS 7,Windows也行但坑多
  • JDK版本必须匹配,我遇到过因为JDK版本不对导致IDE闪退的情况
  • 安装路径不要有中文和空格,这是老生常谈了

安装步骤其实不复杂:

  1. 下载QNX Software Development Platform (SDP) 安装包
  2. 运行安装脚本,选择完整安装
  3. 安装完成后,启动Momentics IDE
  4. 配置工作空间(Workspace)路径

嗯,这里要注意。安装过程中会让你选择组件,我个人的习惯是:全选。别省那点硬盘空间,后面用到某个组件找不到,更浪费时间。我在项目中就吃过这个亏——当时为了省空间没装Multicore调试工具,结果调试多核程序时傻眼了。

3.2 目标机与宿主机配置——网络是命脉

目标机和宿主机怎么配?核心就一句话:让它们能互相找到对方

3.2.1 网络配置

我建议用静态IP,别用DHCP。为什么?你想想看,调试到一半IP变了,那得多崩溃。

配置项 宿主机(开发机) 目标机(嵌入式板卡)
IP地址 192.168.1.100 192.168.1.101
子网掩码 255.255.255.0 255.255.255.0
网关 192.168.1.1 192.168.1.1

配置完记得用 ping 测试一下。我曾经遇到一个案例,怎么都ping不通,最后发现是网线接触不良——这种低级错误最容易让人抓狂。

3.2.2 QNX系统启动配置

目标机上的QNX系统启动后,需要确保以下服务在运行:

# 检查网络服务
ifconfig -a
# 启动SSH服务(如果没启动)
io-pkt-v6-hc -d e1000 -p tcpip

我个人习惯在启动脚本里就把这些配好,省得每次手动敲。你可以在 /etc/system/config/ 下找到启动配置。

小技巧: 在目标机上执行 sin 命令,可以查看系统信息,确认QNX版本和内核参数。我每次拿到新板子,第一件事就是跑这个命令。

3.3 SSH连接调试——这才是重头戏

SSH连接调试,说白了就是让宿主机通过SSH远程控制目标机。QNX默认支持SSH,但需要手动配置。

3.3.1 宿主机端配置

在Momentics IDE里配置SSH连接:

  1. 打开 Window → Preferences → Target Management
  2. 点击 Add,选择 SSH 连接类型
  3. 填写目标机IP、用户名(默认是root)、密码
  4. 测试连接,确保成功

这里有个坑——QNX默认的SSH配置可能不允许root登录。我曾经被这个问题卡了半天,后来发现需要在 /etc/ssh/sshd_config 里加上 PermitRootLogin yes

3.3.2 目标机端配置

在目标机上执行:

# 启动SSH服务
sshd
# 检查SSH服务状态
ps -ef | grep sshd

如果SSH服务没起来,检查一下 /etc/ssh/ 目录下有没有密钥文件。没有的话,手动生成:

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

警告: 目标机的SSH密钥不要和宿主机共用!我见过有人图省事直接复制密钥,结果安全漏洞一大堆。每个目标机都应该有自己独立的密钥对。

3.3.3 调试连接测试

配置完成后,在Momentics IDE里创建一个简单的测试工程:

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

int main(int argc, char *argv[]) {
    printf("Hello from QNX!\n");
    printf("Running on %d cores\n", _syspage_ptr->num_cpu);
    return EXIT_SUCCESS;
}

编译后,通过SSH上传到目标机,运行看看。如果能看到输出,恭喜你,环境搭建成功了。

3.4 避坑指南——我踩过的那些雷

最后,分享几个我亲身经历过的坑:

  • 防火墙问题: 宿主机和目标机之间的防火墙可能阻断SSH连接。我建议先关掉防火墙测试,确认没问题再配置规则。
  • 版本兼容性: QNX SDP版本和Momentics IDE版本必须匹配。我试过用SDP 7.0配旧版IDE,结果一堆莫名其妙的问题。
  • 权限问题: 目标机上的文件权限要注意。我曾经因为上传的可执行文件没有执行权限,调试了半天才发现。
  • 网络延迟: 如果SSH连接很慢,检查一下DNS解析。在 /etc/hosts 里加上宿主机和目标机的IP映射,能快不少。

嗯,环境搭建这部分就讲到这里。说白了,只要网络通、SSH能连上,剩下的就是写代码的事了。下一章咱们聊聊多核驱动的核心——中断亲和性设置,那才是真正考验功底的地方。