2、开发环境搭建:QNX Momentics IDE安装与配置、QNX SDK与BSP获取、虚拟机与目标机环境搭建、SSH与网络调试配置

说实话,搭建开发环境这件事,很多人觉得就是装个软件而已。但我见过太多新手卡在这一步——不是IDE启动报错,就是SDK版本对不上,折腾一整天连个Hello World都没跑起来。所以这一章,我带你一步步把环境搭好,少走弯路。

2.1 QNX Momentics IDE 安装与配置

QNX Momentics IDE,说白了就是基于Eclipse的一套集成开发环境。它把编辑器、编译器、调试器都打包好了。我个人习惯用7.0版本,稳定,坑少。

2.1.1 获取安装包

你需要去QNX官网下载。注意,不同版本对应不同的QNX OS版本。比如QNX 6.6配的是Momentics 5.0,QNX 7.0配的是Momentics 7.0。别搞混了。

注意: 我曾经遇到过有人用Momentics 5.0去编译QNX 7.0的BSP,结果一堆链接错误。版本一定要匹配。

2.1.2 安装步骤

  1. 双击安装包,选择安装路径。我建议不要有中文和空格。
  2. 选择组件时,勾选「QNX C/C++ Development Tools」和「QNX System Builder」。
  3. 安装完成后,启动IDE。第一次启动会让你选择工作空间(workspace)。
  4. 进入IDE后,点击 Window → Preferences → QNX → QNX Target,配置目标机IP。

嗯,这里要注意:工作空间路径也最好用英文。我之前有个同事用了中文路径,结果编译时路径解析出错,查了半天才发现是这个问题。

2.2 QNX SDK 与 BSP 获取

SDK是软件开发包,BSP是板级支持包。这两个东西,缺一不可。

2.2.1 SDK 获取

SDK可以从QNX官网下载,也可以从你的QNX安装目录里找到。路径一般是:

C:\QNX700\qnx700-sdk-win64-2020-04-30.exe

安装SDK时,它会自动把编译器、头文件、库文件放到指定目录。我建议安装在默认路径,省事。

2.2.2 BSP 获取

BSP是针对特定硬件平台的。比如你用的是TI的AM335x,那就找对应的BSP。获取方式有两种:

  • 官方渠道: QNX官网的Download页面,按硬件平台筛选。
  • 芯片厂商: 有些芯片厂商会提供QNX BSP,比如NXP、TI。
小技巧: 我一般会先看BSP的README文件。里面会写明支持的硬件版本、依赖的SDK版本、以及已知问题。这个文件能帮你省掉很多调试时间。

2.3 虚拟机与目标机环境搭建

你想想看,做驱动开发,总不能每次都往真机上烧写吧?太慢了。所以我们需要虚拟机或者QEMU来模拟目标机。

2.3.1 使用QEMU模拟目标机

QNX官方提供了QEMU镜像,可以直接在Windows或Linux上跑。步骤如下:

  1. 下载QEMU for QNX的镜像文件(.qcow2格式)。
  2. 安装QEMU。Windows下可以用qemu-w64-setup.exe。
  3. 启动QEMU:
qemu-system-arm -M virt -cpu cortex-a15 -m 512M \
  -kernel qnx-ifs.bin \
  -drive file=qnx-image.qcow2,format=qcow2 \
  -netdev user,id=net0 -device virtio-net,netdev=net0

启动后,你会看到一个QNX控制台。输入 ifconfig 看看IP地址。嗯,这里要注意,QEMU默认的网络是NAT模式,你得配端口转发才能从主机连过去。

2.3.2 真机目标机环境

如果你有开发板,比如BeagleBone Black或Raspberry Pi,那就更好了。步骤是:

  • 把BSP编译好的镜像烧写到SD卡或eMMC。
  • 开发板通过串口或网线连接到主机。
  • 上电启动,观察串口输出。
警告: 我曾经在BeagleBone上遇到过启动卡在「Starting QNX Neutrino...」的情况。后来发现是BSP里的DDR时序参数不对。如果你也遇到类似问题,先检查BSP的board configuration文件。

2.4 SSH 与网络调试配置

驱动开发离不开调试。而网络调试,是最方便的方式。你可以在主机上编译,然后通过网络把驱动模块传到目标机上加载。

2.4.1 配置SSH服务

QNX目标机默认可能没开SSH。你需要手动启动:

# 在目标机上执行
io-pkt-v4 -d e1000
ifconfig en0 192.168.1.100 netmask 255.255.255.0
sshd

然后从主机连接:

ssh root@192.168.1.100

默认密码是空,或者 root。我建议你第一次登录后马上改密码。

2.4.2 网络调试配置

在QNX Momentics IDE里配置网络调试,其实很简单:

  1. 打开IDE,点击 Run → Debug Configurations。
  2. 选择 QNX C/C++ Application,新建一个配置。
  3. 在 Target 选项卡里,输入目标机的IP地址。
  4. 在 Debugger 选项卡里,选择 QNX GDB Debugger。

配置好后,点 Debug。IDE会自动把可执行文件通过FTP或NFS传到目标机上,然后启动调试会话。

经验之谈: 我建议你先把网络调通,再开始写驱动。怎么验证?在主机上ping目标机,然后在目标机上ping主机。双向都能通,才算网络没问题。另外,防火墙可能会拦截SSH和调试端口,记得关掉或者放行。

2.5 验证环境是否搭建成功

环境搭好了,怎么知道对不对?写个最简单的驱动模块试试。

#include <sys/neutrino.h>
#include <stdio.h>

int main(void) {
    printf("Hello from QNX driver!\n");
    return 0;
}

在IDE里新建一个QNX C Project,编译,然后通过网络传到目标机上运行。如果终端打印出「Hello from QNX driver!」,恭喜你,环境搭好了。

如果没打印?别急。先检查目标机上的 io-pkt 进程有没有跑起来。再检查防火墙。实在不行,用串口看看内核日志:

sloginfo

这个命令会输出系统日志,很多驱动加载失败的原因都能在这里找到。

2.6 本章小结

这一章我们走完了从IDE安装到网络调试的全流程。说实话,搭建环境是最枯燥的部分,但也是最重要的基础。你想想看,如果环境没搭好,后面写再多代码也跑不起来。

下一章,我们会正式开始写第一个QNX驱动——一个简单的字符设备驱动。到时候,你会看到驱动是如何与内核交互的。

核心要点回顾:
  • IDE版本必须与SDK版本匹配
  • BSP要选对硬件平台
  • 虚拟机用QEMU,真机用开发板
  • 网络调试前先ping通
  • 用sloginfo查看内核日志排错

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