1. QNX驱动开发环境搭建:安装QNX SDP、配置交叉编译链、搭建QNX虚拟机目标机环境
好,咱们直接进入正题。做QNX驱动开发,第一步就是把环境搭起来。这一步要是没弄好,后面写再多代码也跑不起来。我见过不少新手,上来就急着写驱动,结果编译都过不了,白白浪费时间。
说白了,QNX驱动开发环境就三块:开发主机上的SDP、交叉编译链、以及目标机环境。咱们一个一个来搞定。
1.1 安装QNX SDP(Software Development Platform)
SDP是QNX的软件开发包,里面包含了编译器、头文件、库文件、调试工具等等。没有它,你连个hello world都编译不出来。
获取方式:
- QNX官网下载(需要注册账号,免费版有功能限制)
- 商业授权用户可以从BlackBerry的客户门户获取
- 我建议直接申请试用版,功能全,够用一阵子
安装步骤:
- 下载对应宿主机的安装包(Linux或Windows)
- 运行安装程序,选择安装路径
- 选择要安装的组件——我个人习惯全选,省得后面缺东西再补
- 等待安装完成,大概10-15分钟
安装完成后,你会看到类似这样的目录结构:
/opt/qnx710/
├── host/ # 宿主工具链
├── target/ # 目标平台库和头文件
├── qnxbase/ # 基础系统文件
└── qsdp/ # 示例和文档
嗯,这里要注意:QNX SDP的版本号很重要。目前主流的是QNX 7.0和7.1。不同版本之间API有差异,驱动代码不一定能直接移植。我建议统一用7.1,兼容性更好。
1.2 配置交叉编译链
QNX驱动不是在开发机上直接编译运行的。你的开发机可能是x86架构,但目标机可能是ARM、AArch64或者x86_64。所以需要交叉编译链——在开发机上编译出目标机能运行的二进制文件。
环境变量配置:
安装完SDP后,需要设置环境变量。我个人习惯把下面这段加到 ~/.bashrc 里:
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
export MAKEFLAGS=-j4
然后执行 source ~/.bashrc 让配置生效。
验证交叉编译链:
配置好了,怎么知道对不对?跑一下这个命令:
ntox86_64-gcc --version
如果能看到版本信息,说明交叉编译链已经就绪。如果提示命令找不到,那就是环境变量没配好,回去检查一下路径。
ntox86_64-gcc— x86_64目标ntoarmv7-gcc— ARMv7目标ntoaarch64-gcc— AArch64目标
测试编译:
写个简单的驱动框架,测试一下编译环境:
#include <sys/types.h>
#include <devctl.h>
#include <stdio.h>
int main(void) {
printf("QNX Driver Dev Env OK!\n");
return 0;
}
编译命令:
ntox86_64-gcc -o test_drv test_drv.c
如果能生成 test_drv 可执行文件,恭喜你,交叉编译链配置成功了。
1.3 搭建QNX虚拟机目标机环境
驱动写好了,总得有个地方跑吧?如果你手头没有真实的QNX硬件板子,那就用虚拟机。QNX官方提供了QNX虚拟机镜像,可以直接在VMware或VirtualBox上运行。
获取虚拟机镜像:
- QNX SDP安装目录下有个
images/文件夹,里面有预制的虚拟机镜像 - 也可以自己用
mkqnximage工具生成
创建虚拟机步骤:
- 打开VMware Workstation(我用的是17版本)
- 选择「创建新虚拟机」
- 选择「稍后安装操作系统」
- 操作系统选择「Other」,版本选「Other 64-bit」
- 分配内存:建议至少2GB,我一般给4GB
- 网络类型:选择「桥接模式」或「NAT模式」
- 创建完成后,编辑虚拟机设置,把QNX镜像挂载到CD/DVD驱动器
启动QNX虚拟机:
启动虚拟机后,你会看到QNX的启动日志。启动完成后,登录界面如下:
QNX Neutrino (localhost) (tty1)
login: root
password: (默认密码为空,直接回车)
登录成功后,用 ifconfig 查看IP地址:
# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33184
inet 127.0.0.1 netmask 0xff000000
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
记下这个IP地址,后面开发机要通过它来连接目标机。
验证开发机与目标机的连接:
在开发机上执行:
ping 192.168.1.100
如果能ping通,说明网络连接正常。接下来就可以用 qconn 或 ssh 连接目标机了。
- SDP安装路径不要有中文和空格
- 交叉编译链前缀必须与目标架构匹配
- 虚拟机网络建议用NAT模式
- 开发机和目标机必须能互相ping通
好了,环境搭建就到这里。下一步咱们就可以开始写真正的字符设备驱动了。记住,环境搭好了,后面的事情就顺了。我见过太多人因为环境问题卡在第一关,结果连驱动长什么样都没看到就放弃了。别急,慢慢来,每一步都走扎实。