2. 高通8295平台概述

做座舱开发,第一步不是写代码,而是把环境搭好。我见过不少新手,拿到板子就急着编译,结果刷机失败、连不上ADB,折腾一整天。说白了,环境搭建的熟练程度,直接决定了后续开发效率。

这一章,我们就来搞定SA8295 EVK的硬件认知、双系统刷机流程,以及ADB和SSH的调试环境配置。嗯,都是实打实的干货。

2.1 SA8295 EVK硬件概览

先看看我们手里的这块板子。SA8295 EVK(Evaluation Kit)是高通官方提供的开发板,尺寸大概跟一台iPad Pro差不多。我第一眼看到它时,最直观的感受就是——接口真多。

接口/模块 说明 我的备注
主芯片 SA8295P(5nm制程) 支持最多11路显示输出
显示接口 4x DP(DisplayPort)、2x DSI、1x eDP 实测可同时驱动仪表+中控+副驾+后排
存储 UFS 3.1(128GB)、LPDDR5(16GB) 刷机时注意分区表不要乱改
网络 千兆以太网、Wi-Fi 6、蓝牙5.2 SSH调试强烈建议用有线,稳定
调试接口 USB Type-C(ADB)、UART(串口)、JTAG 串口是最后的救命稻草
扩展槽 M.2 Key B(5G模组)、M.2 Key E(Wi-Fi/BT) 我踩过坑:M.2模组方向别插反
小提示: EVK的电源适配器是12V/5A的,别用普通手机充电器。我曾经图省事插了个65W笔记本PD充电器,结果板子反复重启——供电协议不匹配。

2.2 QNX/Android双系统刷机

SA8295最吸引人的地方,就是它支持QNX和Android双系统同时运行。QNX跑仪表和车辆控制,Android跑中控娱乐。刷机时,我们需要把两个系统的镜像都烧进去。

2.2.1 刷机前的准备

你需要准备这些东西:

  • 硬件: SA8295 EVK、USB Type-C数据线、12V电源、一台Linux主机(Ubuntu 20.04以上)
  • 软件: QNX SDP(Software Development Platform)、Android源码(AOSP 12+)、高通QFIL工具
  • 镜像文件: 高通提供的完整刷机包(包含GPT分区表、xbl、abl、tz、hyp、qnx_os、android_boot、system、vendor等)
警告: 刷机前请确保EVK的SW1拨码开关处于“Download Mode”(通常是1-ON, 2-OFF, 3-ON, 4-OFF)。不同批次可能不同,务必查看EVK手册。我见过有人没看手册直接刷,把ABL刷坏了,最后只能拆Flash用编程器恢复。

2.2.2 刷机步骤(QFIL方式)

我个人习惯用QFIL工具,因为它可视化,不容易出错。步骤如下:

  1. 进入EDL模式: 按住EVK上的“Force USB Boot”按键,然后上电。你会看到板子上的红色LED常亮。
  2. 连接QFIL: 打开QFIL,选择“Flat Build”模式,加载prog_firehose_ddr.elf(高通Firehose协议下载器)。
  3. 加载分区表: 点击“Load XML”,选择rawprogram0.xml和patch0.xml。这两个文件定义了所有分区的起始地址和大小。
  4. 开始刷写: 点击“Download”,等待进度条走完。整个过程大约5-8分钟。
  5. 重启验证: 拔掉USB线,断电重启。如果看到QNX的启动Logo和Android的Boot Animation先后出现,说明刷机成功。
关键点: 双系统刷机时,QNX和Android的镜像必须匹配。高通每个季度会发布一次BSP(Board Support Package),里面包含了两个系统的同步版本。不要混用不同季度的镜像,否则会出现QNX启动后Android无法挂载vendor分区的问题。

2.2.3 刷机后的首次启动

刷完机第一次启动,你会看到这样的启动日志(通过串口查看):

// QNX启动阶段
[QNX] SBL1: Starting...
[QNX] PBL: Loading QNX IPL...
[QNX] QNX Kernel: Starting (4.14.188)
[QNX] Screen: Initializing display (1920x1080)
[QNX] VirtIO: Creating Android VM...

// Android启动阶段
[Android] Bootloader: Loading kernel...
[Android] Kernel: Linux version 5.10.43
[Android] Init: Starting Zygote
[Android] SystemUI: Launcher started

嗯,这里要注意:如果卡在“VirtIO: Creating Android VM”这一步,通常是QNX侧的Android镜像路径配置错了。需要检查QNX的ifs(Image File System)脚本。

2.3 ADB与SSH调试环境配置

刷完机,接下来就是连上设备,开始调试。ADB和SSH是我们最常用的两个工具。

2.3.1 ADB配置

ADB主要用于Android侧的调试。配置很简单:

  1. 连接USB: 将EVK的USB Type-C口(标有“ADB”的那个)连接到开发主机。
  2. 检查设备: 在终端输入 adb devices。如果看到类似 1234567890abcdef device 的输出,说明连接成功。
  3. 多屏调试: SA8295支持多屏输出,你可以用 adb shell wm size 查看每个屏幕的分辨率。比如:
# 查看所有显示设备
adb shell dumpsys display | grep "DisplayDeviceInfo"

# 设置副屏分辨率(假设副屏是Display 1)
adb shell wm size 1920x720 -d 1
小技巧: 如果ADB连不上,先检查USB线。不是所有Type-C线都支持数据传输。我建议用高通原装的那根线,或者买一根带E-Marker芯片的USB 3.1 Gen2线。

2.3.2 SSH配置

SSH主要用于QNX侧的调试。QNX默认没有开启SSH服务,需要手动启动。

  1. 进入QNX Shell: 通过串口或ADB的 adb shell 进入QNX侧(注意:ADB默认进入的是Android侧,需要执行 adb shell qnx 切换到QNX)。
  2. 启动SSH服务: 在QNX Shell中执行:
# 启动SSH守护进程
sshd -p 2222

# 设置root密码(默认没有密码)
passwd root
  1. 从主机连接: 在开发主机上执行 ssh root@<EVK的IP地址> -p 2222。IP地址可以通过 ifconfig 查看。
注意: QNX的SSH默认只允许密钥登录,不允许密码登录。你需要先生成SSH密钥对,然后把公钥复制到QNX的 /home/root/.ssh/authorized_keys 文件中。具体命令:
# 在主机上生成密钥
ssh-keygen -t rsa -b 4096

# 复制公钥到QNX
ssh-copy-id -p 2222 root@<EVK_IP>

2.4 本章知识结构图

为了让你更直观地理解整个开发环境搭建的流程,我画了一张图:

SA8295开发环境搭建流程 SA8295开发环境搭建流程 1. 硬件准备 EVK + 电源 + USB线 2. 双系统刷机 QFIL + QNX/Android镜像 3. 调试环境 ADB + SSH 进入EDL模式 加载Firehose协议 烧写分区表+镜像 重启验证 ⚠️ 注意: QNX和Android镜像版本必须匹配 💡 建议: SSH调试优先使用有线网络 最终目标:QNX + Android 双系统稳定运行,ADB/SSH 随时可连 为后续多屏互联开发打下坚实基础

2.5 常见问题与避坑

最后,分享几个我实际项目中遇到的坑:

  • 刷机卡在“Download” 0%: 检查USB驱动是否安装。Windows下需要安装QDL(Qualcomm Download)驱动,Linux下需要配置udev规则。我曾经在Ubuntu 22.04上折腾了2小时,最后发现是缺少 libusb 库。
  • ADB显示“unauthorized”: 在EVK的Android侧,确认是否弹出了RSA密钥授权对话框。如果没有,执行 adb kill-server && adb start-server 重启ADB服务。
  • SSH连接超时: 检查EVK的防火墙。QNX默认开启了iptables,需要放行2222端口:iptables -A INPUT -p tcp --dport 2222 -j ACCEPT。
  • 双系统启动后Android黑屏: 大概率是QNX侧的VirtIO配置问题。检查 /etc/system/config/virtio.conf 中的display节点是否指向了正确的Android framebuffer。

嗯,环境搭建这部分就到这里。把这些都搞定,你的开发环境就算真正“能用”了。接下来,我们就可以开始写代码,真正玩转多屏互联了。