Round 38: a hand-run carries the measurement; the panel probe has a 40000-transfer cap

With a hand-started emulator on a copy of the working image, the page stayed untouched and healthy. Two of my own call signatures were wrong: uvk5_apps.install takes (image: bytearray, slot, blob: bytes, force) and edits the image in memory, so a path string is read as a blob, and key.py's Qmp wants a bare host:port -- the tcp: prefix fails getaddrinfo, the very trap the socket section records.

The useful find: the panel probe stops after 40000 transfers (panel_probe_n < 40000 in st7565_xfer) and a hand-run reaches that within about forty seconds, so a launch measured after that looks like an app sending nothing -- the same mistake this file records twice about capping a diagnostic. Raise the cap (or make it a knob), rebuild qemu-system-arm with the page's job stopped first, and re-run the launch on a hand-copy.
This commit is contained in:
mckero committed 2026-10-02 12:36:53 +08:00
1 parent 11286a3817
commit 6045de09b1
2 files changed
+40

No files matched your search

+22
View File
@@ -1202,6 +1202,28 @@ seconds, 28416 of them pixel data, so the panel path is being driven exactly as
instrument is sound. Comparing the two cases puts the fault in one narrow place: uvk5_supervisor.py builds
QEMU's environment as dict(os.environ), which does inherit, yet the page's own emulator never sees the
variable, so it is lost between the shell that starts the page and the server process it becomes. The fix is
**Round 38: a hand-run can carry the whole measurement, and the panel probe has a cap of its own.**
Round 37's discovery pays off: a hand-started emulator against the page's working image boots and draws, so
the measurement no longer needs the page at all. This run used a copy of the working image and left the page
untouched and healthy (485). It also needed no key tooling beyond tools/key.py and its QMP client.
Two of my own call signatures were wrong and are worth writing down. uvk5_apps.install takes (image: bytearray,
slot: int, blob: bytes, force) -- it edits the image in memory and reads the blob itself -- so passing a path
string is read as a blob and fails with "only 53 bytes" or "the image is too small for slot 0" depending on
which argument landed where. And key.py's Qmp wants a bare host:port: with the tcp: prefix getaddrinfo fails,
which is the very trap this file records in the socket section, hit again by its own author.
The useful find is about the instrument. The panel probe stops after 40000 transfers (panel_probe_n < 40000 in
st7565_xfer), and a hand-run reaches that within about forty seconds of boot: the log ended at exactly 40000
lines while keys were still going in, with the last eight thousand almost all byte 00. So a launch measured
after that point would have looked like an app that sends nothing at all -- the same shape of mistake this file
already records twice under capping a diagnostic before knowing the shape of the data. The cap has to go up (or
become a knob) before the app measurement can be believed.
Next: raise the cap, rebuild qemu-system-arm (stopping the page's job first, since it holds the binary), restart
the page, and run the launch again on a hand-copy with the probe watching.
to pass it the way the other launcher options are passed rather than relying on inheritance.
Two corrections to this file, both of which have been costing time. The probe prints s->selected, not the raw
+18
View File
@@ -959,6 +959,24 @@ st7565.c uses SPI1"),并把 `st7565_xfer` 接到 `s->soc.spi[0]`。因此**
它在「启动页面的那个 shell」与「页面变成的服务进程」之间丢掉了。修法应当**像其它启动参数那样显式传进去**,而不是依赖继承。
两条更正,都一直在消耗时间。探针打印的是 `s->selected`,**不是**原始片选电平 —— 所以它的 `cs=1` 表示面板**已被选中**、
**第 38 轮:手工运行就能承载整个测量;而面板探针自己也有一个上限。**
第 37 轮那个发现立刻兑现了:**用页面那份工作镜像手工启动的模拟器能开机、能作画**,所以整个测量**不再需要页面**。
这一次用的是工作镜像的**副本**,页面从头到尾没被碰过、且健康(485)。除了 `tools/key.py` 和它的 QMP 客户端,也不需要别的工具。
我自己有两处调用写法是错的,值得记下。`uvk5_apps.install` 的签名是 `(image: bytearray, slot: int, blob: bytes,
force)` —— 它**在内存里改镜像**、自己接收 blob —— 所以传路径字符串时,它按 blob 去读,报的是「only 53 bytes」
或「the image is too small for slot 0」,取决于哪个参数落在了哪里。而 `key.py` 的 `Qmp` 要的是**裸 `host:port`**:
带上 `tcp:` 前缀就 `getaddrinfo failed` —— 正是本文件在 socket 那节记下的坑,**又栽在写它的人手里**。
有价值的发现是关于仪器的。**面板探针在 40000 次传输之后就停止**(`st7565_xfer` 里的 `panel_probe_n < 40000`),
而手工运行在开机约四十秒内就会打满:日志正好停在 40000 行,而按键还在继续,最后八千行几乎全是字节 `00`。
**因此在那之后测一次启动,看起来就会像「应用什么都没送」** —— 与本文件已经记过两次的、
「在还不知道数据形状时给诊断加上限」是同一种错误。**必须先把上限提高(或做成旋钮),应用的测量才可信。**
下一步:提高上限、重编 `qemu-system-arm`(先停掉页面的任务,因为它占着那个二进制)、重启页面,
然后在手工副本上带着探针再跑一次启动。
字节**确实被存下来**;把这个字段当成电平去读、进而断定面板忽略一切,会是错的。而「手工启动的模拟器从不作画」这条旧笔记,
对「用页面那份工作镜像手工跑」并不成立:这一次它开机了、作画了、并持续输出像素数据。这条笔记已经左右了很多轮的测量方式,
它应当被**重新推导**,而不是继续被相信。