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

5.1 KiB
Raw Blame History

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(参考对比,未选)

qrcodegen(nayuki QR-Code-generator)— MIT

minimp3 — CC0

dr_mp3 0.7.4 — MIT/public-domain(参考对比,未选)

备注(工程)

  • 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。