1. 8155平台全景概览:芯片架构、硬件框图、软件分层、开发环境搭建

各位同学,欢迎来到《高通8155智能座舱平台开发实战》的第一章。

做智能座舱开发,第一件事不是写代码,而是搞清楚你手里的“家伙”到底是什么。8155这颗芯片,说白了就是座舱域的“大脑”。我当年刚接触这个平台时,第一反应是——这玩意儿比手机SoC复杂太多了。为什么?因为它要同时管仪表、中控、HUD、后排娱乐、甚至还有DMS摄像头。嗯,今天我们就把它扒开看看。

1.1 芯片架构:一颗为座舱而生的SoC

高通8155(SA8155P)属于骁龙汽车第三代数字座舱平台。它采用7nm工艺,这在2020年量产时是相当先进的。我个人习惯,看一颗SoC先看它的“三围”:CPU、GPU、NPU。

模块 规格 我的备注
CPU 8核 Kryo 485(1+3+4架构) 大核2.96GHz,中核2.42GHz,小核1.8GHz
GPU Adreno 640 支持3个4K屏同时输出,或者2K+2K+1080P
NPU Hexagon 690 DSP + HVX 专门跑AI推理,比如语音识别、手势识别
ISP Spectra 380 支持最多7路摄像头输入,DMS/OMS全靠它
视频编解码 4K@60fps 解码 / 4K@30fps 编码 支持H.265、H.264、VP9
内存 LPDDR5 四通道 带宽够大,多屏渲染不卡顿

核心要点:8155的CPU采用“1+3+4”大小核架构。大核跑仪表渲染,中核跑中控应用,小核处理后台服务。这种分工,我在项目里实测过——如果仪表帧率掉到30fps以下,多半是大核被中控任务抢占了。解决办法?绑核(CPU affinity)。

1.2 硬件框图:从SoC到外设的“高速公路”

光看芯片参数不够,你得知道它怎么跟外设连起来。下面这张图是我自己画的8155典型硬件框图,帮你理清数据流向。

SA8155P 典型座舱硬件框图 SA8155P SoC CPU | GPU | NPU | ISP | VPU LPDDR5 | UFS 3.0 | PCIe 显示输出 DSI x4 / DP x2 摄像头输入 CSI x4 (最多7路) 音频 I2S / TDM / Slimbus 网络 & 连接 Ethernet / Wi-Fi / BT 存储 UFS 3.0 / eMMC / SD 外设总线 SPI / I2C / UART / CAN 数据流向:外设 → SoC处理 → 显示输出

项目经验:我曾经在一个项目中,客户要求同时驱动3块2K屏+2路摄像头。结果发现DSI带宽不够。解决方案是把其中一块屏改成DP接口,走USB-C alt mode。所以,硬件设计阶段一定要算好带宽预算,别等Layout完了才发现。

1.3 软件分层:从Hypervisor到应用

8155的软件架构,我习惯把它分成四层。你想想看,一个座舱系统要同时跑仪表(安全关键)和中控(非安全关键),怎么隔离?答案是Hypervisor。

  1. Hypervisor层: 高通默认用KVM或Xen。它负责把CPU、GPU、内存分给不同的虚拟机。仪表域跑一个Linux(通常是QNX或RT-Linux),中控域跑Android。
  2. 操作系统层: 仪表域用QNX(安全认证),中控域用Android Automotive OS。我建议中控至少用Android 10以上,因为支持多用户和分区存储。
  3. 中间件层: 包括高通自带的Qualcomm神经处理SDK、音频框架、摄像头框架。还有IVI中间件,比如AGL或自研的Service Layer。
  4. 应用层: 仪表HMI、中控Launcher、语音助手、地图导航、空调控制等。

避坑指南:我曾经在项目里遇到一个问题——仪表和中控共享同一个GPU,结果中控启动一个3D动画,仪表帧率直接掉到20fps。原因?Hypervisor的GPU分区没配好。解决方案是给仪表域预留固定的GPU时间片,中控域只能用剩下的。这个配置在QNX的Hypervisor配置文件中设置。

1.4 开发环境搭建:从零开始

好,理论说完了,咱们动手。搭建8155的开发环境,我建议按以下步骤来。别跳步,我踩过坑。

1.4.1 硬件准备

  • 开发板: 高通官方SA8155P MTP板,或者第三方的核心板+底板。我推荐MTP板,因为所有外设接口都引出来了。
  • 调试工具: USB Type-C数据线(用于ADB和fastboot)、JTAG调试器(用于底层调试)、串口线(用于Kernel log)。
  • 电源: 12V/5A直流电源。注意,8155开发板功耗不低,别用普通手机充电器。

1.4.2 软件工具链

工具 版本建议 用途
Ubuntu 18.04 或 20.04 LTS 编译服务器,我习惯用20.04
Android SDK API 30+ 中控应用开发
QNX SDP 7.0 或 7.1 仪表域开发
Qualcomm LE SDK 最新版 摄像头、音频、NPU驱动开发
ADB & Fastboot 最新版 刷机、调试

1.4.3 搭建步骤

  1. 安装Ubuntu: 建议用实体机或高性能虚拟机,至少分配8核CPU、16GB内存、200GB硬盘。
  2. 下载源码: 从高通Codeaurora仓库拉取Android源码。命令:repo init -u <manifest_url> -b <branch>,然后 repo sync。这个过程可能需要几个小时,取决于网速。
  3. 安装依赖: 运行 sudo apt-get install 安装编译所需的库,比如libncurses5、libssl-dev等。高通官方文档里有完整列表。
  4. 编译: 执行 source build/envsetup.sh,然后 lunch 选择目标(比如 sa8155p-userdebug),最后 make -j16。第一次编译大约需要1-2小时。
  5. 刷机: 进入fastboot模式,运行 fastboot flashall。注意,刷机前备份好原厂镜像,万一变砖了还能救回来。

重要提醒: 我第一次编译8155时,忘了安装Python3.8,结果编译到一半报错。还有,make -j 后面的数字别超过CPU线程数,否则会卡死。我建议用 -j$(nproc) 自动检测。

1.5 本章小结

这一章我们走了一遍8155的全景。从芯片的CPU/GPU/NPU架构,到硬件框图中的数据流向,再到软件的四层分层,最后把开发环境搭了起来。嗯,这些东西看起来琐碎,但都是后面实战的基础。

我个人觉得,理解8155的关键在于“隔离”和“共享”——Hypervisor隔离了安全域和非安全域,GPU和内存则在多个域之间共享。你只要抓住这两点,后面的开发就不会跑偏。