本文记录了在 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。四、踩坑记录坑 1QNX 是 IFS 只读系统问题描述制作好 SD 卡后发现QNX 系统是一个IFS 系统根文件系统是只读的无法直接部署应用程序。解决方案将 SD 卡上的分区挂载到/opt目录作为工作区。SD 卡 64G 分为两个分区分区大小用途/dev/sd0t125GQNX 系统盘保存固件/dev/sd0t13153G主要工作区存储 APP 工程文件挂载命令bashmount -t dos -o exeall /dev/sd0t131 /opt mount -t dos -o exeall /dev/sd0t12 /firmware ls -l /firmware/关键点-o exeall选项允许从 DOS 分区执行程序。坑 2QNX 与 Linux 命令差异问题描述习惯了 Linux 命令的开发者会发现 QNX 有很多不同之处例如部分命令选项不兼容某些 Linux 常用工具缺失文件系统路径和挂载点规范不同建议随时查阅 QNX 命令手册man 命令名使用pidin代替ps使用slogger查看系统日志坑 3SSH 远程登录问题问题描述尝试以 root 用户 SSH 登录以下密码均失败rootqnxuserpassword空密码直接回车123456qnx解决方案只能以qnxuser用户登录用户名密码qnxuserqnxuser进阶方案改写 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坑 4FIFO 文件无法创建DLT 进程启动失败问题描述DLTDiagnostic Log and Trace进程启动失败导致 EXMExecution 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/dltbash# 方法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 Programmers GuideQNX S32G BSP DocumentationNXP S32G-VNP-RDB3 硬件手册特别感谢QNX 唐老师对分区挂载问题的指导。