Files
MeowOS-For-R3P2/patch_v2/ncm_app/VENDOR_NOTES.md
T

71 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VENDOR_NOTES — os.meow.ncm 技术栈选型备查
> 预研:`patch_v2/ncm_app`(仅此目录)。库全部静态编入 mipsel(zig-mipsel-cc 交叉),
> 产物在 `out/`,各库构建脚本见 `build_*.sh`。体积口径:`size` Berkerley `text/data/bss`,
> mipsel 静态、`-Os`;flash≈text,RAM≈data+bss。基准:空 `printf` 静态 mipsel = text 5888。
> 实测于 2026-08-31。
## 选型结论(先看)
| 库 | 版本 | 许可 | mipsel text | 选/不选 |
|---|---|---|---|---|
| mbedtls(裁剪) | 3.6.2 | Apache-2.0 | 链接 Demo ≈ 388 KB(库文本合计 ~410 KB) | ✅ 选(TLS+AES/MD5/RSA/base64/X509 一体) |
| BearSSL | master@7bea48e | MIT | TLS client 参考子集 ≈ 96 KB | 备选(更省 flash,但集成面更杂) |
| jsmn | 1.1.0 | MIT | 2.2 KB | ✅ 选(解析器) |
| cJSON | 1.7.18 | MIT | 20.0 KB | 参考对比(未选,太大) |
| qrcodegen | nayuki@993ccbb | MIT | 10.8 KB | ✅ 选(二维码) |
| minimp3 | master@ea99364 | CC0 | 37.4 KB | ✅ 选(MP3 v1 解码) |
| dr_mp3 | 0.7.4 | MIT/public-domain | 40.7 KB | 参考对比(未选,质量更好但更大更吃内存) |
## 各库明细
### mbedtls 3.6.2(Mbed TLS)— Apache-2.0
- 上游:https://github.com/Mbed-TLS/mbedtls (tag mbedtls-3.6.2,commit 107ea89)
- 裁剪配置:`config/mbedtls_config_ncm.h`(由 `build_mbedtls.sh` 从默认 141 个 define 减到 102 个)。
保留:TLS1.2 client、AES-CBC/ECB/GCM、MD5、RSA(1024)+BIGNUM、PK/ASN1、X509 证书解析、Base64、PEM_PARSE、ECP/ECDH(P-256 等)。
裁掉:TLS1.3、全部 DTLS、PSA_CRYPTO/IS/LMS、CTR_DRBG/ENTROPY(用自定义 rng)、
CAMELLIA/ARIA/DES/CHACHA/CHACHAPOLY/CCM、HKDF/NIST_KW/ECJPAKE、PKCS5/7/12、PEM_WRITE、MD4、X509_CRL/CSR、
SSL_SESSION_TICKETS/ALPN/RENEGOTIATION/MAX_FRAGMENT/CTX_SERIALIZATION/KEEP_PEER_CERT 等。
裁剪说明:原默认配置裁剪前 `text` 更大;按 `config.py get`/`unset` 逐项减;`build_mbedtls.sh` 里列出清单。
- 产物:`out/mbedtls/mipsel/`(libmbedcrypto.a / libmbedx509.a / libmbedtls.a),
text 合计 420236(≈410 KB);实际链接 Demo(含 libc)text=397102(≈388 KB)。
- 为什么它覆盖了我们全部需求:`mbedtls_aes_crypt_ecb`(AES-128-ECB)、`mbedtls_aes_crypt_cbc`(CBC+PKCS7 手写)、
`mbedtls_md`(MD5)、`mbedtls_base64_*`、`mbedtls_rsa_public`(无 padding 纯模幂 = weapi)、`mbedtls_ssl_*`(TLS1.2 client)。
### BearSSL(TLS 备选)— MIT
- 上游:https://www.bearssl.org/git/BearSSL (GitHub `bearssl/bearssl` 已 404,已迁移至官方站点;commit 7bea48e,无语义化版本号)
- 构建:`build_bearssl.sh`(`make lib`,CC/AR 用 zig 包装;产物 `out/bearssl/mipsel/bm/libbearssl.a`)。
- 全库 text=317177(≈310 KB);但只取 TLS client+handshake+rsa+x509 并 `--gc-sections` 后 text≈98620(≈96 KB)。
- 特点:体积小、常量时间;但**库里没有 base64**(需自带 ~0.5KB 例程),
AES-ECB 也无现成封装(需用 block primitive 逐块或 CBC 变通),RSA raw 用 `br_rsa_i31_public`(已确认存在)。
- 结论:省 flash 的备选;v1 若集成想省事、且要保 weapi 精确性,仍以 mbedtls 优先。
### jsmn 1.1.0 — MIT
- 上游:https://github.com/zserge/jsmn(tag v1.1.0)
- header-only 分词器,无 DOM/无 malloc;编译为最小 TU 后 text=2208(≈2.2 KB)。
- 用于解析响应 JSON(如 `{"code":200,"unikey":"..."}` 取 unikey)。demo 已实测解析正确。
### cJSON 1.7.18 — MIT(参考对比,未选)
- 上游:https://github.com/DaveGamble/cJSON(tag v1.7.18)。text=20503(≈20 KB)。
- 优点:现成 DOM、好取值;缺点:20 KB + 需要 malloc、对 14MB 内存也偏大。选 jsmn。
### qrcodegen(nayuki QR-Code-generator)— MIT
- 上游:https://github.com/nayuki/QR-Code-generator(c/qrcodegen.c,commit 993ccbb)
- 纯 C 单文件、无图形依赖。text=11082(≈10.8 KB)。
- 用途:把 `https://music.163.com/login?codekey=<unikey>` 渲染成位图给 MeowOS UI 显示。
### minimp3 — CC0
- 上游:https://github.com/lieff/minimp3(master@ea99364)。header-only(minimp3.h + minimp3_ex.h)。
- 采用 `minimp3_ex`(带 ID3/CRC 处理、可 seek 的流式解码)text=38292(≈37.4 KB)。
- 用途:v1 播放(standard/higher = mp3 128/192k)。内存占用小、MIPS 单核可实时(见 benchmark)。
### dr_mp3 0.7.4 — MIT/public-domain(参考对比,未选)
- 上游:https://github.com/mackron/dr_libs(dr_mp3.h 单文件)。
- text=41679(≈40.7 KB);兼容性/音质更好,但更大、解码中间态内存更高。minimp3 更契合 14MB 限制。
## 备注(工程)
- mbedtls 产物默认写在 `vendor/mbedtls/library/`(3.6 的 Makefile 不理会 BUILD 变量),脚本再拷贝到 `out/`。
- `MBEDTLS_SSL_IN_CONTENT_LEN/OUT_CONTENT_LEN` 默认 16KB;对 14MB 也不大,可再按需调小(见 REPORT 内存估)。
- CA 根:demo 从 `/etc/ssl/certs/ca-certificates.crt` 加载;设备侧需内置 CA bundle(eapi 用 iPhone UA,域名 interface.music.163.com)。
- 恢复 mbedtls 默认 config:`git -C vendor/mbedtls checkout -- include/mbedtls/mbedtls_config.h`。