Skip to content

v1.2.2 — 修 Paper Pro 装完 crash loop (A53 指令集)

Latest

Choose a tag to compare

@boangs boangs released this 09 Oct 00:26
· 3 commits to master since this release

修 Paper Pro(ferrari)装完 xochitl 崩溃回退的问题。Paper Pro 用户请升级,Paper Pro Move 不受影响。

问题

v1.2.1 装到 Paper Pro 上,六个阶段全部通过,但 xochitl 起来就崩,反复几次后安装器按设计回退到出厂启动(设备没有损坏)。日志里是:

xochitl.service: Main process exited, code=dumped, status=4/ILL

status=4/ILL 是 SIGILL(非法指令)。

原因

两款 aarch64 设备的 CPU 不一样:

机型 CPU 指令集
Paper Pro Move Cortex-A55 ARMv8.2,支持 LSE 原子指令
Paper Pro Cortex-A53 ARMv8.0,不支持 LSE

v1.2.1 发布包里两个产物是按 A55 基线编的,里面有没做运行时回退的 LSE 指令:

  • qml_inject_impl-aarch64.so 146 条 → xochitl 加载它时 SIGILL,crash loop
  • ime-server-rime-aarch64 3377 条 → 整句输入法崩(被 crash loop 盖住,一直没被注意到)

源码里的基线修复 10-04 就做了,编译脚本也有自检。但预编译二进制不进 git 仓库,打包时用的是修复之前编的产物 —— 源码的修复和发布的包脱节了。

本版改动

  • 用重新编译的产物(-mcpu=cortex-a53+crypto,libstdc++ 动态链接),A53/A55 两台通用
  • 新增发布体检 scripts/lse_scan.py:扫二进制里有没有「裸露」的 LSE 指令。判据是看指令上下文有没有 CPU 能力判断,而不是看符号名 —— strip 过的二进制符号归属不可信,按符号判会把 GCC 的 outline atomics helper 误报成问题,也会漏掉 Go runtime 里的
  • scripts/check-dist.sh 发布前本机跑,.github/workflows/release-check.yml 在 release 发布后自动复查 dist.tar.gz 和 rmkit-cn-bundle.zip 两个包(#7 的报告者走的是助手那条路,只验前者会漏)

升级

用桌面助手的:下载本页的 rmkit-assistant-* 和 rmkit-cn-bundle.zip,重新安装一次。

用 install.sh 的:它会自动从本 release 拉 dist.tar.gz。

感谢 @thelijun 在 #7 里提供的完整日志,定位全靠它。