公司动态
AI语音智能体开发日记(一)如何为“小智”服务器启用并调试 License 功能
相关链接AI语音智能体开发日记一如何为“小智”服务器启用并调试 License 功能-CSDN博客AI语音智能体开发日记二解决 Wi-Fi 配网小程序的兼容性问题-CSDN博客AI语音智能体开发日记三解决小程序配网中的蓝牙命名与MAC地址获取问题-CSDN博客AI语音智能体开发日记四在FreeRTOS中构建线程安全的UART2通信模块-CSDN博客AI语音智能体开发日记五为智能设备注入“灵魂”——详解MCP工具的注册与使用-CSDN博客AI语音智能体开发日记六为智能体注入旋律——七牛云音乐服务的接入与避坑指南-CSDN博客AI语音智能体开发日记七搞定功放控制——详解GX8006平台Mute电平配置-CSDN博客AI语音智能体开发日记八LVGL 8.4.0 移植实战——从零构建嵌入式GUI-CSDN博客AI语音智能体开发日记九LVGL 8.4.0 中文字体配置全攻略-CSDN博客AI语音智能体开发日记十LVGL 图标字体实战——从 FontAwesome 到屏幕显示-CSDN博客AI语音智能体开发日记十一为智能设备“声”临其境——详解音频资源自动化生成流程-CSDN博客AI语音智能体开发日记十二GX8006 固件定制指南——从双唤醒词到 UART 音频传输-CSDN博客AI语音智能体开发日记十三一次由寄存器溢出引发的串口波特率“玄学”问题排查-CSDN博客推荐链接AI语音智能体架构解析一系统架构全景图-CSDN博客AI语音智能体架构解析二大模型AI 的大脑-CSDN博客AI语音智能体架构解析三智控台指挥中心-CSDN博客AI语音智能体架构解析四AI 语音终端执行器官-CSDN博客AI语音智能体架构解析五小程序/APP遥控器-CSDN博客推荐链接AI 应用 图文 解说 (一) -- 百度智能云 实现 语音 聊天-CSDN博客AI 应用 图文 解说 (二) -- 百度智能云 ASR LIM TTS 语音AI助手程序 -CSDN博客开发笔记如何为“小智”服务器启用并调试 License 功能在嵌入式开发中集成第三方服务如“小智”语音助手时License 授权验证是绕不开的一环。最近在处理 某芯片AI语音智能体项目时我整理了一下的 License 功能开启、调试及恢复流程。这篇博客将详细记录从修改 CMake 配置、编写代码逻辑到通过串口工具获取和写入密钥的全过程希望能帮助遇到同样问题的开发者。1. 项目配置指定服务器与开启宏定义首先我们需要在编译配置中明确指定服务器实现为“小智”并打开 License 相关的功能开关。第一步修改 CMakeLists.txt打开项目根目录下的CMakeLists.txt文件找到服务器实现的配置部分。我们需要将SERVER_IMPL设置为xiaozhi。1# 选择服务器实现 2set(SERVER_IMPL xiaozhi)注意确保注释掉其他服务器如 qiniu的配置以免冲突。第二步开启 License 宏在project/ln_model_public/app/common.h文件中我们需要定义 License 相关的宏。将CONFIG_LICENSE_ENABLE的值设为1。1// common.h 2#define CONFIG_LICENSE_ENABLE (1) 3#define CONFIG_LICENSE_ERASE (0) 4#define CONFIG_OTA_ENABLE (0)2. 代码逻辑植入检查与条件编译配置修改完成后我们需要在应用代码中植入检查逻辑并确保“小智”特有的接口被正确调用。在usr_app.c中启动检查在用户应用任务创建函数creat_usr_app_task中加入 License 检查代码。如果检查失败程序应直接返回阻止后续运行。1// usr_app.c 2void creat_usr_app_task(void) 3{ 4 // ... 其他初始化代码 ... 5 6 #if defined(CONFIG_LICENSE_ENABLE) CONFIG_LICENSE_ENABLE 7 // 启动 License 检查如果返回 false 则终止 8 if (!cli_license_check()) return; 9 #endif 10 11 // ... 后续业务逻辑 ... 12}在server_interface.h中适配接口为了让编译器识别cli_license_check函数我们需要在server_interface.h中添加条件编译。只有当定义了CONFIG_SERVER_IMPL_XIAOZHI时才声明该函数否则提供一个空的 inline 实现以避免编译错误。3. 调试阶段绕过验证进入写入模式这是最关键的一步。为了能够向设备写入新的序列号Serial Num和密钥License Key我们需要暂时“欺骗”系统让它认为当前的 License 是无效的从而进入激活/写入模式。修改cli_license.c打开project/ln_model_public/app/servers/xiaozhi/cli_license.c。找到cli_license_check函数注释掉is_license_key_valid()的判断逻辑。将这句license_key判断注释掉否则无法进入小智的串码写入模式4. 硬件调试读取 MAC 与 写入密钥代码编译下载后我们需要通过串口调试助手如 SSCOM与设备交互。步骤 A确认进入激活模式使用921600波特率打开串口。如果看到如下日志说明我们成功绕过了验证进入了激活等待状态[cli_license_check:441] license key is invalid, start to activate[ate_cli_thr_entry:373] start步骤 B获取设备信息将波特率切换为1000000下载口波特率发送查询指令查询 MAC 地址发送ATMAC?返回示例MAC:00:50:19:81:c9:bb查询当前密钥状态发送ATSER_KEY?此时会返回设备当前的SER_NUM和LIC_KEY如果是新设备可能是默认值或空。步骤 C生成并写入新的 License如果你还没有对接官方的商务流程可以使用官方提供的测试链接生成临时密钥测试生成地址https://xiaozhi.me/api/developers/generate-license...(需替换 token)写入指令格式ATSER_KEY设备序列号,授权密钥实际示例举例00:50:3b:66:d4:aAATSER_KEYLN882H_AI_BOX_1_03522700A30980BF,7PMBsN2WugX6QdHfUhWKWaykEoQgUQ3W发送指令后若返回OK则说明写入成功。5. 最终发布恢复代码保护调试完成后千万不要直接发布当前的代码必须回到cli_license.c将第 3 步中注释掉的is_license_key_valid()判断恢复。1// 恢复后的代码 2if (is_license_key_valid()) return -1;这样设备在下次启动时就会严格执行 License 校验确保产品的安全性。