- 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 推卡自刷验收全绿
5.4 KiB
5.4 KiB
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封装,等价于:# 示例: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 源码
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:
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直接放到应用目录即可,不触发安装期签名门: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。./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 确认可读。