高通 QNN android 端 htp签名问题

qq_37758850 2026-09-22 13:58:04

在QCM6690平台计划通过QNN将部分AI推理放入HTP优化耗时,已将模型转为context binary 离线测试通过,在线将算法库合入相机进程时,会遇到签名问题,报错的andorid log如下:

请问 我应该如何对 libQnnHtpV73Skel.so 进行量产签名,以保证在线运行ok?如有了解的帮忙 告知详细签名流程与所需信息,感谢!

我使用的工具链与平台信息如下:

SoC:QCM6690

HTP架构:V73

QAIRT版本:2.48.0.260626

文件:

libQnnHtpV73Skel.so

来源:

QAIRT_SDK_ROOT/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so

SHA-256:

561D69A9CD131918CB8E0A0E34AAFD0E94B3571B10317B0EE478DD137C74BC8C

...全文
138 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38498942 09-24 18:20
  • 打赏
  • 举报
回复

QAIRT 里默认走的是unsigned PD,要改成signed PD需要:把签名的DSP image 推到设备上,并在创建device时打开QNN_HTP_DEVICE_CONFIG_OPTION_SIGNEDPD 。这个QAIRT里没有,要看Hexagon SDK,按这个步骤:

  1. 先按setup 文档安装V73对应的Hexagon SDK,然后再按hexagon SDK的docs/readme.html完成环境配置:比如linux是
    source $HEXAGON_SDK_ROOT/setup_sdk_env.source 未签名的文件用 $QAIRT_SDK_ROOT/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so 先不要strip

  2. 用 elfsigner 做测试签名,在Hexagon SDK 里 tools/elfsigner/elfsigner.py :

    cd $HEXAGON_SDK_ROOT
    python tools/elfsigner/elfsigner.py -t <serial> -o ./output
    python tools/elfsigner/elfsigner.py \
    -i $QAIRT_SDK_ROOT/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so \
    -o ./output
    

    设备序列号可以通过 adb shell cat /sys/devices/soc0/serial_number 看。注意这是测试签名,量产设备要使用自己的正式密钥,这个正式key的流程需要给高通CE 提case ,应该是在线签名的。

  3. 把签名的image push到设备

    adb root
    adb remount
    adb push ./output/libQnnHtpV73Skel.so /vendor/lib/rfsa/adsp/
    adb push ./output/testsig-0x*.so /vendor/lib/rfsa/adsp/
    

    推上去之后不要再改这个 .so。CPU 侧的 libQnnHtp.so、libQnnHtpPrepare.so、libQnnHtpV73Stub.so 不经过 elfsigner,Stub 与 Skel 保持同一 QAIRT 版本

  4. 打开Singed PD,把下面的配置传给 QnnDevice_create

    QnnHtpDevice_CustomConfig_t customConfig;
    customConfig.option = QNN_HTP_DEVICE_CONFIG_OPTION_SIGNEDPD;
    customConfig.useSignedProcessDomain.useSignedProcessDomain = true;
    customConfig.useSignedProcessDomain.deviceId = 0;
    QnnDevice_Config_t devConfig;
    devConfig.option = QNN_DEVICE_CONFIG_OPTION_CUSTOM;
    devConfig.customConfig = &customConfig;
    const QnnDevice_Config_t* pDeviceConfig[] = {&devConfig, NULL};
    

    如果进程加载的是libQnnDsp.so,就需要在 QnnBackend_create 里把
    QNN_DSP_BACKEND_CONFIG_OPTION_USE_SIGNED_PROCESS_DOMAIN 设为 true。

7,727

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、IoT、PC 、XR、Auto等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
物联网人工智能开源 企业社区 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧