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

好,咱们正式开始动手了。这一章我带你搭环境。说实话,做嵌入式开发,环境搭不好,后面全是坑。我自己带过不少新人,十有八九第一周都在跟IDE和网络配置较劲。所以这一章,咱们把每一步都走踏实。

2.1 QNX Momentics IDE 安装

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

第一步:获取安装包

你需要从QNX官网或者你们公司的内部服务器上拿到安装包。我记得早期版本是 qnxmomentics-6.6.0-linux.x86_64.bin 这种格式。如果你用的是QNX 7.0或更高版本,安装包名字会略有不同,但套路一样。

第二步:执行安装

我习惯把安装包放在 /opt 目录下。给执行权限,然后运行:

chmod +x qnxmomentics-6.6.0-linux.x86_64.bin
sudo ./qnxmomentics-6.6.0-linux.x86_64.bin

安装过程是图形化的,一路点“Next”就行。但这里有个坑——安装路径不要有中文或空格。我曾经有个同事把路径写成了“Program Files (x86)”,结果编译的时候各种路径解析错误,折腾了一下午。

注意:安装过程中会提示选择QNX SDK版本。如果你做GPIO驱动开发,建议选择包含“QNX System BSP”和“QNX Target Support”的完整安装。别只装个IDE壳子,后面编译会报找不到头文件。

第三步:验证安装

安装完成后,启动IDE。第一次启动会让你设置工作空间(workspace)。我建议单独建一个目录,比如 /home/yourname/qnx_workspace,别跟其他项目混在一起。

启动后,在菜单栏找到 Help -> About QNX Momentics,能看到版本信息。如果能看到,说明安装成功了。

2.2 目标机与宿主机配置

这里我要讲清楚两个概念:宿主机就是你装IDE的电脑(通常是Linux或Windows),目标机就是跑QNX系统的板子(比如BeagleBone Black、Raspberry Pi,或者你们公司的定制板)。

咱们的目标是:宿主机上写代码,编译成目标机可执行的二进制,然后传过去跑。

2.2.1 宿主机配置

宿主机上需要配置好QNX的交叉编译工具链。安装IDE的时候其实已经带了,但需要让系统知道它们在哪。

打开终端,编辑你的 ~/.bashrc 文件,添加:

export QNX_HOST=/opt/qnx660/host/linux/x86_64
export QNX_TARGET=/opt/qnx660/target/qnx6
export PATH=$QNX_HOST/usr/bin:$PATH

然后执行 source ~/.bashrc 让配置生效。验证一下:

which ntox86_64-gcc

如果能输出路径,说明环境变量配好了。

小技巧:我习惯在 ~/.bashrc 里加一行 alias qnx_env='source /opt/qnx660/qnx660-env.sh',这样每次打开新终端,敲一下 qnx_env 就能快速加载环境。省得每次都手动 export。

2.2.2 目标机配置

目标机这边,首先要确保QNX系统已经跑起来了。如果你用的是开发板,一般出厂就带了QNX镜像。如果没有,你得先烧录一个。

目标机上需要开启SSH服务。QNX默认是带SSH的,但可能没启动。登录到目标机(通过串口或HDMI+键盘),执行:

sshd

然后检查一下:

ps -ef | grep sshd

能看到进程在跑,就说明SSH服务起来了。

另外,记下目标机的IP地址。执行 ifconfig,找到你用的网口(比如 en0lo0),记下IP。我一般用静态IP,避免每次重启都变。

重点:宿主机和目标机必须在同一个网段。比如宿主机是192.168.1.100,目标机就设成192.168.1.101。子网掩码和网关保持一致。

2.3 SSH连接与文件传输

环境配好了,接下来就是让宿主机和目标机能“说话”。SSH是最常用的方式。

2.3.1 测试SSH连接

在宿主机终端里执行:

ssh root@192.168.1.101

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

如果能登录到目标机的shell,恭喜你,SSH通了。

避坑指南:我曾经遇到过SSH连不上,折腾了半天发现是目标机的防火墙没关。QNX默认防火墙是开启的,执行 iptables -F 清空规则,或者直接停掉防火墙服务。当然,生产环境别这么干,开发阶段图省事可以。

2.3.2 文件传输

文件传输我推荐用 scp 命令,简单直接。比如把宿主机上的驱动模块传到目标机:

scp my_gpio_driver.so root@192.168.1.101:/tmp/

反过来,从目标机拉文件到宿主机:

scp root@192.168.1.101:/tmp/log.txt ./

如果你觉得每次敲IP麻烦,可以在宿主机的 /etc/hosts 里加一条:

192.168.1.101 qnx-target

之后就可以直接用 ssh root@qnx-target 了,省事不少。

2.3.3 在IDE中配置远程连接

QNX Momentics IDE支持直接通过SSH管理目标机。打开IDE,找到 Window -> Show View -> Target Navigator。在空白处右键,选择 New QNX Target

填上目标机的IP、用户名、密码。连接成功后,你就能在IDE里看到目标机的文件系统,甚至可以直接拖拽文件上传下载。我个人觉得这个功能比命令行scp直观多了,尤其是调试阶段频繁传文件的时候。

我的习惯:我会在IDE里建一个“Target Connection”的配置,名字叫“BBB”(BeagleBone Black的缩写)。每次启动IDE,先连上目标机,然后直接在IDE里编译、上传、运行,一气呵成。省得来回切终端。

2.4 验证环境是否就绪

最后,咱们写个简单的“Hello World”程序,验证整个链路是否通畅。

在宿主机上创建一个文件 hello.c

#include <stdio.h>

int main() {
    printf("Hello from QNX GPIO Driver Course!\n");
    return 0;
}

用QNX的交叉编译器编译:

ntox86_64-gcc -o hello hello.c

把生成的 hello 文件传到目标机:

scp hello root@192.168.1.101:/tmp/

SSH登录到目标机,执行:

/tmp/hello

如果看到输出 Hello from QNX GPIO Driver Course!,说明整个开发环境搭建成功了。

到这里,你的开发环境就绪了。 接下来我们就可以真正开始写GPIO驱动了。下一章,我会带你分析GPIO硬件原理,以及QNX下GPIO的软件架构。别急,先把环境玩熟,后面写代码才顺手。