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典型硬件框图,帮你理清数据流向。
项目经验:我曾经在一个项目中,客户要求同时驱动3块2K屏+2路摄像头。结果发现DSI带宽不够。解决方案是把其中一块屏改成DP接口,走USB-C alt mode。所以,硬件设计阶段一定要算好带宽预算,别等Layout完了才发现。
1.3 软件分层:从Hypervisor到应用
8155的软件架构,我习惯把它分成四层。你想想看,一个座舱系统要同时跑仪表(安全关键)和中控(非安全关键),怎么隔离?答案是Hypervisor。
- Hypervisor层: 高通默认用KVM或Xen。它负责把CPU、GPU、内存分给不同的虚拟机。仪表域跑一个Linux(通常是QNX或RT-Linux),中控域跑Android。
- 操作系统层: 仪表域用QNX(安全认证),中控域用Android Automotive OS。我建议中控至少用Android 10以上,因为支持多用户和分区存储。
- 中间件层: 包括高通自带的Qualcomm神经处理SDK、音频框架、摄像头框架。还有IVI中间件,比如AGL或自研的Service Layer。
- 应用层: 仪表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 搭建步骤
- 安装Ubuntu: 建议用实体机或高性能虚拟机,至少分配8核CPU、16GB内存、200GB硬盘。
- 下载源码: 从高通Codeaurora仓库拉取Android源码。命令:
repo init -u <manifest_url> -b <branch>,然后repo sync。这个过程可能需要几个小时,取决于网速。 - 安装依赖: 运行
sudo apt-get install安装编译所需的库,比如libncurses5、libssl-dev等。高通官方文档里有完整列表。 - 编译: 执行
source build/envsetup.sh,然后lunch选择目标(比如sa8155p-userdebug),最后make -j16。第一次编译大约需要1-2小时。 - 刷机: 进入fastboot模式,运行
fastboot flashall。注意,刷机前备份好原厂镜像,万一变砖了还能救回来。
重要提醒: 我第一次编译8155时,忘了安装Python3.8,结果编译到一半报错。还有,make -j 后面的数字别超过CPU线程数,否则会卡死。我建议用 -j$(nproc) 自动检测。
1.5 本章小结
这一章我们走了一遍8155的全景。从芯片的CPU/GPU/NPU架构,到硬件框图中的数据流向,再到软件的四层分层,最后把开发环境搭了起来。嗯,这些东西看起来琐碎,但都是后面实战的基础。
我个人觉得,理解8155的关键在于“隔离”和“共享”——Hypervisor隔离了安全域和非安全域,GPU和内存则在多个域之间共享。你只要抓住这两点,后面的开发就不会跑偏。