feat: M6.10–M6.19 批量收编 + M6.19 推卡验收

- M7 launcher 重写 5 期(虚拟化宫格/meow_theme 单一权威/横幅动画/自定义 PIN 键盘)
- OOM 通用化(cachegov 上收 SDK)、自动切歌根治、meowpanel jv_free 泄漏修复、Hello 滚动卡顿修复
- ncm 歌词 UI / 媒体通知封面 / 封面分辨率 640
- 5 bug 修复:ncm 后台化 UI 叠层+点击穿透、再进 ncm 桌面叠层、播放页新旧 UI 叠层抢刷脏区(meow_ui_gfx 恢复边沿整帧重画)、PIN 亮屏亮度跳(keys.c meow_panel_on 按 settings_brightness_clamped 恢复)、通知中心封面显歌单封面(cover.c save_cover_raw 加 is_song + 命中块守卫)
- 四 App 统一重链新 meow_ui.a 51caee4a;M6.19=0.8.19 固件 2d2331f2 推卡自刷验收全绿
This commit is contained in:
AskaEth committed 2026-09-03 12:16:01 +08:00
1 parent c2ee7626a4
commit 3d70a3dd2c
176 files changed
+15507 -597

No files matched your search

+85
View File
@@ -0,0 +1,85 @@
# README_LGPL_RELINK — 如何替换 libmobi 并重新链接阅读器(LGPL-3.0 relink)
`os.meow.reader` 静态链接 **libmobi**(LGPL-3.0)。LGPL-3.0 §4(d) 要求以「允许用户在替换 libmobi 后重链」的方式提供源码(§4(d)(0))。本文件给出完整重链步骤:获取工具链 → 替换 libmobi 源码 → 重链 → 装回设备。**本操作可自行修改 libmobi 并重编,不触犯任何许可证限制;修改 libmobi 部分的衍生成果仍受 LGPL-3.0 约束(但不会被强制整体 GPL)。**
## 0) 相关文件与源码位置
| 内容 | 位置 |
|---|---|
| 阅读器自有源码 | 主仓:`https://git.yeij.top/AskaEth/MeowOS-For-R3P2.git`(`patch_v2/reader_app/`,Apache-2.0) |
| libmobi 源码(锁定 commit) | `https://github.com/bfabiszewski/libmobi`,commit `906274205c11944b628da1c553b255acb1af7c55`(2024-10-29);`build_reader.sh` 的 `LM_URL` 即指向该 SHA |
| 重链构建脚本 | `patch_v2/reader_app/build_reader.sh`(可复现构建 + qemu-mipsel 冒烟) |
| 合规材料(随 .mpk 分发) | `patch_v2/reader_app/resources/licenses/`(`NOTICE` + `GPL-3.0.txt` + `LGPL-3.0.txt`) |
> 主仓公开性:`git ls-remote https://git.yeij.top/AskaEth/MeowOS-For-R3P2.git` 可匿名读到 HEAD,即公开可克隆(见 NOTICE「Source availability」)。若看不到,说明镜像/网络受限,请从维护者获取。
## 1) 获取 mipsel 交叉工具链(两种方式)
阅读器是 **mipsel / musl 静态软浮点 (sf)** 目标。构建用的是本地 `.tools/`(gitignored,不入仓),接收者需自行准备等价工具链:
- **方式 A(推荐,zig 单文件)**:下载 zig(`zig cc` 支持 `-target mipsel-linux-musl`,静态软浮点)。本项目用 `zig-mipsel-cc` 封装,等价于:
```sh
# 示例:zig-0.12+;把 zig 解压后设 ZIG 路径
# zig cc -target mipsel-linux-musl -static ...
```
- **方式 B(musl 交叉编译套件)**:安装 `mipsel-linux-muslsf-cross`(如 musl.cc 发布的 `mipsel-linux-muslsf-cross`),得到:
```
$ROOT/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf # sysroot/lib等
```
`$ROOT = $HOME/Project/R3ProII`(build_reader.sh 内 `ROOT` 变量,可改)。
若本地已有 `.tools/`,重链无需再装。
## 2) 替换 libmobi 源码
```sh
cd "$HOME/Project/R3ProII/patch_v2/reader_app"
# 拉取你想要的 libmobi(或用 build_reader.sh 自动拉锁定 commit)
# 用锁定 commit 拉取:
curl -fsSL -o /tmp/lm.tgz \
"https://codeload.github.com/bfabiszewski/libmobi/tar.gz/906274205c11944b628da1c553b255acb1af7c55"
rm -rf vendor/libmobi && mkdir -p /tmp/lm_m && tar xzf /tmp/lm.tgz -C /tmp/lm_m --strip-components=1
mkdir -p vendor/libmobi && cp -r /tmp/lm_m/src vendor/libmobi/src && cp /tmp/lm_m/COPYING vendor/libmobi/COPYING
# 然后在此处对 vendor/libmobi/src/*.c 做你的修改
```
## 3) 强制重编 libmobi 目标文件 + 重链
`build_reader.sh` 对 `vendor/libmobi/src/*.c` 有「已存在 .o 跳过」缓存(`vendor/build/lm_*.o`),替换源码后**必须清掉**旧目标文件再重跑,否则不会重编 libmobi:
```sh
rm -f vendor/build/lm_*.o
./build_reader.sh # 全量:编 libmobi/miniz/stb/freetype + 链接 reader + qemu-mipsel 冒烟
```
- 产物:`./reader`(mipsel 静态 ELF)。
- 需要 `qemu-mipsel`(跑冒烟单测);宿主 core/loader 单测用 `gcc`。
- 若只想重链不跑测试,可手动执行 `build_reader.sh` 第 7 步的链接命令(见脚本注释),但建议跑全套以保正确。
## 4) 装回设备(两种方式)
- **方式 A(宽松,最直接;启动路径不验签)**:launcher 重扫 `MeowAPPs/` 后直接运行二进制,故把重链后的 `reader` 直接放到应用目录即可,**不触发安装期签名门**:
```sh
scp ./reader root@<设备IP>:/usr/data/mnt/sd_0/MeowAPPs/os.meow.reader/reader
ssh root@<设备IP> 'chmod 755 /usr/data/mnt/sd_0/MeowAPPs/os.meow.reader/reader'
# 若在跑,重开阅读器;MeowAPPs 热更即生效
```
- **方式 B(走官方 .mpk + 签名 + nyai 安装)**:`os.meow.*` 包无签会被 `nyai`/launcher 拒装,故需用 `.keys/signing.key` 签名(仅维护者持有私钥)。接收者的本地重链一般走方式 A。
```sh
./pack_reader_mpk.sh # 产 os.meow.reader.mpk(含 resources/licenses/)
../meow_sign/meow_sign sign os.meow.reader.mpk "$HOME/Project/R3ProII/.keys/signing.key"
scp os.meow.reader.mpk root@<设备IP>:/data/
ssh root@<设备IP> 'nyai install /data/os.meow.reader.mpk'
```
## 5) 修改自由度说明(LGPL 敏感点)
- 安装期签名校验只针对**未签名/无有效签**的 `.mpk` 安装;**启动路径**是 launcher 直接运行 `MeowAPPs/<pkg>/` 下的二进制(`README.md:259` 热更语义),对重链后的二进制**不做运行时验签**,改造自由度未被结构性封死。
- 重链产物请**保留 `resources/licenses/` 随包**(含 GPL-3.0 + LGPL-3.0 全文 + NOTICE),并保留 libmobi 版权声明。
- 你对 libmobi 的修改形成衍生作品:其自身仍按 LGPL-3.0 提供;把修改后的 libmobi 重新分发时应随附相应源码(按 LGPL §4 履行,本仓库的重链脚本 + 锁定的 `LM_URL` 即可复现)。
## 6) 校验
- `file ./reader` 应显示 `ELF 32-bit LSB executable, MIPS, ... statically linked, ... soft-float`。
- `tar tzvf os.meow.reader.mpk` 应含 `resources/licenses/{NOTICE,GPL-3.0.txt,LGPL-3.0.txt}`。
- 真机打开一本 MOBI 确认可读。