正常
Note 116 · panthor M2n:真壁纸全屏显示达成——扫描输出布局双写者冲突根修
日期:2026-09-12 · 战役七第三十五篇 · 上一节:note 115(顶点形态 E)
0. 摘要
🏆 M2n「真壁纸全屏显示」达成(两段式验收完整走完:verify_screen 数值 PASS + 用户亲眼确认)。bg_p90=1.3 / st_p50=9.5 / offset=[0,0,0] ——屏幕与 warty-final-ubuntu.png 像素级吻合。最后一程两个根修: ①扫描输出布局=bf=12 线性头(我们的镜像重铺写+VOP 解码一直用 bf=13 tiled——自洽但与 mutter 复合 job 的线性 body 区错位 0x800、 整片互踩=屏顶带损伤真身);②半尾 tile 补写(600÷16=37.5 整除 截断,第 38 排 tile 从未被铺=底 8 行黑条+绿斑)。
1. 破案链(用户眼睛两次定向)
- 用户看 staging_now.png:「能认出,但偏移了一些像素、左侧内容循环 到右侧」+ screen:「混乱错位、中间右上稍重复」→ 重复=页别名线索。
- 亮结构测量:好 boot 的 staging 亮点与 warty 100% 重合于原位 (5776=5776,dx=dy=0)——staging 干净;但屏分毫不变(33.7 恒定) → 损伤在快照之后的写读链。
- bg_screen dump(STGDUMP):顶部也完美(mad 0.4-4)→ 损伤锁定在 扫描输出写→VOP 读这一环。
- 屏顶行识别:屏行 5-75 显示的是参照 ~490 行的内容=区域性位移。
- 双写者布局冲突定谳:rjob 复合 job 对扫描输出实测 bf=12(线性 头);我们的 fullres 镜像写+VOP 解码用 bf=13(tiled 头)。各自 自洽(底 92% 正确),但线性 body_base=bp+ty·stride 与 tiled body_base=bp+align4096(tx·ty·16) 相差 0x800——mutter 复合的 2.4MB body 整片覆写我们的 body 区,受损区=greeter 顶带 damage 条带位置。
- 改线性(写读同切)→ PASS(1.3/9.5)→ 用户确认壁纸成形。
- 用户复检:「底部黑横条+中间绿斑」→ 精确定位 y592 绿线(0,232,15) +y594-597 黑=最后一排半高 tile 未写(ty5=sh/16 截断)→ 补写 (越界行钳制到 591 行,VOP 显示侧自带行钳制)→ 底 8 行 Δ0.4-0.8、 黑绿零 → 用户确认达成。
2. 两处根修(rk3588-lite.c)
- fullres 镜像写 + VOP 解码切线性:
rk3588_afbc_hdr(...,false)、rk3588_afbc_body_base(...,false)、VOP iova=fb_mst+by·0x400+bx·16(1024 宽时 64×16=0x400 与旧 tiled stride 巧合同值——头布局不同)。 rjob 复合写本就线性=两写者同布局,逐 tile 相干。 - ty5=(sh+15)/16 补半尾 tile:写侧行号
MIN(sh-1, by·16+yy)钳制。
3. 验收记录(note 113 协议:机器判据→人眼终审)
| 阶段 | bg_p90 | st_p50 | 人眼 |
|---|---|---|---|
| 修复前(tiled 写读) | 33.7 | 25.2 | 混乱错位+中右上重复 |
| 线性布局后 | 1.3 | 9.5 | 壁纸成形 ✓;底黑条+绿斑 ✗ |
| +半尾 tile 后 | 1.3 | 9.5 | 完整壁纸 ✓✓(用户确认"牛逼") |
稳定性冒烟:sim/smoke_monitor.py(每 2 分钟 screendump+判决+串口 异常扫描,日志 sim/logs/smoke.log)。
4. 同轮次要修复
- owner-AS 探针加单射性检查(33 点互异 PA;别名 VM 会重复—— 用户看到的"重复"即别名实锤的旁证)。
- plane 描述符 64B 全文 dump(确认线性 plane 无 offset 字段=dims 后 全零;AFBC plane 有 body 基址/指针字段未启用)。
- verify_screen.py 默认参照=warty(用户令"写死")。
5. 边界与余项(诚实账本)
- 显示=REPAINT 接管形态(bg_screen 快照 60fps 重铺);mutter 自身 合成的输出仍是中间产物(复合 draw 的 stage 曾实测 62.6% 黑—— AFBC 纹理读侧 tiled 参数对账仍 open,不影响显示形态)。
- boot 间方差残留:staging 偶发卷绕/混合(回收页交叠)——好轮全绿, 差轮快照质量下降;三门投票+单射探针已大幅收敛。
- UI 层(greeter 时钟/输入框)、字形位姿(FAU)、vt1-nudge 照旧 open。
(战役七链:…参照错案破案+三门投票→顶点形态 E+复合通道→扫描输出 布局根修=真壁纸全屏显示达成🏆→余=UI 层/字形/AFBC 读侧对账)
6. 后记(同日收官补充)
- 终点定谳(用户令):「可点亮」= 本战役终点(已达成并经两段式 验收)。SDL 弹窗交互未成——resboot.out 见 libEGL DRI3 告警,窗口 未在用户桌面出现(启动环境 DISPLAY/WSLg 变量缺失嫌疑,不再追)。 输入日用品已就位:up.py 起机即 HMP
gt911_mouse off(note 79 两路 grab 教训)+ virtio tablet/keyboard。 - rk3568 线零干扰回归:含全部本战役改动的当前二进制上
smoke.py linux --check3 PASS +rootfs --check2 PASS。 - sim/ 清理:logs 986MB→22MB(git clean -x,仅留 12 个入库证据 PPM,新增 m2n-warty-pass.ppm);13 个退役取证脚本 git mv 至 sim/attic/(README 注明出处与现行面)。