Files
o62lte-customising-plan/s5e-pressure-anim/docs/selfcheck_run.txt
T

348 lines
17 KiB
Plaintext
Raw Normal View History

2026-10-03 00:01:12 +08:00
਍# S5ePAnim 重建 + 自证 原始输出(2026-10-02 22:24:49)
# python: C:\Users\hi\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\python\python.exe
=== python tools\s5e_lua_static.py ===
ALL OK
=== tools/s5e_lua_static.py D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\main.lua (31141 B) ===
[1] 块配平
OK openers=202 end=202(function=90 if=99 for=11 while=1 do=1)repeat=0 until=0
[2] 先用后声明(真机上会变成 "call a nil value")
OK 没有"先调用后 local":
OK 没有未声明的被调用名:
[3] 模板约定(s5e_verify.py 靠这些从 .face 里反解 Lua)
OK 占位符 __UIIMG__ 出现 1 次(要 1)
OK 占位符 __PAY__ 出现 1 次(要 1)
OK 占位符 __RB__ 出现 1 次(要 1)
OK 占位符 __ROLE__ 出现 1 次(要 1)
OK 文件以 --[[-- 开头
OK --[[ 只出现 1 次(要 1,否则 verify 会从中间截 Lua)
OK 以 return ui\n 结尾
OK return ui\n 只出现 1 次(要 1)
OK 有 local UIIMG = {
[4] 与 s5e_verify.py 对齐的字面量
OK local ROLE = '__ROLE__'
OK local W, H = 480, 480
OK DEVS 里有 health -> /dev/health:health = "/dev/health"
OK DEV 来自 DEVS.health(表里的键名真的被用于取节点,不是摆设)
OK PAYTBL 里只有 __PAY__ / __RB__ 两处占位符(没有硬编码节点名)
OK 没有残留的 466(旧 S4e 尺寸)
=== 全部通过 ===
EXIT=0
=== python tools\s5e_payload.py replace ===
blob_replace/ 单条目: payload.bin 16238747 B + fp.bin 7630 B(119 条记录,跳过 0 条未变)
role=replace: emitted 119 records, 15.49 MB; dropped 0
EXIT=0
=== python tools\s5e_overlay.py replace ===
overlay written to D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\overlay\S5ePAnim
EXIT=0
=== python tools\s5e_build.py replace ===
=== S5ePAnim(role=replace,id=462150102)===
第 1 遍:用占位符编一次,量出资源在 .face 里的位置
| -------------------------------------------------------------------------------
| Patched face ID: 462150102
| Done: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnim\bin\S5ePAnim.face
| Generated: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnim\watchface\data\resource.bin
face 16444088 bytes
back off=0xf87a2e len=2100
ic_help off=0xf8a105 len=3856
ic_replace off=0xf8bf7c len=3856
ic_about off=0xf8828e len=3856
ic_check off=0xf891ca len=3856
ic_rollback off=0xf8ceb9 len=3856
ic_qq off=0xf8b03f len=3856
logo off=0xf8ddf2 len=25612
payload base=0x00b16a(16238747 B) / fp base=0x000205(7630 B),共 119 条记录
第 2 遍:回填后的 Lua(32814 bytes)重新编译
| -------------------------------------------------------------------------------
| Patched face ID: 462150102
| Done: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnim\bin\S5ePAnim.face
| Generated: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnim\watchface\data\resource.bin
偏移校验:全部吻合,0 漂移
忠实产物 vs toolchain:8 字节差异(只允许 b5 + id 这 8 个位置:[5, 40, 42, 43, 44, 46, 47, 48])
b4=0 b5=0 id=b'462150102\x00'
preview @0xf9d62c: 326x326 palette=1024 data=77538
交付物:D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\dist\S5ePAnim.face 16450844 B sha256 d0bb012a364fd46eb4bb27db26ead72ae3166060c72c08ec5a76670dc06a3b1c
EXIT=0
=== python tools\s5e_verify.py replace ===
==============================================================================
S5ePAnim(role=replace) D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\dist\S5ePAnim.face
==============================================================================
[1] .face 头
OK magic 5a a5 34 12
OK b4 = 0
OK b5 = 0(固件自带表盘 b5 也是 0)
OK id = b'462150102\x00'(期望 '462150102')
OK preview 326x326(Compiler.exe 对 462 设备强制 326x326)
OK preview 数据 77538 B @0xf9d638(文件尾 0xfb051c)
文件 16450844 B sha256 d0bb012a364fd46eb4bb27db26ead72ae3166060c72c08ec5a76670dc06a3b1c
[2] 从 .face 里反解加载的 Lua
OK 找到 Lua 结尾 "return ui\n"
OK Lua 提取成功(37900 B)
OK Lua 原样出现 1 次(偏移 0xf94220)
OK Lua 里的 ROLE == 'replace'
OK 占位符已全部回填
OK 界面尺寸 W,H = 480,480(480x480 圆屏)
OK DEVS 里有 health -> /dev/health:health = "/dev/health"
[3] 资源偏移(独立在 .face 里搜字节,不信 Lua 表)
OK payload 魔数(15 B)在 .face 里唯一
OK fp 魔数(14 B)在 .face 里唯一
OK payload.bin 原样连续存放在 0xb16a
OK fp.bin 原样连续存放在 0x205
OK 负载记录 119 条(期望 119)
OK payload.bin 16238747 B 在 .face 里逐字节连续
OK fp.bin 7630 B 在 .face 里逐字节连续
OK Lua 表 pay 119 条 / rb 119 条
OK Lua 表里的 119 条偏移 == 文件基址 + 魔数长度 + 相对偏移
OK 原厂 pressure/measure/ 下 119 个槽位
OK 原厂 usize 唯一且 == 1024 + 464*464 + 1 = 216321
[4] 逐条负载
OK 每条负载长度 == 原槽位长度(119 条)
OK 每条负载字节 == 改后镜像对应位置
OK 每条负载都能按 LVGL RLE 解出正好 usize 字节、解成 464x464
[5] 版本校验指纹
OK 119 条指纹都是 64 B 且 == 原厂镜像前 64 B
OK 119/119 条的"原厂前 64 B"与"改后前 64 B"确实不同(指纹有区分度)
[6] 改后镜像的完整性
OK inode 表(路径/偏移/next/spec/size/cksum)5555 条逐位不变
OK superblock 一致(size 206924736 / cksum b804503a)
OK 卷名 health 不变
OK 分区长度不变(206924800 B)
OK 改动只落在负载槽位区间内(首差 0x2c18618,末差 0x3b9d384,槽位区间 0x2c18600..0x3b9d385)
OK 119 个槽位全部都真的写入了新字节(未变的槽位:无)
[7] UI 图片
OK UIIMG 条目 8 条(期望 8)
OK 8 张界面素材都与 ui_images/*.bin 逐字节一致
[8] 体积
OK 交付物 15.69 MB < 20 MB
两张盘同 id:装一份就顶掉另一份,设备上只占一份空间
==============================================================================
S5ePAnim:38 项通过,0 项失败
全部通过 —— S5ePAnim.face(16450844 B,sha256 d0bb012a364fd46e)
EXIT=0
=== python tools\s5e_payload.py restore ===
blob_restore/ 单条目: payload.bin 16238747 B + fp.bin 7630 B(119 条记录,跳过 0 条未变)
role=restore: emitted 119 records, 15.49 MB; dropped 0
EXIT=0
=== python tools\s5e_overlay.py restore ===
overlay written to D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\overlay\S5ePAnimRestore
EXIT=0
=== python tools\s5e_build.py restore ===
=== S5ePAnimRestore(role=restore,id=462150102)===
第 1 遍:用占位符编一次,量出资源在 .face 里的位置
| -------------------------------------------------------------------------------
| Patched face ID: 462150102
| Done: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnimRestore\bin\S5ePAnimRestore.face
| Generated: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnimRestore\watchface\data\resource.bin
face 16444088 bytes
back off=0xf87a2e len=2100
ic_help off=0xf8a105 len=3856
ic_replace off=0xf8bf7c len=3856
ic_about off=0xf8828e len=3856
ic_check off=0xf891ca len=3856
ic_rollback off=0xf8ceb9 len=3856
ic_qq off=0xf8b03f len=3856
logo off=0xf8ddf2 len=25612
payload base=0x00b16a(16238747 B) / fp base=0x000205(7630 B),共 119 条记录
第 2 遍:回填后的 Lua(32814 bytes)重新编译
| -------------------------------------------------------------------------------
| Patched face ID: 462150102
| Done: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnimRestore\bin\S5ePAnimRestore.face
| Generated: D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\.work\build\S5ePAnimRestore\watchface\data\resource.bin
偏移校验:全部吻合,0 漂移
忠实产物 vs toolchain:8 字节差异(只允许 b5 + id 这 8 个位置:[5, 40, 42, 43, 44, 46, 47, 48])
b4=0 b5=0 id=b'462150102\x00'
preview @0xf9d62c: 326x326 palette=1024 data=77538
交付物:D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\dist\S5ePAnimRestore.face 16450844 B sha256 13cafae4bf2b03db82f2c17f9d3af7c7e8c01d0c26275feda301753a76ebda69
EXIT=0
=== python tools\s5e_verify.py restore ===
==============================================================================
S5ePAnimRestore(role=restore) D:\UserData\Documents\GitHub\o62lte-customising-plan\s5e-pressure-anim\dist\S5ePAnimRestore.face
==============================================================================
[1] .face 头
OK magic 5a a5 34 12
OK b4 = 0
OK b5 = 0(固件自带表盘 b5 也是 0)
OK id = b'462150102\x00'(期望 '462150102')
OK preview 326x326(Compiler.exe 对 462 设备强制 326x326)
OK preview 数据 77538 B @0xf9d638(文件尾 0xfb051c)
文件 16450844 B sha256 13cafae4bf2b03db82f2c17f9d3af7c7e8c01d0c26275feda301753a76ebda69
[2] 从 .face 里反解加载的 Lua
OK 找到 Lua 结尾 "return ui\n"
OK Lua 提取成功(37900 B)
OK Lua 原样出现 1 次(偏移 0xf94220)
OK Lua 里的 ROLE == 'restore'
OK 占位符已全部回填
OK 界面尺寸 W,H = 480,480(480x480 圆屏)
OK DEVS 里有 health -> /dev/health:health = "/dev/health"
[3] 资源偏移(独立在 .face 里搜字节,不信 Lua 表)
OK payload 魔数(15 B)在 .face 里唯一
OK fp 魔数(14 B)在 .face 里唯一
OK payload.bin 原样连续存放在 0xb16a
OK fp.bin 原样连续存放在 0x205
OK 负载记录 119 条(期望 119)
OK payload.bin 16238747 B 在 .face 里逐字节连续
OK fp.bin 7630 B 在 .face 里逐字节连续
OK Lua 表 pay 119 条 / rb 119 条
OK Lua 表里的 119 条偏移 == 文件基址 + 魔数长度 + 相对偏移
OK 原厂 pressure/measure/ 下 119 个槽位
OK 原厂 usize 唯一且 == 1024 + 464*464 + 1 = 216321
[4] 逐条负载
OK 每条负载长度 == 原槽位长度(119 条)
OK 每条负载字节 == 原厂镜像对应位置
OK 每条负载都能按 LVGL RLE 解出正好 usize 字节、解成 464x464
[5] 版本校验指纹
OK 119 条指纹都是 64 B 且 == 改后镜像前 64 B
OK 119/119 条的"原厂前 64 B"与"改后前 64 B"确实不同(指纹有区分度)
[6] 改后镜像的完整性
OK inode 表(路径/偏移/next/spec/size/cksum)5555 条逐位不变
OK superblock 一致(size 206924736 / cksum b804503a)
OK 卷名 health 不变
OK 分区长度不变(206924800 B)
OK 改动只落在负载槽位区间内(首差 0x2c18618,末差 0x3b9d384,槽位区间 0x2c18600..0x3b9d385)
OK 119 个槽位全部都真的写入了新字节(未变的槽位:无)
[7] UI 图片
OK UIIMG 条目 8 条(期望 8)
OK 8 张界面素材都与 ui_images/*.bin 逐字节一致
[8] 体积
OK 交付物 15.69 MB < 20 MB
两张盘同 id:装一份就顶掉另一份,设备上只占一份空间
==============================================================================
S5ePAnimRestore:38 项通过,0 项失败
全部通过 —— S5ePAnimRestore.face(16450844 B,sha256 13cafae4bf2b03db)
EXIT=0
=== python tools\s5e_verify_indep.py ===
==============================================================================
独立总校验(不读 blob_*/offsets.json、不读 .work/overlay、不读 .work/build)
交付物 : dist/S5ePAnim.face + dist/S5ePAnimRestore.face
固件 : inputs/target/vela_health.bin 206924800 B(卷名 health)
改后 : .work/anim/vela_health_anim.bin 206924800 B
==============================================================================
OK 固件里 pressure/measure/ 下 119 个槽位(期望 119)
OK 槽位名字就是 Measuring1..119.bin
------------------------------------------------------------------------------
[replace] S5ePAnim.face 16450844 B sha256 d0bb012a364fd46eb4bb27db26ead72ae3166060c72c08ec5a76670dc06a3b1c
------------------------------------------------------------------------------
OK magic
OK b5 = 0(固件自带表盘是 0)
OK b4 = 0
OK id = b'462150102\x00'
OK preview 326x326
OK Lua 在文件里只出现 1 次(偏移 0xf94220)
OK Lua 里的 ROLE == 'replace'
OK 占位符 __UIIMG__ 已回填
OK 占位符 __PAY__ 已回填
OK 占位符 __RB__ 已回填
OK 占位符 __ROLE__ 已回填
OK 界面尺寸 W,H = 480,480
OK DEVS 有 health -> /dev/health
OK UIIMG 8 条(期望 8)
OK pay 119 条 / rb 119 条(期望 119/119)
OK 两个魔数各命中 1 次(payload 0xb16a / fp 0x205)
OK 两张表的偏移自洽:首条紧跟魔数,之后逐条紧邻(0 处不连续)
OK rb 每条都是 64 B
OK 第 k 条负载的目标偏移 == Measuring{k}.bin 的偏移(0 处不符)
OK 每条长度 == 该槽位原厂长度,且 rb 的 target 与 pay 一致(0 处不符)
OK 119 个目标偏移全部 512 对齐
(97/119 条长度不是 4 的倍数 -> Lua 侧必须走 bs=512+4+1 分段写,否则退化成 bs=1)
OK 每条负载字节 == 改后镜像对应位置(0 处不符)
OK 每条负载都真的与"另一侧"不同(0 条与另一侧相同 —— 应当是 0)
OK 每条都是 I8(0x0a) + 压缩 + 464x464 + stride 464(0 条不符)
OK 每条 RLE 解出**恰好** usize=216321 且 1024+464*464 之后正好 1 字节尾巴(0 条不符)
OK 119/119 条的"原厂前 64 B"与"改后前 64 B"确实不同
OK rb 的 target 也指向对应槽位
OK 8 张界面素材与 ui_images/*.bin 逐字节一致(0 处不符)
------------------------------------------------------------------------------
[restore] S5ePAnimRestore.face 16450844 B sha256 13cafae4bf2b03db82f2c17f9d3af7c7e8c01d0c26275feda301753a76ebda69
------------------------------------------------------------------------------
OK magic
OK b5 = 0(固件自带表盘是 0)
OK b4 = 0
OK id = b'462150102\x00'
OK preview 326x326
OK Lua 在文件里只出现 1 次(偏移 0xf94220)
OK Lua 里的 ROLE == 'restore'
OK 占位符 __UIIMG__ 已回填
OK 占位符 __PAY__ 已回填
OK 占位符 __RB__ 已回填
OK 占位符 __ROLE__ 已回填
OK 界面尺寸 W,H = 480,480
OK DEVS 有 health -> /dev/health
OK UIIMG 8 条(期望 8)
OK pay 119 条 / rb 119 条(期望 119/119)
OK 两个魔数各命中 1 次(payload 0xb16a / fp 0x205)
OK 两张表的偏移自洽:首条紧跟魔数,之后逐条紧邻(0 处不连续)
OK rb 每条都是 64 B
OK 第 k 条负载的目标偏移 == Measuring{k}.bin 的偏移(0 处不符)
OK 每条长度 == 该槽位原厂长度,且 rb 的 target 与 pay 一致(0 处不符)
OK 119 个目标偏移全部 512 对齐
(97/119 条长度不是 4 的倍数 -> Lua 侧必须走 bs=512+4+1 分段写,否则退化成 bs=1)
OK 每条负载字节 == 原厂镜像对应位置(0 处不符)
OK 每条负载都真的与"另一侧"不同(0 条与另一侧相同 —— 应当是 0)
OK 每条都是 I8(0x0a) + 压缩 + 464x464 + stride 464(0 条不符)
OK 每条 RLE 解出**恰好** usize=216321 且 1024+464*464 之后正好 1 字节尾巴(0 条不符)
OK 119/119 条的"原厂前 64 B"与"改后前 64 B"确实不同
OK rb 的 target 也指向对应槽位
OK 8 张界面素材与 ui_images/*.bin 逐字节一致(0 处不符)
==============================================================================
[互证] 两张交付物互相印证(完全不碰 .work / 固件镜像)
==============================================================================
OK 两张盘字节数相同(16450844)
OK 头 50 B(magic / b4 / b5 / id)逐字节相同
OK replace 的负载前 64 B == restore 的指纹;restore 的负载前 64 B == replace 的指纹(0 处不符)
OK 两张盘的 8 张界面素材逐字节相同(同一套界面)
OK 两张盘的资源基址相同(0xb16a / 0x205)
OK 119/119 条负载在两张盘里都不一样(119)
==============================================================================
[镜像] 改后镜像 vs 原厂镜像
==============================================================================
OK inode 表(路径/偏移/next/spec/size/cksum)5555 条逐位不变
OK superblock 与卷名不变(size 206924736 / cksum b804503a / 'health')
OK 分区长度不变(206924800 B)
OK 除 119 个槽位外,其余 5275 个文件的字节**逐字节**不变(0 处不符)
OK 变化区间 0x2c18618..0x3b9d384 完全落在槽位区间 0x2c18600..0x3b9d385 内
OK 119 个槽位全部被改写(未变的:无)
==============================================================================
独立总校验:70 项通过,0 项失败
==============================================================================
EXIT=0
ALL_STEPS_OK=True