NXP S32G399 QNX 8.0 系统踩坑实录
本文记录了在 NXP S32G399A-RDB3 开发板上使用 QNX 8.0 系统时遇到的各种问题及解决方案,希望能帮助后来的开发者少走弯路。
一、BSP 制作官方链接
https://www.qnx.com/developers/docs/BSP8.0/com.qnx.doc.bsp_nxp.s32g.rdb3_8.0/topic/bsp_transfer.html
二、准备工作
| 物品 | 说明 |
|---|---|
| microSD 卡 | 已烧录 QNX 镜像,包含ifs-s32g399a-rdb3.ui、s32g399a-rdb3.dtb等文件 |
| S32G-VNP-RDB3 开发板 | 目标硬件平台 |
| 串口调试工具 | SecureCRT / MobaXterm / TeraTerm 均可 |
| USB 转串口线 + 电源线 | 连接调试和供电 |
注册一个QNX的官网账号
申请一个QNX的license
三、基础启动配置
步骤 1:硬件连接
将 microSD 卡插入板子J3 卡槽(标着 SD Card)
连接串口线到电脑
串口工具配置:波特率 115200
给开发板上电
步骤 2:进入 U-Boot 命令行
上电后串口打印日志,出现以下提示时立即按任意键:
Hit any key to stop autoboot: 0
看到=>提示符即表示进入 U-Boot 命令行。
步骤 3:设置启动延迟
setenv bootdelay 10
步骤 4:设置 QNX 启动命令
直接复制整行粘贴(不要换行):
setenv boot_qnx "mmc dev 0;fatload mmc 0:1 0x83000000 s32g399a-rdb3.dtb;setenv ethact eth_eqos gatewayip;fatload mmc 0:1 0x8007ffc0 ifs-s32g399a-rdb3.ui;bootm 0x8007ffc0 - 0x83000000;"
步骤 5:保存配置并重启
saveenv reset
步骤 6:启动 QNX
重启后再次按任意键停在 U-Boot,执行:
run boot_qnx
步骤 7:验证启动成功
看到以下日志表示成功:
Welcome to QNX 8.0.0 on NXP_S32G399A_VNP_RDB3 !
常用测试命令:
uname # 输出:QNX ls pidin ifconfig
开机自动启动配置
setenv bootcmd run boot_qnx saveenv
之后上电就会自动启动 QNX。
四、踩坑记录
坑 1:QNX 是 IFS 只读系统
问题描述:
制作好 SD 卡后发现,QNX 系统是一个IFS 系统,根文件系统是只读的,无法直接部署应用程序。
解决方案:
将 SD 卡上的分区挂载到/opt目录作为工作区。SD 卡 64G 分为两个分区:
| 分区 | 大小 | 用途 |
|---|---|---|
/dev/sd0t12 | 5G | QNX 系统盘,保存固件 |
/dev/sd0t131 | 53G | 主要工作区,存储 APP 工程文件 |
挂载命令:
bash
mount -t dos -o exe=all /dev/sd0t131 /opt mount -t dos -o exe=all /dev/sd0t12 /firmware ls -l /firmware/
💡关键点:
-o exe=all选项允许从 DOS 分区执行程序。
坑 2:QNX 与 Linux 命令差异
问题描述:
习惯了 Linux 命令的开发者会发现 QNX 有很多不同之处,例如:
部分命令选项不兼容
某些 Linux 常用工具缺失
文件系统路径和挂载点规范不同
建议:
随时查阅 QNX 命令手册(
man 命令名)使用
pidin代替ps使用
slogger查看系统日志
坑 3:SSH 远程登录问题
问题描述:
尝试以 root 用户 SSH 登录,以下密码均失败:
rootqnxuserpassword空密码(直接回车)
123456qnx
解决方案:
只能以qnxuser用户登录:
| 用户名 | 密码 |
|---|---|
| qnxuser | qnxuser |
进阶方案(改写 sshd_config):
如果需要 root 登录,需要修改/etc/ssh/sshd_config。但由于该文件在 image 中只读,要么:
重新 mkimage 制作镜像
从外部找一个定制文件覆盖上去
网络配置命令:
bash
# 设置 IP 地址(网卡接口为 dwceqos0) ifconfig dwceqos0 inet 192.168.56.160 netmask 255.255.255.0 up # 添加默认网关 route add default 192.168.56.1
坑 4:FIFO 文件无法创建(DLT 进程启动失败)
问题描述:
DLT(Diagnostic Log and Trace)进程启动失败,导致 EXM(Execution Manager)检测到意外终止:
text
[152.122300]~DLT~405529~WARNING ~FIFO user /opt/vrte/tmp/dlt/dlt cannot be created (Function not implemented)! [152.122329]~DLT~405529~ERROR ~Unable to initialize fifo. [152.122352]~DLT~405529~CRITICAL ~Initialization of local connections failed!根本原因:
/opt挂载在 FAT32 文件系统上,不支持 FIFO(命名管道)。DLT 守护进程需要创建 FIFO 文件,但文件系统不支持。
文件系统验证:
bash
# mount 命令输出 ifs on / type ifs /dev/sd0t131 on /opt type dos (fat32) # ← FAT32 不支持 FIFO /dev/fs9p0 on /var type flash # ← flash 支持 FIFO /dev/shmem on /dev/shmem type shmem # shmem 可能也不支持
解决方案:
创建符号链接,将 FIFO 目录指向支持的文件系统(如/var/dlt):
bash
# 方法1:创建符号链接 ln -Ps /var/dlt /opt/vrte/tmp/dlt # 方法2:修改环境变量 export DLT_PIPE_DIR=/var/dlt mkdir -p /var/dlt
五、经验总结
| 问题类型 | 核心原因 | 解决方案 |
|---|---|---|
| IFS 只读 | QNX 默认 IFS 系统只读 | 挂载额外分区到/opt |
| 命令差异 | QNX 与 Linux 工具集不同 | 查阅 QNX 文档,使用pidin等专有命令 |
| SSH 登录 | 默认禁用 root 远程登录 | 使用qnxuser/qnxuser登录 |
| FIFO 创建失败 | FAT32 文件系统不支持 | 将目录指向/var等支持 FIFO 的文件系统 |
六、参考资源
QNX SDP 8.0 Programmer's Guide
QNX S32G BSP Documentation
NXP S32G-VNP-RDB3 硬件手册
📌特别感谢:QNX 唐老师对分区挂载问题的指导。
