2. 开发环境搭建:QNX Momentics IDE安装、QNX SDK配置、交叉编译工具链、目标板连接

说实话,搭建开发环境这件事,很多人觉得就是装个软件、点几下鼠标。但我在QNX上栽过不少跟头,尤其是早期版本,一个环境变量没配好,能折腾你半天。这一章,我把这些年踩过的坑和总结的经验都抖出来,帮你一次搞定。

2.1 QNX Momentics IDE 安装

QNX Momentics IDE,说白了就是一套基于Eclipse的集成开发环境。它把编辑器、编译器、调试器、性能分析工具都打包在一起了。我个人习惯用它的原因是——调试驱动时,能直接看寄存器、内存、线程状态,比命令行方便太多。

安装步骤:

  1. 获取安装包:从QNX官网或你的License服务器下载。注意版本匹配,比如QNX 6.6对应Momentics 6.6,别搞混了。
  2. 运行安装程序:Linux下给执行权限,Windows下直接双击。我建议装在默认路径,省得后面配环境变量时找不到。
  3. 选择组件:安装时勾选“QNX SDK”、“Target Support”、“Host Development Tools”。如果你做驱动开发,记得把“Kernel Debugging”也选上。
  4. 完成安装:重启一下系统,让环境变量生效。
我的小技巧:安装完成后,先打开IDE,创建一个空工程试试。如果IDE能正常启动、工程能编译,说明基础环境没问题。我曾经遇到过安装后IDE闪退,结果是Java版本不兼容,换了个JDK就好了。

2.2 QNX SDK 配置

SDK配置,说白了就是告诉IDE你的QNX系统装在哪、目标板是什么架构。这一步做不好,后面编译出来的程序根本跑不起来。

配置流程:

  • 设置QNX安装路径:在IDE的 Window → Preferences → QNX → QNX Installation 里,指定你的QNX根目录。比如我的是 /opt/qnx660
  • 添加目标板配置:在 QNX → Target Configuration 里,添加你的目标板。输入IP地址、用户名(默认root)、密码(默认空)。
  • 验证连接:点“Test Connection”,如果显示“Connected”,恭喜你,通了。
注意:目标板必须和主机在同一个网段。我刚开始做时,死活连不上,折腾了半天才发现是公司网络有VLAN隔离。你想想看,这种低级错误多耽误事。

2.3 交叉编译工具链

交叉编译,说白了就是在你的PC上编译出能在ARM或x86目标板上运行的代码。QNX的工具链是 qcc,它封装了底层的gcc和链接器。

工具链结构:

工具 用途 示例
qcc 编译器前端 qcc -Vgcc_ntox86_64 -o hello hello.c
ntox86_64-gcc 底层编译器 由qcc自动调用
ntox86_64-ld 链接器 由qcc自动调用
ntox86_64-objdump 反汇编工具 调试驱动时常用

配置方法:

  • 在IDE中,右键工程 → Properties → C/C++ Build → Settings,选择“QNX QCC Compiler”。
  • Command 里填 qcc,在 Command line pattern 里加上 -Vgcc_ntox86_64(如果是x86_64目标板)。
  • 如果是ARM板,改成 -Vgcc_ntoarmv7le
避坑指南:我曾经在编译一个驱动模块时,忘了指定架构参数,结果qcc默认编译成了x86版本。放到ARM板上一跑,直接段错误。嗯,从那以后我每次编译前都会检查一下 -V 参数。

2.4 目标板连接

目标板连接,是开发环境搭建的最后一步,也是最容易出问题的一步。连接方式主要有两种:网络连接和串口连接。

网络连接(推荐):

  • 用网线把目标板和主机连到同一个交换机上。
  • 在目标板上启动QNX系统,确保网络服务已启动(ifconfig 查看IP)。
  • 在IDE的Target Configuration里添加目标板IP。

串口连接(备用):

  • 用串口线连接目标板的调试串口和主机的USB转串口。
  • 在主机上使用 screenputty 连接,波特率通常为115200。
  • 串口主要用于查看内核启动日志,或者网络不通时的应急调试。
我的经验:我建议优先用网络连接。串口速度慢,传个大文件能急死人。但串口有个好处——能看到内核从bootloader到启动的完整日志,网络连不上时,串口就是救命稻草。

2.5 验证环境

环境搭好了,怎么知道对不对?写个简单的驱动测试一下。

测试步骤:

  1. 在IDE中创建一个新的QNX C Project。
  2. 写一个简单的驱动框架(比如一个空字符设备)。
  3. 编译生成 .so 文件。
  4. 通过IDE的“Run As → QNX Application”部署到目标板。
  5. 在目标板上用 mount -T io-pkt 加载驱动,用 ls /dev 查看设备节点。

如果能看到你的设备节点,恭喜你,环境搭建成功了!

最后提醒:如果加载驱动时报“Permission denied”,检查目标板的文件系统权限。如果报“No such file or directory”,检查你的编译架构是否匹配。嗯,这些坑我都踩过,希望你别再踩了。