第二章:开发环境搭建

做嵌入式开发,环境搭建永远是第一道坎。QNX 的开发环境说复杂也复杂,说简单也简单。我这些年折腾下来,踩过的坑不少,今天就把这些经验一次性倒给你。

2.1 QNX Momentics IDE 安装

QNX Momentics IDE 是基于 Eclipse 的。说白了,如果你用过 Eclipse,上手会很快。但 QNX 做了大量定制,不是简单的换皮。

安装步骤:

  1. 获取安装包:从 QNX 官网下载 Momentics IDE 安装包。注意版本匹配,我建议用 7.0 或 7.1 版本,比较稳定。
  2. 运行安装程序:Linux 下直接 chmod +x 然后运行。Windows 下双击 exe 就行。
  3. 选择组件:这里有个坑。默认安装会勾选所有组件,但很多你用不上。我个人习惯只选:
    • IDE 核心
    • 目标板支持包(BSP)
    • 交叉编译工具链
  4. 配置工作空间:启动后会让选 workspace。我建议单独建一个目录,别跟其他项目混在一起。

小技巧:安装路径不要有中文和空格。我在项目中遇到过因为路径里有空格导致编译失败的情况,排查了半天才发现是这个问题。

2.2 交叉编译工具链配置

交叉编译,说白了就是在 PC 上编译出能在目标板上运行的代码。QNX 的工具链是基于 GCC 的,但做了深度定制。

配置步骤:

  1. 确认工具链路径:安装完成后,工具链一般在 /opt/qnx/版本号/host/linux/x86_64/usr/bin/ 下。
  2. 设置环境变量
export QNX_HOST=/opt/qnx/7.1.0/host/linux/x86_64
export QNX_TARGET=/opt/qnx/7.1.0/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH

嗯,这里要注意。环境变量必须配对,否则编译时会报找不到头文件。我曾经因为 QNX_TARGET 配错了,折腾了一下午。

  1. 验证工具链
ntox86_64-gcc --version

如果能看到版本信息,说明配置成功了。

避坑指南:我曾经在 Ubuntu 20.04 上遇到过 glibc 版本不兼容的问题。QNX 工具链依赖的 glibc 版本比较老,需要安装兼容库。命令如下:

sudo apt install libc6-i386

2.3 目标板连接与调试

目标板连接,这是最考验耐心的一步。硬件连接、网络配置、调试器设置,一环扣一环。

连接方式:

方式 适用场景 速度 稳定性
以太网 开发板有网口
USB 调试器(如 Lauterbach)
串口 早期调试、无网络环境

以太网连接步骤:

  1. 设置目标板 IP:在目标板上运行:
ifconfig en0 192.168.1.100 netmask 255.255.255.0
  1. 配置主机网络:主机 IP 设为同一网段,比如 192.168.1.101。
  2. 测试连通性
ping 192.168.1.100

能 ping 通,说明物理连接没问题。

  1. 启动 QNX 调试服务:在目标板上运行:
qconn

这个服务是 QNX 的调试代理,IDE 通过它来连接目标板。

核心要点:调试连接的本质是 IDE 通过 qconn 服务与目标板通信。如果连不上,先检查防火墙,再检查 qconn 是否在运行。

2.4 创建第一个 QNX 项目

环境搭好了,我们来跑个 Hello World 验证一下。

步骤:

  1. 新建项目:File → New → QNX C Project
  2. 选择模板:选 "Hello World QNX Application"
  3. 编写代码
#include <stdio.h>
#include <sys/neutrino.h>

int main(int argc, char *argv[]) {
    printf("Hello from QNX!\n");
    printf("Running on core: %d\n", get_cpu());
    return 0;
}
  1. 编译:右键项目 → Build Project
  2. 调试:右键项目 → Debug As → QNX Application

如果一切顺利,你应该能在 Console 窗口看到输出。我第一次跑通的时候,说实话还挺激动的。

调试小技巧:如果调试时程序停在 main 入口处不动,检查一下目标板的 /etc/system 文件,确保调试服务已启用。我遇到过因为系统配置问题导致调试器无法 attach 的情况。

2.5 常见问题与解决

这里列几个我经常遇到的问题,你遇到了可以直接查。

问题 原因 解决方法
IDE 无法启动 Java 版本不匹配 安装 JDK 11 或 8
编译报错:找不到头文件 环境变量未配置 检查 QNX_TARGET 路径
连接目标板超时 防火墙阻挡 关闭防火墙或开放端口
调试器无法 attach qconn 未运行 在目标板启动 qconn

嗯,环境搭建这部分就这些。说白了,只要按步骤来,一般不会出大问题。但嵌入式开发就是这样,细节决定成败。一个小配置没弄对,可能就要折腾半天。

下一章我们开始讲内核裁剪,那才是真正有意思的部分。