第二章:开发环境搭建——高通Hexagon SDK安装、ADSP Toolchain配置、模拟器环境搭建、目标板连接与调试设置
好,咱们直接进入正题。
开发环境搭建这件事,说难不难,说简单也不简单。我见过不少工程师,卡在最开始的安装配置上,一卡就是好几天。其实说白了,就是几个关键步骤没搞对。今天我把我的经验摊开来聊,你跟着走一遍,基本不会出问题。
2.1 高通Hexagon SDK安装
先讲SDK。高通Hexagon SDK,是咱们开发ADSP和传感器中枢的根基。没有它,后面什么都干不了。
下载与版本选择
我个人习惯,去高通开发者官网(createpoint.qti.qualcomm.com)下载。注意,你需要注册一个账号,这个账号会关联你的License。嗯,这里要注意:SDK版本要和你的目标芯片匹配。比如你用的是SM8450,那就选对应这个平台的SDK版本。我早期犯过一个错,拿SM8350的SDK去编译SM8450的镜像,结果一堆链接错误,折腾了两天才发现是版本不匹配。
安装步骤
- 下载完成后,得到一个类似
Hexagon_SDK_5.x.x.x_linux.run的文件。 - 赋予执行权限:
chmod +x Hexagon_SDK_5.x.x.x_linux.run - 运行安装:
./Hexagon_SDK_5.x.x.x_linux.run - 安装过程中,会提示你选择安装路径。我建议放在
/opt/qualcomm/hexagon_sdk下,方便后续管理。 - 安装完成后,检查一下环境变量。SDK自带的脚本会帮你设置,但有时候会漏掉。你可以手动添加:
export HEXAGON_SDK_ROOT=/opt/qualcomm/hexagon_sdk/5.x.x.x
export PATH=$PATH:$HEXAGON_SDK_ROOT/tools/HEXAGON_Tools/8.6.06/bin
验证安装
运行 hexagon-clang --version,如果能正常输出版本信息,说明SDK安装成功了。
2.2 ADSP Toolchain配置
Toolchain,说白了就是编译器、链接器、调试器这一整套工具。高通ADSP用的是Hexagon DSP专用的工具链,和ARM的GCC不太一样。
工具链路径
安装完SDK后,工具链默认在 $HEXAGON_SDK_ROOT/tools/HEXAGON_Tools/ 下。里面会有多个版本,比如 8.6.06、8.7.02 等。我建议用最新的稳定版,但别追太新,有时候新版本会有兼容性问题。
配置环境变量
除了上面提到的PATH,还需要设置几个关键变量:
export HEXAGON_TOOLS_VERSION=8.6.06
export HEXAGON_TOOLS_DIR=$HEXAGON_SDK_ROOT/tools/HEXAGON_Tools/$HEXAGON_TOOLS_VERSION
export PATH=$PATH:$HEXAGON_TOOLS_DIR/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HEXAGON_TOOLS_DIR/lib
测试编译
写一个简单的Hello World程序,用Hexagon工具链编译:
#include <stdio.h>
int main() {
printf("Hello from Hexagon DSP!\n");
return 0;
}
编译命令:
hexagon-clang -o hello_hexagon hello.c
如果编译成功,会生成一个 hello_hexagon 的可执行文件。注意,这个文件不能在x86主机上直接运行,它需要在Hexagon模拟器或真机上跑。
2.3 模拟器(Simulator)环境搭建
模拟器,是我们前期开发调试的利器。没有目标板的时候,全靠它来验证代码逻辑。
模拟器位置
模拟器在 $HEXAGON_SDK_ROOT/tools/HEXAGON_Tools/$HEXAGON_TOOLS_VERSION/ 下,名字叫 hexagon-sim。你可以在 bin 目录下找到它。
启动模拟器
最简单的启动方式:
hexagon-sim -m qurt hello_hexagon
这里 -m qurt 表示模拟QuRT操作系统环境。QuRT是高通DSP上的实时操作系统,咱们后面会详细讲。
模拟器调试模式
如果你需要调试,可以加上 -g 参数:
hexagon-sim -g -m qurt hello_hexagon
这样模拟器会启动一个GDB服务器,监听在端口1234上。然后你可以在另一个终端用 hexagon-gdb 连接上去调试。
模拟器配置文件
我个人习惯写一个模拟器启动脚本,把常用的参数放进去:
#!/bin/bash
hexagon-sim \
-m qurt \
-g \
--timing \
--memory=256M \
$1
这样每次只需要 ./run_sim.sh hello_hexagon 就行了,省得敲一堆参数。
Ctrl+C 中断它,然后输入 quit 退出。如果遇到模拟器卡死,别慌,用 kill -9 强制杀掉进程就行。
2.4 目标板连接与调试设置
模拟器终究是模拟器,有些硬件相关的问题,必须在真机上才能复现。所以,目标板的连接和调试设置,是必须掌握的技能。
硬件连接
目标板通常通过USB或者JTAG连接到主机。我用的比较多的是高通自家的 QRK (Qualcomm Reference Kit) 开发板。连接方式如下:
- 用USB线连接开发板的ADSP调试口到主机。
- 给开发板上电,确认指示灯亮起。
- 在主机上运行
lsusb,如果能看到一个Qualcomm开头的设备,说明连接成功。
ADSP调试工具
高通提供了一套调试工具,叫 QDSP6 Debugger。它可以通过JTAG或USB连接到目标板的ADSP核心。
启动调试器:
qdsp6-debugger -t usb -c 0
这里 -t usb 指定连接方式为USB,-c 0 表示连接第0个核心(ADSP通常只有一个核心)。
加载和运行程序
连接成功后,你可以加载编译好的DSP程序:
qdsp6-debugger> load hello_hexagon
qdsp6-debugger> run
如果一切正常,你会看到程序在目标板上跑起来了,输出信息会通过串口或者ADSP的日志通道打印出来。
日志查看
ADSP的日志,通常通过 adb logcat 或者 QXDM 工具查看。我个人习惯用 adb logcat -s ADSP 来过滤ADSP相关的日志,这样不会和其他模块的日志混在一起。
adb logcat -s ADSP
如果日志太多,可以加上 -v time 显示时间戳,方便定位问题。
2.5 环境验证:一个完整的测试流程
环境搭好了,怎么确认一切正常?我建议你跑一个完整的测试流程:
- 在主机上编写一个简单的DSP程序(比如点灯或者打印)。
- 用Hexagon工具链编译。
- 先在模拟器上跑一遍,确认逻辑正确。
- 再通过调试器加载到目标板上运行。
- 查看日志,确认输出符合预期。
如果以上步骤都能顺利通过,恭喜你,开发环境搭建成功了!
- SDK版本必须与目标芯片匹配
- 工具链和模拟器要用同一个SDK包
- 模拟器是前期调试的好帮手,但最终验证必须上真机
- 目标板连接时,注意USB线和驱动问题
嗯,环境搭建这部分就讲到这里。下一章,咱们开始写第一个真正的ADSP程序,到时候你会感受到DSP编程和普通ARM编程的差异。准备好了吗?