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

请问 我应该如何对 libQnnHtpV73Skel.so 进行量产签名,以保证在线运行ok?如有了解的帮忙 告知详细签名流程与所需信息,感谢!
我使用的工具链与平台信息如下:
SoC:QCM6690
HTP架构:V73
QAIRT版本:2.48.0.260626
文件:
来源:
QAIRT_SDK_ROOT/lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so
SHA-256:
561D69A9CD131918CB8E0A0E34AAFD0E94B3571B10317B0EE478DD137C74BC8C
QAIRT 里默认走的是unsigned PD,要改成signed PD需要:把签名的DSP image 推到设备上,并在创建device时打开QNN_HTP_DEVICE_CONFIG_OPTION_SIGNEDPD 。这个QAIRT里没有,要看Hexagon SDK,按这个步骤:
先按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
用 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 ,应该是在线签名的。
把签名的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 版本
打开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。