3. SA8155软件架构

说实话,做车机开发这么多年,我见过太多人卡在环境搭建这一步。硬件没点亮,工具链没配好,后面再牛的代码也跑不起来。这一章,咱们就把 SA8155P 开发板、镜像烧录、ADB/Fastboot、串口调试这些基础活儿,一次性捋清楚。

本章核心目标:拿到一块 SA8155P 开发板,能把它从「砖头」变成「可调试的系统」。说白了,就是让板子跑起来,让你能跟它对话。

3.1 硬件开发板介绍:高通 SA8155P

SA8155P 是高通第三代数字座舱平台的核心芯片。我最早接触它是在 2019 年,当时帮一家 Tier1 做预研项目。第一次拿到开发板,说实话,比我想象中大不少。

先看硬件规格:

项目 参数
SoC 高通 SA8155P (SM8150P)
CPU Kryo 485,1×2.84GHz + 3×2.42GHz + 4×1.8GHz
GPU Adreno 640
NPU Hexagon 690 (AI 算力约 8 TOPS)
内存 LPDDR4x 8GB/12GB
存储 UFS 2.1 64GB/128GB
显示 支持 3 路 4K 显示输出
视频 H.264/H.265 编解码

开发板上的接口,我列几个关键的:

  • USB Type-C:用于 ADB 调试和 Fastboot 烧录
  • UART 串口:3.3V 电平,通常用 FT232 转 USB 线连接
  • HDMI/DP:接显示器看 UI 效果
  • 以太网口:用于 NFS 挂载或网络日志传输
  • SD 卡槽:应急启动或刷机用

我的经验:拿到开发板后,先别急着上电。检查一下拨码开关,确认启动模式是 eMMC 还是 SD 卡。我见过有人拨错了,折腾半天点不亮。

3.2 QNX / Android Automotive OS 镜像烧录

SA8155P 支持双系统:QNX 作为安全域,Android Automotive OS 作为娱乐域。烧录方式略有不同,但核心工具都是 fastboot。

3.2.1 烧录前的准备

  • 一台 Linux 主机(Ubuntu 18.04/20.04 我比较推荐)
  • USB Type-C 数据线(质量要好,别用充电线)
  • 镜像包:通常包含 boot.img、system.img、vendor.img、dtbo.img 等
  • QNX 的 IFS 镜像(.ifs 文件)

3.2.2 Android Automotive OS 烧录步骤

  1. 开发板进入 Fastboot 模式:按住 VOL- 键,再按 POWER 键
  2. 连接 USB 线,主机执行 fastboot devices 确认设备
  3. 烧录分区:
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash vendor vendor.img
fastboot flash dtbo dtbo.img
fastboot reboot

注意:千万不要在烧录过程中拔掉 USB 线或断电。我有个同事曾经烧到一半断电,结果 eMMC 分区表损坏,最后只能拆芯片用编程器恢复。嗯,那周他加班到凌晨三点。

3.2.3 QNX 镜像烧录

QNX 的烧录稍微麻烦一点。它通常通过 QNX Software Center 或命令行工具 qnxflash 完成。我个人习惯用命令行,更可控:

qnxflash -f sa8155p_qnx.ifs -d /dev/ttyUSB0 -b 115200

这里 -d 指定串口设备,-b 是波特率。QNX 的 IFS 镜像包含微内核和驱动,烧录完成后会自动启动。

3.3 ADB 与 Fastboot 工具链配置

这两个工具是车机调试的「左右手」。ADB 用于 Android 系统内的调试,Fastboot 用于 bootloader 级别的操作。

3.3.1 安装 ADB 和 Fastboot

在 Ubuntu 上,一行命令搞定:

sudo apt install android-tools-adb android-tools-fastboot

Windows 用户可以去 Google 官方下载 Platform Tools 压缩包,解压后把路径加到环境变量里。

3.3.2 验证工具链

连接开发板后,执行:

adb devices
fastboot devices

如果看到设备序列号,说明连接成功。如果没看到,检查三点:

  • USB 线是否支持数据传输
  • 驱动是否安装(Windows 需要高通 USB 驱动)
  • 开发板是否处于正确的模式(ADB 需要系统启动,Fastboot 需要 bootloader)

避坑指南:我曾经遇到 ADB 能识别但 fastboot 不识别的情况。后来发现是 USB 3.0 端口兼容性问题。换到 USB 2.0 端口就好了。你想想看,有时候最不起眼的细节反而最坑人。

3.4 串口调试与日志抓取

串口是车机开发的「最后一道防线」。系统还没起来、网络还没配好、ADB 连不上——这时候串口就是你唯一的窗口。

3.4.1 串口连接

开发板上的 UART 接口通常是 4 针:VCC、GND、TX、RX。用 FT232 模块连接:

  • 开发板 TX → FT232 RX
  • 开发板 RX → FT232 TX
  • GND 相连

串口参数:115200 baud, 8 data bits, 1 stop bit, no parity。

3.4.2 使用 minicom 或 screen

Linux 下我常用 screen:

sudo screen /dev/ttyUSB0 115200

Windows 下用 PuTTY 或 SecureCRT,选 Serial 模式,填好端口和波特率就行。

3.4.3 抓取日志

串口日志会实时打印内核启动信息、驱动加载状态、应用崩溃栈。如果想保存下来分析:

sudo screen -L /dev/ttyUSB0 115200

加 -L 参数后,日志会自动写入 screenlog.0 文件。我一般会同时开两个终端:一个看实时日志,一个用 tail -f 跟踪文件。

实用技巧:抓日志时,用 dmesg -w 可以实时查看内核日志。如果系统已经启动,用 logcat 抓 Android 层的日志。两者结合,定位问题快得多。

3.5 本章知识结构图

下面这张图把整个开发环境搭建的流程串起来了。从硬件板子到工具链,再到调试手段,一目了然:

SA8155P 开发环境搭建流程 SA8155P 开发环境搭建流程 硬件层:SA8155P 开发板 CPU Kryo 485 | GPU Adreno 640 | NPU Hexagon 690 | LPDDR4x | UFS 2.1 系统层:双系统镜像 QNX IFS 镜像(安全域) Android Automotive OS(娱乐域) 工具链层:烧录与调试 Fastboot 烧录 ADB 调试 串口日志 调试手段 串口终端(minicom/screen) 日志抓取(dmesg/logcat)

3.6 常见问题与排查思路

现象 可能原因 解决办法
开发板上电无显示 电源供电不足 / 启动模式错误 检查 12V 电源适配器,确认拨码开关
fastboot 找不到设备 USB 驱动问题 / 端口兼容性 换 USB 2.0 端口,重装驱动
串口无输出 TX/RX 接反 / 波特率不对 交换 TX/RX,确认 115200 8N1
烧录中途失败 USB 线质量差 / 镜像损坏 换线,重新下载镜像并校验 MD5

最后提醒一句:开发板很贵,SA8155P 的开发板一套下来好几万。操作前多看几遍文档,别像我当年那样,第一次烧录就把 bootloader 刷坏了。嗯,那次真是血泪教训。