Update embedded app debugging workflow
This commit is contained in:
1 parent
d50be29246
commit
38807e5f97
13 files changed
+846
-122
No files matched your search
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: embedded-app-pc-debug
|
||||
description: 用于 Windows 电脑端的嵌入式应用调试,包括远程编译、NFS 模块部署、开机进程与加密参数调试,以及设备发现、ROM 升级、串口监测和故障诊断。适用于 Eapil/CamTells 工作流;普通代码开发或仅查看已有日志时不要自动触发。
|
||||
description: 用于 Windows 电脑端的 Eapil 嵌入式产品与平台调试,包括远程编译、NFS 模块部署、设备发现、ROM 升级、串口监测和故障诊断;普通代码开发或仅查看已有日志时不要自动触发。
|
||||
---
|
||||
|
||||
# Windows电脑端调试
|
||||
@@ -11,16 +11,18 @@ description: 用于 Windows 电脑端的嵌入式应用调试,包括远程编
|
||||
|
||||
- 涉及远程编译、工程定位、软链接、下载产物时,读取 [references/build-workflow.md](references/build-workflow.md)。
|
||||
- 涉及 NFS 模块部署、`DxMain`、开机启动脚本、工厂模式或加密 param 时,读取 [references/application-debugging.md](references/application-debugging.md)。
|
||||
- 涉及 V1/V2 广播搜索、工厂/产测命令、统一配置、EPFP 文件传输、音视频协议或升级时,读取 [references/device-protocols.md](references/device-protocols.md)。
|
||||
- 涉及广播搜索、基础信息、EPFP 文件传输或升级时,读取 [references/device-protocols.md](references/device-protocols.md)。
|
||||
- 涉及串口监测、升级成功判据或故障定位时,读取 [references/validation-and-diagnostics.md](references/validation-and-diagnostics.md)。
|
||||
- 涉及 USB Wi-Fi、驱动加载、`wlan0`、关联、DHCP、PC 多网卡或网络恢复时,也读取 [references/validation-and-diagnostics.md](references/validation-and-diagnostics.md);需要运行中恢复网络服务时再读取 [references/application-debugging.md](references/application-debugging.md)。
|
||||
- 涉及 Linux 打包任务与 Windows 设备任务之间交接时,读取 [references/cross-host-coordination.md](references/cross-host-coordination.md)。
|
||||
- 涉及简道云“研发组 -> 固件发布”记录填写、预填或核对时,读取 [references/firmware-release.md](references/firmware-release.md)。
|
||||
|
||||
只读取当前任务需要的参考文件。不要因为用户仅要求串口查看而加载远程打包流程。
|
||||
|
||||
## 默认环境
|
||||
|
||||
- SSH 配置主机:`emb.eapil.com`
|
||||
- 远程工程搜索根:优先现有工作区、`~/work/develop/gitcode` 和实际挂载点;`/CamTells` 仅是兼容候选
|
||||
- 远程工程搜索根:优先现有工作区、`~/work/develop/gitcode` 和实际挂载点;产品目录(如 `/CamTells`)只是候选之一
|
||||
- 默认 Public 来源:`~/work/develop/gitcode/EMX2.1`
|
||||
- 本地归档根目录:`F:\tmp\embedded-app-pc-debug`
|
||||
- 串口默认值:`115200`、`8N1`、无流控
|
||||
@@ -30,17 +32,19 @@ description: 用于 Windows 电脑端的嵌入式应用调试,包括远程编
|
||||
## 工作方式
|
||||
|
||||
1. 根据用户请求确定需要执行的阶段;不强迫每次都完成整条链路。
|
||||
2. 自己调查文件、脚本参数、网卡和设备响应等可查事实,只向用户询问真正需要选择的事项。新设备调试开始前先枚举串口并让用户选择串口或 Telnet;即使只有一个 USB 串口也不自动打开。串口必须取得本次用户确认的 COM 口;Telnet 必须先取得完整 SN 和型号。
|
||||
2. 自己调查文件、脚本参数、网卡和设备响应等可查事实,只向用户询问真正需要选择的事项。新设备调试开始前先枚举串口并让用户选择串口或 Telnet;用户已明确选择串口时只确认尚缺的 COM 口,即使只有一个 USB 串口也不自行挑选。同一调试任务、目标和参数未变时复用已确认的 COM 口,不反复询问;更换设备、端口或目标不明确时重新确认。Telnet 必须先取得完整 SN 和型号。
|
||||
3. 将每次完整任务归档到 `<根目录>\<项目>\<YYYYMMDD-HHmmss>`,分别保存 `firmware` 和 `logs`。
|
||||
4. 搜索可以按型号、IP 或唯一响应列出候选,但这些条件都不能替代完整 SN。Telnet、升级及其他设备写操作必须以用户给出的完整 SN 精确匹配目标,并核对型号;多个候选或同一 SN 出现冲突时停止,不能默认第一台。
|
||||
5. 先启动串口监测,再执行设备升级;串口输出同时实时显示并保存日志。需要在网页中查看日志或向设备输入命令时,使用单进程串口网页控制台,避免采集进程和发送进程争用同一个 COM 口。网页首次打开显示最新日志,所有发送内容都写入文本日志,空输入也必须发送真实 `CR`。刷新网页不能中断采集;多个页面共用服务时仅关闭最后一个页面才触发停止。最后页面关闭后,即使处于升级期间,也要在约 `5` 秒内结束采集、保留日志并释放 COM 口;之后必须重新启动控制台才能再次连接。
|
||||
5. 先启动串口监测,再执行设备升级;串口输出同时实时显示并保存日志。默认使用可见的单进程串口网页控制台,先检查已有服务,正常则在同一页面复用,避免重复开窗口或启动第二个串口进程。网页首次打开显示最新日志,所有发送内容都写入文本日志,空输入也必须发送真实 `CR`。刷新网页不能中断采集;多个页面共用服务时仅关闭最后一个页面才触发停止。最后页面关闭后,即使处于升级期间,也要在约 `5` 秒内结束采集、保留日志并释放 COM 口;之后必须重新启动控制台才能再次连接。
|
||||
6. 在 ROM 传输前集中显示目标 SN、型号、IP、当前版本、ROM 绝对路径、大小、SHA-256、可解析的目标版本、串口状态和所有无法验证的项目。
|
||||
7. 只有用户在看到上述信息后明确确认升级,才能传输 ROM、烧录或触发重启。之前对搜索、编译或诊断的授权不能替代这次确认。
|
||||
8. 升级失败后先诊断并保留证据,不自动重试;再次升级需要新的明确确认。
|
||||
|
||||
串口优先不等于自动选择。用户选择串口后,只有端口打不开、无数据、乱码或无法登录时才建议回退 Telnet;切换前告知用户,Telnet 连接前重新广播核对完整 SN、型号和当前 IP。网络异常但串口可用时可以在用户确认 COM 口后做只读检查;设备写入、停止进程、修改启动项或重启前还需确认该串口对应的目标 SN 和型号。固件升级不得绕过协议身份核验。
|
||||
串口优先不等于自动选择。页面异常或无输出时,先按串口参考文档做本地只读诊断,设备静默不等于串口故障;确认端口打不开、占用或参数可疑后停手请用户核对,不反复重连。串口问题无法解决时可以建议 Telnet,但不能自动切换;切换前取得用户同意,Telnet 连接前重新广播核对完整 SN、型号和当前 IP。网络异常但串口可用时可以在用户确认 COM 口后做只读检查;设备写入、停止进程、修改启动项或重启前还需确认该串口对应的目标 SN 和型号。固件升级不得绕过协议身份核验。
|
||||
|
||||
用户如果只要求“显示串口”或“实时看日志”,仅打开只读串口监测;用户希望在页面持续查看时可以使用本地串口网页控制台,但不自动发送命令、搜索设备、登录、打包、传输文件或升级。
|
||||
用户如果只要求“打开串口”“显示串口”或“实时看日志”,默认由助手打开可见网页并只读采集,不把执行启动指令转交用户,不自动发送命令、搜索设备、登录、打包、传输文件或升级。用户明确选择终端或其他串口工具时尊重其选择。打开、复用、持续连接检查与异常诊断详见 [串口参考文档](references/validation-and-diagnostics.md)。
|
||||
|
||||
网页日志必须支持拖选和 `Ctrl+C` 复制。选择期间只暂停日志区域绘制与自动滚动,不中断串口采集、日志保存或页面存活连接;取消选择后恢复刷新。选区保护与真实浏览器验收要求见串口参考文档。
|
||||
|
||||
### 串口登录与凭据获取
|
||||
|
||||
@@ -51,6 +55,16 @@ description: 用于 Windows 电脑端的嵌入式应用调试,包括远程编
|
||||
- 登录失败一次后停止尝试,先核对当前提示阶段、键盘输入字符、设备型号/固件与配置来源。若无法由现有证据解释,不连续试密码,向用户报告并等待新的凭据或指示。
|
||||
- 不将真实密码、密钥或 Token 写入本 skill、脚本、示例、摘要或交付表格。按当前调试约定,原始串口日志保留发送记录;在复制、上传或转发日志前,先提醒用户检查其中是否含有凭据,并遵循该目的地的授权要求。不得为了分享而覆盖或改写原始证据日志。
|
||||
|
||||
## 远程项目持续调试与日志/源码排查
|
||||
|
||||
- 对所有产品线和平台工程的问题,默认沿用当前已建立的 SSH PTY 会话和远程工程目录;执行新命令前先检查既有会话是否仍有效。会话有效时直接在原会话操作,不要重复登录或新开终端。持续调试、修改或构建任务尚未完成时,保持该 SSH 会话存活,不主动退出、关闭终端或切换到新会话;如果工具或网络限制导致会话可能超时,优先采用该会话支持的保活方式,并在等待期间避免发送会改变设备状态的命令。若连接因外部原因失效,再按配置主机重新连接,并明确告知会话已重建。
|
||||
- 用户指定远程工程时,以该工程作为源码修改和构建的权威位置;本地仅保存必要的辅助工具、产物与证据,不另建源码副本作为实际修改入口。确需本地中转补丁时说明用途,应用到远端并核对差异后才能构建,不能把本地修改当作远端已生效。此规则适用于不同产品、芯片平台和项目目录结构,不以 CamTells 目录布局作为前提。
|
||||
- 远程排查前先确认用户给出的项目路径、分支/工作区和目标文件。先读取 `git status --short` 识别用户或前序任务已有修改;只触碰本次授权范围内的文件,保留其他未提交修改,不自动清理、还原或覆盖。
|
||||
- 用户要求“分析/排查”时先只读查日志和代码,不顺手修复。日志结论区分三类:日志直接事实、代码明确行为、尚未证实的推断;不要把同一时间出现的事件直接说成因果。
|
||||
- 先核验日志文件的修改时间、日志内部日期和用户指定时间是否相符。再截取事件前后上下文并过滤高频周期日志,避免截断或周期噪声掩盖真正事件。若证据文件日期/时间段不符,指出缺少对应证据,并只做可由现有源码支持的有限判断。
|
||||
- 代码改动遵守最小化原则,尊重原实现和调用顺序。先对照相邻代码,沿用类成员函数组织、命名、缩进、括号及格式化风格;已有逻辑按 `类名::函数名` 在类外实现时,不无故将同类职责分散为自由函数。新增代码说明职责、参数来源、关键分支及失败处理,不只逐行翻译语法。改动前后只检查目标文件 diff;不触碰其他现有修改。除非用户要求编译/验证,不擅自引入额外测试或部署;若未编译或设备验证,明确说明验证边界。
|
||||
- 面向最终报告列出关键时间点、原始日志现象、对应代码路径、判断可信度、仍缺失的证据,以及是否修改/编译/部署。不要把“代码路径可能导致”包装成“日志已证实”。
|
||||
|
||||
## Git 与构建边界
|
||||
|
||||
- 不执行编译前 `git status` 检查,不因未提交修改阻止打包。
|
||||
@@ -58,11 +72,11 @@ description: 用于 Windows 电脑端的嵌入式应用调试,包括远程编
|
||||
- 默认执行 `EmxGitInfo` 并保存输出作为版本凭证;失败时记录原因。临时验证包可继续,正式发布是否继续由用户决定。
|
||||
- 不使用旧 ROM 冒充本次产物。构建脚本若明确宣告 ROM 目标成功并验证了本次 ROM,之后仅辅助全量镜像步骤失败时,可以交付“仅供局域网升级的 ROM”,但不能声称完整发布包成功。
|
||||
|
||||
仅编译指定模块时,使用当前工程已确认的交叉工具链和模块构建目标,不强制走完整 ROM 打包流程,详见 [构建参考文档](references/build-workflow.md)。NFS 联调需保留用户配置,并核对实际运行文件、启动参数和依赖,详见 [应用调试参考文档](references/application-debugging.md);编译成功不能代替设备运行及功能验收。
|
||||
|
||||
## 工具脚本
|
||||
|
||||
- `scripts/v1_discover.py`:V1 UDP `4942` 搜索(`0x5A0EFF00/01`);可用 `--interface` 指定本机 IPv4。端口冲突时停止,不抢占进程。
|
||||
- `scripts/v1_command.py`:V1 TCP `4941` 通用 CMD/Data 请求器;默认仅预检,所有命令只有显式 `--execute` 才发送。它不解析每条命令的业务语义,副作用命令必须先查对应协议并核对设备身份。
|
||||
- `scripts/device_upgrade.py`:默认使用 V2 `30101` 身份预检;可用 `--protocol v1` 通过 V1 `0x5A0E2104` 核验后执行 EPFP/4001。V1 与 EPFP 的兼容性须由目标固件资料确认。缺少 `--execute` 时绝不连接升级端口或发送 ROM。
|
||||
- `scripts/device_upgrade.py`:V2 `30101` 身份预检与 `EPFP/4001` 升级。缺少 `--execute` 时绝不发送 ROM。
|
||||
- `scripts/serial_monitor.ps1`:无第三方依赖的 Windows 串口实时输出、原始字节保存和带时间戳文本日志。
|
||||
- `scripts/serial_web_console.ps1`:使用 Windows PowerShell 5.1 启动本地串口网页控制台;由单个进程独占 COM 口并同时负责接收、记录和发送,页面仅监听 `127.0.0.1`,写操作和关闭通知使用随机会话令牌。网页只提供用户主动输入和发送,不启动 U-Boot 持续按键或自动切换 A/B 分区。最后网页关闭后服务退出,不部署常驻管理进程或自动重连。必须用 `powershell.exe` 启动,不要改用 `pwsh.exe`。
|
||||
- `scripts/v2_discover.py`:枚举适合广播的 Windows IPv4 网卡,从每个接口的本地 `8951` 向设备 `8941` 发送 V2 广播,并严格筛选完整 SN/型号。
|
||||
@@ -79,3 +93,5 @@ description: 用于 Windows 电脑端的嵌入式应用调试,包括远程编
|
||||
不要把连接建立、ROM 发送结束、下载进度达到 100% 或 Flash 计数达到总量单独称为升级成功。至少需要明确的协议成功终态,并继续核对同一 SN 的重启、重发现、网络恢复和目标版本;无法取得某项证据时明确说明,不补造结论。
|
||||
|
||||
串口网页控制台发生变更时,还要验证服务代码能编译、Skill 结构有效、COM 口由单一进程占用、服务实际连接、接收字节或日志文件持续增长、普通发送与空回车都有 TX 记录,并确认页面首次打开定位到最新日志。还必须完成生命周期验收:刷新不中断、两个页面关闭一个仍运行、关闭最后页面后约 `5` 秒内进程退出且状态接口离线、日志具有结束标记、原日志与原始字节文件仍在原路径,并且下一次服务能重新打开同一 COM 口。仅看到服务进程或空白网页不算验证通过。
|
||||
|
||||
上述串口行为验收适用于服务或页面实现变更;仅修改技能文档时检查结构、引用及规则一致性,不为文档校验打断现有采集。报告区分代码检查、替身单测、真实串口协议测试和实际浏览器操作验收;未执行的项明确标注,不以自动化结果代替完整界面验收。
|
||||
Reference in new issue
Block a user