Add shared PetaLinux PL bit and PS app deployment skills
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
---
|
||||
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`。
|
||||
Reference in New Issue
Block a user