P1-1 内存账没算全:高档解码时低档还占着槽,但门控/预留只按新图算。 - 高档请求携带发起时的常驻快照(page_req.resident),解码前按 「常驻 + reader_estimate_peak()」算这次操作的总峰值,上限 MR_TIER_TOTAL_CAP (12MB,与 page_source 的绝对上限同值;常态 3MB 只约束 stb 回退路径, 后端页本来就超 3MB 且已被 M27 放行),超了跳过高档、保留低档(skip=coexist)。 - 峰值本身靠调度压回基线:分页模式焦点页还是低档时不预取邻居(预取来会被 换清晰腾掉),换清晰前 slots_reserve 腾掉非可见页,高档只与焦点低档共存。 B8(--wrap malloc,两实例并行):max_live_delta 3250KB→550KB, 绝对峰值 5279KB→3932KB(基线 3929KB)。 P1-2 换清晰挤掉预取:换清晰后不重跑窗口,邻居洞留到下次翻页(0/8 命中、4 次/页)。 - 新增每页 in-flight 去重(g_req_inflight):请求被 worker 取走后不再被窗口刷新重排, 这是重复解码/挤掉邻居的根因之一。 - 高档落位后按最近一次翻页方向补回邻居(sharpen_refill);反方向不补(3MB 常驻 上限下放不下,必然再被挤掉)。 - 真机几何探针(480×720,1280×2275 JPEG,8 次 700ms/页):0/8→8/8 命中, 4→1.5 次解码/页。B8 顺序 100 页:100/100 命中、149 次解码(1.49/页)。 P2-1:B8 改成 101 页册顺序前翻 100 次(每页都是不同的下一页),4MP/12MP 夹具 真正成为焦点页;断言最后一页=100、命中率 ≥90%、解码 ≤2/页+余量。 P2-2:B10 去掉恒真的 slot_kb 比较,改断言「总常驻不增加」+「高档操作增量 ≤3MB」+ 「两档共存绝对峰值有界」;补双击放大后换清晰不重置缩放/平移、条漫滚动位置不变。 P2-3:B10 整串生命周期解码次数 ≤12(实测 7);B8 解码次数上限。 夹具用硬链接(同文件系统),避免多页册真拷贝几百 MB。 顺带:MR_SHARPEN_MS 200→150(任务允许 150–300ms,给「换清晰→补邻居」留翻页余量); 新增宿主观察口 flip_hits/misses、zoom/pan/woff(只读)。
tuku(os.meow.picbrowser)打包与签名
图库 App(系统包名 os.meow.picbrowser)。构建与打包:
./build_tuku.sh # 交叉编译 picbrowser(MIPS32r2 静态)
./pack_tuku.sh # 打包 → os.meow.picbrowser.mpk(根布局;未签名)
浏览交互(文件管理器模型,M18)
- 列表 = 当前目录一层的子目录 + 受支持图片(png/jpg/jpeg/bmp)+ 档案册(.cbz/.zip);
目录优先,组内自然序(大小写不敏感,同键按原始字节兜底,
A.jpg/a.jpg不抖动)。 - 点目录 = 进入(空目录也进);点图片 = 从该图开始读(按文件名交给阅读器,
由阅读器的全量目录册定位起始页——列表被
MR_LIB_SCAN_MAX截断时也不会点错图); 点档案册 = 打开档案册(第 1 页/续读)。 - 单目录超过 2000 项时列表只显示前 2000 项并给出「已截断」提示行;图片仍可进入阅读器翻到。
- 缩略图功能已关闭:行内只有类型图标 + 文件名 + 类型·大小;首帧只做单层
opendir/readdir + lstat,滚动/点击路径不解码、不访问文件、不重排字符串。 - 浏览根锁定 TF 卡根(
/usr/data/mnt/sd_0):根目录不显示返回箭头,左缘返回 = 退出 App; 不允许上溯到 SD 卡的上级目录。 - 根目录不可访问(未插卡/挂载失败)→ 友好空态「未检测到 SD 卡」;点顶栏刷新或重进页面即重扫, 不弹错、不崩溃。
一键签名出包
MEOW_SIGN_KEY=/path/to/signing.key ./pack_tuku.sh
- 工具查找顺序:
$MEOW_SIGN→PATH里的meow_sign→$HOME/Proj/MeowOS-For-R3P2/patch_v2/meow_sign/meow_sign。 - 私钥:
$MEOW_SIGN_KEY。未设置时脚本警告并仍产出未签名包(退出码 0);但os.meow.*系统包无签名会被设备拒装。 - 有工具 + 密钥时执行
meow_sign sign <mpk> <key>;若存在<key>.pub再执行meow_sign verify <mpk> <key>.pub。 - 私钥不入库、不随包分发;本仓不包含任何密钥材料。
mpk 布局
.mpk = tar.gz,条目直接在根层:
os.meow.picbrowser.mpk
├── app.json
├── picbrowser
└── <signature footer> # 仅签名包有(Ed25519,尾部追加)
即 tar -C build/os.meow.picbrowser -czf os.meow.picbrowser.mpk app.json picbrowser——
不带 os.meow.picbrowser/ 目录前缀,也不带 ./ 前缀。脚本在签名前用 tar -tzf 断言这一点。
签名是往 tar.gz 尾部追加 footer,签名后的 mpk 不要再跑 tar -t / gzip 之类的命令:
gzip 会报 trailing garbage ignored,属预期现象,不是包损坏。要检查布局请在签名前做。
安装
把 .mpk 放到设备 TF 卡,执行 nyai install os.meow.picbrowser.mpk;
os.meow.* 包必须验签通过(footer.package == 文件名茎 == app.json.package)。