1. 平台概览与开发环境搭建
各位同学,欢迎来到《高通8155座舱平台开发快速上手》的第一章。
做座舱开发,第一件事不是写代码,而是搞清楚你手里的这块芯片到底能干什么,以及怎么把开发环境搭起来。我见过不少新手,上来就照着网上的教程敲命令,结果环境配了三天,最后发现是SDK版本不对——白白浪费时间。
所以这一章,我们先花点时间把8155的底牌看明白,再把开发工具链装好。磨刀不误砍柴工。
1.1 高通8155芯片核心特性
SA8155P,也叫8155,是高通第三代数字座舱平台的主力芯片。说白了,它就是一颗专门为汽车座舱设计的SoC。
我个人习惯把它的核心特性归纳为三点:
- 制程工艺:7nm。功耗控制比上一代820A好太多,发热量明显降低。
- CPU架构:1颗Kryo 495 Gold(Cortex-A76)大核 + 3颗Kryo 495 Gold中核 + 4颗Kryo 495 Silver(Cortex-A55)小核。8核异构,兼顾性能与功耗。
- GPU:Adreno 640。支持3个独立显示输出,分辨率最高可达4K。
我在项目中遇到过一个问题:客户要求同时驱动仪表盘(1920x720)、中控(1920x1080)和副驾娱乐屏(1920x720)。当时用820A做,GPU负载已经接近极限。换成8155后,Adreno 640轻松搞定,还能再带一个HUD。
核心参数速览
| 参数项 | 规格 |
|---|---|
| 制程 | 7nm FinFET |
| CPU | 1+3+4 八核 Kryo 495 |
| GPU | Adreno 640 (支持Vulkan 1.1) |
| DSP | Hexagon 690 (AI算力约8TOPS) |
| 视频编解码 | 4K@60fps H.264/H.265 |
| 显示输出 | 最多3路独立显示 |
1.2 座舱域控制器架构
你想想看,传统汽车里每个功能模块都有自己的ECU——仪表一个、中控一个、空调一个、音响又一个。线束多、升级难、交互也慢。
8155座舱域控制器的思路,就是把所有这些功能集中到一个SoC上,通过虚拟化技术同时运行多个操作系统。
典型的架构是这样的:
嗯,这里要注意:QNX和Android之间不是完全隔离的。它们通过Hypervisor提供的共享内存和虚拟网卡进行通信。比如你在中控上调节音量,Android会通过IPC通知QNX,再由QNX控制底层音频硬件。
我的经验:刚开始做双系统开发时,最容易踩的坑是资源分配。我曾经遇到过QNX那边把GPU显存占满了,导致Android的动画掉帧。后来在Hypervisor配置里给Android预留了固定比例的GPU带宽,问题才解决。
1.3 安装QNX开发套件
QNX开发套件,核心就是QNX Software Development Platform (SDP) 和 Momentics IDE。不过在实际项目中,我们很少用IDE,更多是命令行交叉编译。
安装步骤其实不复杂,但有几个关键点:
- 获取SDP安装包:从BlackBerry QNX官网或你的芯片供应商处获取。注意版本要和8155的BSP匹配。
- 安装到Linux主机:我建议用Ubuntu 18.04或20.04 LTS。CentOS也行,但驱动支持不如Ubuntu全。
- 配置环境变量:这是最容易出错的地方。
# 以QNX SDP 7.1为例
export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
# 验证安装
qcc --version
# 应该输出类似: QCC version 8.3.0 (qnx710)
我曾经遇到一个同事,装完SDP后直接编译,结果报错说找不到头文件。查了半天,发现他忘了source环境变量脚本。所以我的习惯是,把上面这几行加到 ~/.bashrc 里,一劳永逸。
1.4 安装Android开发套件
Android Automotive的开发套件,其实就是标准的Android Studio + SDK,再加上高通提供的硬件抽象层(HAL)库。
流程如下:
- Android Studio:从官网下载最新版,安装时记得勾选Android SDK和Android Emulator。
- SDK Manager:安装API 30(Android 11)或API 31(Android 12),具体看你的BSP要求。
- 高通扩展包:这部分通常由Tier1供应商提供,包含针对Adreno GPU的图形驱动、硬件编解码库等。
注意:不要用模拟器来测试座舱应用。8155的硬件加速能力在模拟器上完全体现不出来。我见过有人用模拟器调UI,调到本地觉得完美,一上真机就卡成PPT。老老实实连真机调试。
1.5 配置ADB与调试桥
ADB(Android Debug Bridge)是Android开发者的老朋友了。但在座舱平台上,ADB的用法有些特殊。
首先,8155开发板通常有多个USB口。你需要确认哪个口是ADB调试口。我手头这块板子,调试口是靠近HDMI的那个Type-C。
连接步骤:
- 用USB线连接开发板和电脑。
- 在开发板上,确保ADB服务已开启(通常默认开启)。
- 在电脑上执行
adb devices。
$ adb devices
List of devices attached
12345678 device
如果显示 unauthorized,检查开发板屏幕上的授权弹窗。如果显示 no permissions,多半是USB驱动问题。
嗯,这里有个坑:有些开发板的ADB默认是关闭的,需要进入QNX侧通过命令行开启。我曾经被这个问题卡了半小时。
# 在QNX侧开启ADB(通过串口或SSH登录)
adb_ctl start
另外,我建议配置无线ADB,省得每次都要插线:
# 先有线连接,然后设置无线端口
adb tcpip 5555
# 拔掉USB线,通过IP连接
adb connect 192.168.1.100:5555
小技巧:在 ~/.android/adb_usb.ini 里添加开发板的USB Vendor ID,可以避免权限问题。高通的Vendor ID通常是 0x05c6。
1.6 开发环境验证
环境搭好了,怎么确认一切正常?我一般跑三个测试:
- QNX侧:写一个简单的Hello World,交叉编译后在目标板上运行。
- Android侧:用ADB安装一个APK,确认能正常启动和显示。
- 双系统通信:通过QNX的io-pkt和Android的虚拟网卡,互相ping通。
这三个测试都过了,你的开发环境才算真正就绪。