为什么需要你的帮助
QModem 已加入 AT fixture 回放框架,但开发者无法持有所有厂商和型号的真实模组。我们希望收集 Quectel、Fibocom、Foxconn、Gosuncn、Huawei、Meig、Neoway、Sierra、SIMCom、Telit 等 vendor 的真实 AT 输入与原始输出,用于:
长期目标:摆脱 Shell 实现的限制。 这些 fixture 不是只为当前 Shell 脚本服务,而是作为与实现语言无关的行为契约。未来将 vendor、拨号和解析逻辑迁移到其它语言时,新旧实现必须对同一 AT 输入和原始输出得到一致结果,从而量化验证迁移兼容性,而不是依赖真机人工回归。
- 在没有对应硬件时回归 vendor 解析逻辑;
- 防止修改 AT 指令或解析代码时引入兼容性回退;
- 逐步覆盖拨号、SIM、网络信息、信号、频段、锁频/锁小区等路径。
采集内容使用 xxd 保存为十六进制 response_hex,能够无损保留 CR/LF、空行、尾部换行和其它原始字节。默认打包会脱敏 IMEI、IMSI、ICCID、电话号码等长数字串。
如何采集
请使用包含 fixture 框架的最新 main 构建,并在设备上执行:
# 开启采集
uci set qmodem.main.testcase_collect=1
uci commit qmodem
# 通过 LuCI / ubus / CLI 操作你希望覆盖的功能
# 建议至少操作:基本信息、SIM 信息、网络信息、信号、拨号模式、网络偏好
qmodem_collect status
qmodem_collect pack
# 采集完成后关闭开关
uci set qmodem.main.testcase_collect=0
uci commit qmodem
默认编译选项会安装 qmodem-seal。qmodem_collect pack 默认脱敏并生成:
/tmp/qmodem_feedback_<时间戳>.tar
这个外层 tar 可以直接解压查看,包含公开的 manifest.json 和加密的 payload.enc。命令会同时显示本次反馈专用的 review password/key 和验证命令。请先用它解密得到 .tar.gz,检查实际响应和脱敏结果,确认只包含你愿意提交的信息,再把加密 .tar 上传到本 Issue。
加密用于保护公开上传和存储过程,不能代替提交者自己的内容检查。不要把 review key 和反馈包一起公开提交。
如果构建时没有选择可选组件 qmodem-seal,默认打包会醒目警告并降级为未加密 .tar.gz。也可使用 qmodem_collect pack --unencrypted 主动生成明文包。无论哪种情况,上传前都必须自行检查内容。
完整格式和开发机导入方式见 testcases/README.md。
请优先提交默认脱敏包。只有确认内容不包含隐私且确有排查需要时才使用 qmodem_collect pack --raw。不要公开提交包含真实 IMEI、IMSI、ICCID、手机号、账号密码或其它敏感信息的文件。
数据可能进入 testcase
提交反馈即表示其中合适的 AT 输入和响应可能被选入 QModem 仓库的 testcases/<vendor>/,用于公开的自动回归测试。
- 反馈者提交前必须解密并确认脱敏结果;
- 维护者选入 testcase 时会再次人工审阅并脱敏;
- 二次审阅是额外保护,不能替代反馈者提交前的检查;
- 不适合公开或无法可靠脱敏的内容不会加入 testcase。
建议覆盖范围
一次不需要覆盖全部功能,任何真实模组样本都有价值。尤其欢迎:
- 当前 fixture 覆盖为空的 vendor;
- 同一 vendor 的不同芯片平台、固件版本和拨号模式;
modem_dial、modem_util 使用的 SIM/PDP/CFUN/DNS 指令;
- 锁频、锁小区、双 SIM、5G LAN、流量统计等差异较大的功能;
- 已知解析异常或不同固件返回格式不一致的模组。
评论提交模板
GitHub 评论暂不支持自动回复模板。请复制下面内容填写,并将反馈包作为评论附件上传:
### 模组信息
- Vendor:
- 模组型号:
- 芯片平台:
- 固件版本:
- USB / PCIe:
- QModem 版本或 commit:
- OpenWrt 版本与设备型号:
### 本次覆盖
- 操作过的功能:
- 拨号模式(QMI/MBIM/ECM/NCM/RNDIS/其他):
- SIM 卡槽:
- 是否包含成功与失败响应:
### 数据说明
- 打包方式:默认加密并脱敏 / `--unencrypted` / `--raw`
- 已使用 review key 解密检查:是 / 不适用(未加密包)
- 已确认脱敏结果和附件内容:是 / 否
- 同意合适数据经再次审阅、脱敏后加入公开 testcase:是 / 否
- 附件:请拖拽上传 `qmodem_feedback_*.tar` 或明确检查过的未加密 `.tar.gz`
### 补充说明
- 返回格式异常、复现步骤或其它注意事项:
维护者处理流程
维护者会检查附件结构和脱敏状态。其他维护者如需处理加密反馈,只需从外层 tar 提取 manifest.json 并私下发给 identity token 持有者;token 持有者无需下载较大的 payload.enc,即可恢复该包的 review key 并通过私密渠道返回。
解密后,维护者使用 scripts/import_testcases.sh 导入,再次审阅和脱敏,运行 fixture/golden 测试,并通过 PR 合入 testcases/<vendor>/。如仍含敏感内容,会放弃样本或要求重新提交。
感谢每一份真实硬件数据。它会直接改善不同厂商、型号和固件之间的回归覆盖,也会为未来迁移到其它实现语言提供可验证的兼容性基线。
为什么需要你的帮助
QModem 已加入 AT fixture 回放框架,但开发者无法持有所有厂商和型号的真实模组。我们希望收集 Quectel、Fibocom、Foxconn、Gosuncn、Huawei、Meig、Neoway、Sierra、SIMCom、Telit 等 vendor 的真实 AT 输入与原始输出,用于:
采集内容使用
xxd保存为十六进制response_hex,能够无损保留 CR/LF、空行、尾部换行和其它原始字节。默认打包会脱敏 IMEI、IMSI、ICCID、电话号码等长数字串。如何采集
请使用包含 fixture 框架的最新
main构建,并在设备上执行:默认编译选项会安装
qmodem-seal。qmodem_collect pack默认脱敏并生成:这个外层 tar 可以直接解压查看,包含公开的
manifest.json和加密的payload.enc。命令会同时显示本次反馈专用的 review password/key 和验证命令。请先用它解密得到.tar.gz,检查实际响应和脱敏结果,确认只包含你愿意提交的信息,再把加密.tar上传到本 Issue。如果构建时没有选择可选组件
qmodem-seal,默认打包会醒目警告并降级为未加密.tar.gz。也可使用qmodem_collect pack --unencrypted主动生成明文包。无论哪种情况,上传前都必须自行检查内容。完整格式和开发机导入方式见
testcases/README.md。数据可能进入 testcase
提交反馈即表示其中合适的 AT 输入和响应可能被选入 QModem 仓库的
testcases/<vendor>/,用于公开的自动回归测试。建议覆盖范围
一次不需要覆盖全部功能,任何真实模组样本都有价值。尤其欢迎:
modem_dial、modem_util使用的 SIM/PDP/CFUN/DNS 指令;评论提交模板
GitHub 评论暂不支持自动回复模板。请复制下面内容填写,并将反馈包作为评论附件上传:
维护者处理流程
维护者会检查附件结构和脱敏状态。其他维护者如需处理加密反馈,只需从外层 tar 提取
manifest.json并私下发给 identity token 持有者;token 持有者无需下载较大的payload.enc,即可恢复该包的 review key 并通过私密渠道返回。解密后,维护者使用
scripts/import_testcases.sh导入,再次审阅和脱敏,运行 fixture/golden 测试,并通过 PR 合入testcases/<vendor>/。如仍含敏感内容,会放弃样本或要求重新提交。感谢每一份真实硬件数据。它会直接改善不同厂商、型号和固件之间的回归覆盖,也会为未来迁移到其它实现语言提供可验证的兼容性基线。