Files
skills-win/petalinux-ps/SKILL.md
T

28 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: petalinux-ps
description: Deliver or stop a compiled Linux user-space application on a PetaLinux Zynq board, verifying its ARM ABI, target process identity, persistent storage, launch contract, health, and rollback. Use for PR26 PS application deployment or a scoped zq_server stop; not for bare-metal PS firmware, QSPI images, or PL bitstreams.
---
# Petalinux-ps:Linux 应用发布与定向停止
本 skill 的“PS”是**运行于 PetaLinux 的用户态应用**,不是 SDK 裸机 `s1app.elf`/FSBL,也不负责 PL bit、QSPI 或 TF/eMMC 系统镜像。用户给出已编译程序时直接做 ABI、传输、发布和板端验收;若只要求停止应用,执行定向停止与确认,不擅自替换文件或重启。PR26 的 `killall zq_server` 是一个历史例子,**进程名不等于 ELF 文件名或服务名**,不能在未识别目标前照搬。
## 识别当前交付
从项目 bmem、PR26、现板进程/启动配置确定板卡、Linux 版本、rootfs 挂载、目标应用的绝对路径和当前版本。要求本轮编译好的二进制及 SHA-256/构建来源、预期 ARM 架构/EABI、动态解释器/共享库、命令行参数、环境变量、工作目录、配置文件、端口、依赖 PL/外设、服务管理方式和开机自启动合同。可用 `readelf`/等价工具检查 ELF class、endianness、machine、ABI/interpreter/NEEDED,并在目标系统核对实际 loader/库;**ARM ELF magic 单独不证明可在这版 PetaLinux 运行**。缺少启动合同先通过现板 `/proc/<pid>/cmdline`、进程树、SysV/systemd 脚本和日志取证;无法识别时只可安全暂存,不得猜测启动参数。
`E:\tmp\qspi-emmc\tftp_dir_emmc` 含旧 `zq_cttb_server_cttb`、`zq_cttb_server_dvbt`、`zq_dvbt_server.elf` 样本;本机读到它们是 32-bit little-endian ARM ELF,但**未**证明属于当前 Vivado/TF 根系统,也未证明对应进程名 `zq_server`。不能以旧样本、旧 IP 或文件名相似替代用户当前交付。HJX9009 的 `pr26_tf_20260915` 交付只证明 Linux/网络/SSH/TF 持久根可启动;PR26 的 PS 应用尚无本板实测 PASS 记录。
## 仅停止目标应用
先核对 PID、完整 cmdline、exe inode/路径、所属服务和实例数量。优先按已知服务合同停止;无服务管理器时向**确认为目标应用的 PID** 发送 TERM、等待退出并检查端口/子进程。只有在请求范围内仍未退出时才考虑 KILL,记录实际 PID 和结果。`killall zq_server` 仅在全部同名实例均属于用户指定目标、且服务不会自动拉起时可作为等价方式;不能用其误杀其它实例。确认停止不等于程序文件已删除或开机启动已禁用,分别报告。
## 发布与切换门禁
1. 只读基线:确认目标 rootfs 是持久介质(如 HJX9009 已验证的 TF ext4),记录挂载、空闲容量、旧二进制/配置/服务哈希和现有进程状态;QSPI initramfs 中暂存的应用断电即消失,不能叫持久部署。现场验证 TFTP 服务地址和目标通信,拒绝 PR26/旧目录的固定 IP。
2. 先把**全部**当前文件传到独立暂存目录,逐项核对下载退出码、大小、SHA-256、ABI 与依赖;若任一缺失或校验失败立即停止,旧运行版本继续保留。目标安装路径应从真实 service/应用合同取得,不默认 `/aw`;检查意外 symlink、权限和空间。若当前板上二进制哈希与交付完全相同,可跳过替换但仍做健康与持久启动验收。
3. 冻结旧版可恢复副本和启动合同。按上节精确停止目标进程,等待退出,再把已校验新文件在**同一文件系统**内原子替换到目标,设置最低必要可执行权限(通常 `0755`)、`sync` 并读回哈希。不要先删旧文件,不能因 TFTP 失败把旧暂存 ELF 发布为新版本。
4. 使用确认过的服务/命令行启动,不猜参数或以后台 PID 存在判成功。核对 `/proc/<pid>/exe` 是否指向新 inode、依赖库/日志/端口/健康响应以及应用自己的功能探针;如涉及 PL,核对 bit/寄存器版本与应用兼容。失败时定向停新版、恢复旧二进制/配置并按旧合同重启,保留失败证据。若用户要求断电保持或自启动,至少两次完整断电启动验收,证明持久根、启动服务和功能都仍正确。
自动日志放项目 `Notes/auto/`:目标板/rootfs、来源与目标 SHA-256、ABI/库、实际网络、进程 PID/exe/命令行、旧版备份、安装/停止/重启/功能/断电门禁与回退结果。密码不得进入文件或回显;按项目 bmem 协议记录会话并同步。只有文件哈希、进程身份、健康及用户请求的重启持久化门禁全部 PASS,才报告 `APP_DEPLOYED_PASS`;单独停止请求只能报告 `APP_STOPPED_PASS`。