299 lines
14 KiB
Plaintext
299 lines
14 KiB
Plaintext
# S5ePAnim 交付前自证(全部只读;UTF-8)
|
||
# 生成时间 2026-10-02 22:34:54
|
||
# 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_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_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
|
||
|
||
==============================================================================
|
||
$ python tools/s5e_check_clip.py
|
||
==============================================================================
|
||
page max r outside px worst point
|
||
--------------------------------------------------------------
|
||
home 230.7 0 (275, 12)
|
||
help 230.7 0 (275, 12)
|
||
help_ok 230.7 0 (275, 12)
|
||
help_err 230.7 0 (275, 12)
|
||
confirm 238.4 0 (133, 453)
|
||
running 238.4 0 (133, 453)
|
||
about 232.3 0 (61, 92)
|
||
--------------------------------------------------------------
|
||
圆心 (240,240) 半径 240 画布 480x480 越界页数:0
|
||
EXIT=0
|
||
|
||
==============================================================================
|
||
ALL_STEPS_OK=True(5 步,0 步失败)
|
||
==============================================================================
|