首页
/ openpilot 骁龙性能剖析实战:在 agnos(tici)硬件上使用 Snapdragon Profiler 的完整配置流程

openpilot 骁龙性能剖析实战:在 agnos(tici)硬件上使用 Snapdragon Profiler 的完整配置流程

2026-09-04 19:02:42作者:宣海椒Queenly

本文围绕 openpilot 仓库中 snapdragon profiler 指南 展开,介绍如何在本地 PC 上部署 Snapdragon Profiler,并让它正确"认识" openpilot 基于 agnos 的车载硬件(tici)。读完后你将掌握:Profiler 工具包的放置与依赖安装(setup-profiler.sh)、针对 agnos 的适配改造(setup-agnos.sh)、ADB 连接与启动剖析的完整链路,以及它与 openpilot 内置其他性能剖析工具(ftrace、perfetto、py-spy 等)的分工关系。

为什么 openpilot 需要 Snapdragon Profiler

openpilot 的运行载体 tici 是高通骁龙平台的定制设备,其系统层是 agnos——从仓库中 agnos 硬件抽象tici 的 agnos 配置 以及 common 层 agnos 配置 可以看出,openpilot 对该平台的电源、USB、网络等硬件操作都有一套专门的 agnos 适配。

针对这类 SoC,Linux 层面自带的 ftrace/irqtop 只能看到 CPU 调度、中断、workqueue 等内核侧信息,而 GPU 负载、硬件编码器、传感器通路、SoC 电源频率等需要高通官方工具链。Snapdragon Profiler 正是高通面向骁龙平台开发的综合性能剖析工具,它通过设备端的 adb 通道把 SoC 级性能数据回传到 PC 端 GUI,因此成为 openpilot 调试 tici 上 CPU/GPU/多媒体子系统性能时的首选工具,与仓库中面向内核侧的 ftrace 脚本irqtop 脚本 形成互补。

前置条件与工具包获取

指南原文给出的是完整操作步骤(保留原命令顺序):

  1. 从高通官方开发者网站的 Snapdragon Profiler Tools Archive 下载工具包(需要注册高通开发者账号),选择 v2021.5 版本——README 明确标注该版本已验证可在 openpilot 24.04 开发环境中正常工作;
  2. 将解压结果放到仓库约定的 SnapdragonProfiler 目录下。README 中写的目标是 openpilot/selfdrive/debug/profiling/snapdragon/SnapdragonProfiler
  3. 运行 ./setup-profiler.sh 完成本地依赖安装;
  4. 运行 ./setup-agnos.sh 完成 agnos 适配;
  5. 在设备上运行 adb.sh 脚本(README 原文写的是 openpilot/selfdrive/debug/adb.sh);
  6. 在本地 PC 执行脚本输出的 adb connect xxx 命令完成设备连接;
  7. 进入 SnapdragonProfiler 目录,运行 ./run_sdp.sh 启动 Profiler;
  8. 在 Profiler 的 "connect to device" 中选择刚配置好的设备,即可开始剖析。

需要说明的一点路径事实:在当前仓库结构中,openpilot/selfdrive/debug/ 目录已不存在,剖析脚本实际集中在 tools/scripts/profiling/snapdragon/ 下。README 中出现的 openpilot/selfdrive/debug/adb.sh 是文档编写时期(设备上)的旧布局写法——openpilot 在 tici 上的标准检出路径为 /data/openpilot(可从 perfetto 取回 trace 的脚本DEST=tici:/data/openpilot/selfdrive/debug/profiling/perfetto 得到印证)。因此实际操作时应按"设备上的 openpilot 检出根目录 + 相对路径"理解 README 中的步骤,而非在当前仓库里寻找这些文件。

setup-profiler.sh:本地 PC 侧依赖安装

setup-profiler.sh 只做一件事:把 Snapdragon Profiler 在 Linux 开发机上跑起来所需的全部系统依赖装齐。其核心命令是:

sudo apt update
sudo apt-get install libc++1 libc++abi1 default-jre android-tools-adb gtk-sharp2

随后配置 Mono 官方 apt 源并安装完整 Mono 运行库:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https ca-certificates
echo "deb https://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt-get install -y mono-complete

从这套依赖组合可以推断出 Profiler 的技术构成:default-jremono-complete 说明 Profiler 客户端是 .NET/Mono 生态的应用(设备端服务与 PC 端 GUI 混合架构),android-tools-adb 提供与设备的 adb 通道,gtk-sharp2 则表明 PC 端 GUI 依赖 GTK 绑定。脚本结尾会提示:"Setup successful, you should now be able to run the profiler with cd SnapdragonProfiler and ./run_sdp.sh",即安装完成后唯一入口就是工具包自带的 run_sdp.sh。该脚本面向 Ubuntu 系发行版,需要 sudo 权限,建议在 openpilot 推荐的 Linux 开发机环境中执行。

setup-agnos.sh:让 Profiler 指向 agnos 而不是 stock Android

这是整篇指南中最关键、也最容易被忽略的一步。setup-agnos.sh 全文只有三行有效逻辑:

cd SnapdragonProfiler/service
mv android real_android
ln -s agl/ android

它把 Profiler 工具包内 service/ 目录下原本面向 stock Android 服务的 android 目录改名保留为 real_android,然后用 agnos 的 agl/ 目录建立了一个名为 android 的符号链接。其原理是:Snapdragon Profiler 的设备端服务通过 android 这一约定路径查找系统接口与驱动脚本,而 tici 的 agnos 系统把对应实现放在了 agl/ 目录下(agl 与 Android 的目录布局同源)。符号链接相当于一个重定向垫片,使 Profiler 的设备端服务在 agnos 上按原有逻辑加载。

脚本注释里作者自己写了 # TODO: there's probably a better way to do this,坦承这是一种务实的 hack。这也提示使用者:执行该脚本后 service/ 目录会被就地修改,若日后需要重新使用原版 Android 模式,real_android 目录即为备份。

设备连接与启动剖析

依赖与适配完成后,按 README 的顺序完成设备侧接入:

  1. 设备端开启 adb:在 tici 上运行 openpilot 检出目录中的 adb.sh(旧布局路径为 selfdrive/debug/adb.sh),脚本会在设备上启动 adb 守护并打印连接地址;
  2. PC 端连接:在本地执行脚本输出的 adb connect xxx 命令,建立 adb 网络通道;
  3. 启动 Profiler:进入 SnapdragonProfiler 目录运行 ./run_sdp.sh
  4. 选择设备:在 Profiler GUI 中选择刚连接的设备,即可开始对 CPU、GPU、传感器等子系统做实时剖析。

与仓库内其他剖析工具的分工

tools/scripts/profiling/ 目录整体看一遍,openpilot 实际上维护了一套分层剖析工具链,Snapdragon Profiler 处于其中"SoC 层"的位置:

工具 脚本 剖析层次
Snapdragon Profiler snapdragon/ SoC 级:CPU 频率、GPU、多媒体硬件路径
ftrace ftrace.sh 内核事件:默认启用 workqueue 事件,trace 写入 /tmp/trace(可开启 irq/sched/kgsl/camera 事件)
irqtop watch-irqs.sh 中断分布:irqtop -d1 -R 每秒刷新
Perfetto perfetto/ 系统级调度/内存 trace(tracebox 录制,trace_processor --httpd 可视化)
py-spy py-spy/profile.sh Python 进程采样,输出 SVG 火焰图
Palanteer palanteer/setup.sh 跨进程调用栈火焰图(基于 libunwind 构建)

典型排障路径是:先用 Snapdragon Profiler 确认瓶颈是否在 SoC 硬件层(例如 GPU 编码器或 NPU 占用),若确认在 OS/用户态,再用 ftrace、perfetto、py-spy 逐层下钻。

适用前提与限制

  • 版本锁定:README 指定 Snapdragon Profiler v2021.5(已验证于 openpilot 24.04 开发环境),其他版本未在 openpilot 场景下验证,升级前需自行回归;
  • 账号门槛:工具包下载需要高通开发者账号,且工具包本体不随仓库分发,SnapdragonProfiler/ 目录由使用者自行解压填充;
  • 脚本破坏性setup-agnos.sh 会就地重命名 Profiler 的 service/android 目录,重复执行前需确认目录状态;
  • 环境假设setup-profiler.sh 假定 Ubuntu 系 apt 环境与 sudo 权限,且使用了 stable-xenial 的 Mono 源,属于为 24.04 开发机调通的配置,跨发行版使用可能需要调整;
  • 路径时效性:README 中的 openpilot/selfdrive/debug/ 路径反映的是旧版仓库布局,当前仓库已将该类脚本迁至 tools/scripts/profiling/,阅读时需注意区分"PC 开发机上的仓库路径"与"tici 设备上 /data/openpilot 检出路径"两套体系。
登录后查看全文
热门项目推荐
相关项目推荐