Files
AskaEth 3d70a3dd2c 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 推卡自刷验收全绿
2026-09-03 12:16:01 +08:00

5.4 KiB
Raw Permalink Blame History

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 确认可读。