2. 开发环境搭建:高通SA8295 EVK介绍、QNX/Android双系统刷机、ADB与SSH调试环境配置
做座舱开发,第一步不是写代码,而是把环境搭好。我见过不少新手,拿到板子就急着编译,结果刷机失败、连不上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工具,因为它可视化,不容易出错。步骤如下:
- 进入EDL模式: 按住EVK上的“Force USB Boot”按键,然后上电。你会看到板子上的红色LED常亮。
- 连接QFIL: 打开QFIL,选择“Flat Build”模式,加载prog_firehose_ddr.elf(高通Firehose协议下载器)。
- 加载分区表: 点击“Load XML”,选择rawprogram0.xml和patch0.xml。这两个文件定义了所有分区的起始地址和大小。
- 开始刷写: 点击“Download”,等待进度条走完。整个过程大约5-8分钟。
- 重启验证: 拔掉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侧的调试。配置很简单:
- 连接USB: 将EVK的USB Type-C口(标有“ADB”的那个)连接到开发主机。
- 检查设备: 在终端输入
adb devices。如果看到类似1234567890abcdef device的输出,说明连接成功。 - 多屏调试: 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服务,需要手动启动。
- 进入QNX Shell: 通过串口或ADB的
adb shell进入QNX侧(注意:ADB默认进入的是Android侧,需要执行adb shell qnx切换到QNX)。 - 启动SSH服务: 在QNX Shell中执行:
# 启动SSH守护进程
sshd -p 2222
# 设置root密码(默认没有密码)
passwd root
- 从主机连接: 在开发主机上执行
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 本章知识结构图
为了让你更直观地理解整个开发环境搭建的流程,我画了一张图:
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。
嗯,环境搭建这部分就到这里。把这些都搞定,你的开发环境就算真正“能用”了。接下来,我们就可以开始写代码,真正玩转多屏互联了。