From 5fbf30755cf295c1391a1fe1bf7c6cd0857ae8ef Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 12:45:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(amsd):=20meow=5Famsd=20=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=99=A8=E4=B8=80=E6=9C=9F=20+=20am=20CLI=20?= =?UTF-8?q?(agent-212,=20=E7=94=A8=E6=88=B7=E5=AE=9A=E6=A1=88)=20=E2=80=94?= =?UTF-8?q?=20svcd=E6=89=98=E7=AE=A1(trigger=3Dboot);=20=E7=94=9F=E5=91=BD?= =?UTF-8?q?=E5=91=A8=E6=9C=9F=E6=B3=A8=E5=86=8C=E8=A1=A8(=E7=8A=B6?= =?UTF-8?q?=E6=80=81/=E6=97=B6=E9=95=BF/=E9=80=80=E5=87=BA=E7=A0=81/?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7/=E5=B4=A9=E6=BA=83=E8=AE=A1=E6=95=B0+?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E7=8E=AF=E5=BD=A2);=20launcher=20launch/exit?= =?UTF-8?q?/stdout=E7=AE=A1=E9=81=93=E6=8D=95=E8=8E=B7=E4=B8=8A=E6=8A=A5(l?= =?UTF-8?q?ogcat=E5=BC=8F,=E5=B4=A9=E6=BA=83=E5=B0=BE=E5=B7=B4drain?= =?UTF-8?q?=E4=B8=8D=E4=B8=A2);=20am=20status/list/history/start/kill(root?= =?UTF-8?q?=E9=97=A8);=20crash=E5=8F=8C=E4=BF=9D=E9=99=A9=E8=BD=AC?= =?UTF-8?q?=E5=8F=91;=20S89=E9=A2=84=E7=BD=AEconf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit amsd f8d7f61b / am cfc4cbd4 / launcher 97c1b222(含字库扫描签名门控修CPU100%) 宿主+qemu全链路验证通过 --- patch_v2/meow_amsd/am | Bin 0 -> 58160 bytes patch_v2/meow_amsd/am.c | 140 +++ patch_v2/meow_amsd/am_host | Bin 0 -> 71704 bytes patch_v2/meow_amsd/ams_stub.c | 70 ++ patch_v2/meow_amsd/ams_stub_host | Bin 0 -> 71520 bytes patch_v2/meow_amsd/build_amsd.sh | 40 + patch_v2/meow_amsd/meow_amsd | Bin 0 -> 124156 bytes patch_v2/meow_amsd/meow_amsd.c | 1068 +++++++++++++++++ patch_v2/meow_amsd/meow_amsd_host | Bin 0 -> 76160 bytes patch_v2/meow_launcherd/app_launcher.c | 258 +++- patch_v2/meow_launcherd/main_menu.c | 77 +- patch_v2/meow_launcherd/meow_ipc.h | 18 + .../meow_launcherd/meow_launcher_internal.h | 6 + patch_v2/meow_launcherd/meow_launcherd | Bin 572012 -> 577132 bytes patch_v2/meow_launcherd/util.c | 33 + patch_v2/meow_svcd/S89meow_svcd | 16 + 16 files changed, 1722 insertions(+), 4 deletions(-) create mode 100755 patch_v2/meow_amsd/am create mode 100644 patch_v2/meow_amsd/am.c create mode 100755 patch_v2/meow_amsd/am_host create mode 100644 patch_v2/meow_amsd/ams_stub.c create mode 100755 patch_v2/meow_amsd/ams_stub_host create mode 100644 patch_v2/meow_amsd/build_amsd.sh create mode 100755 patch_v2/meow_amsd/meow_amsd create mode 100644 patch_v2/meow_amsd/meow_amsd.c create mode 100755 patch_v2/meow_amsd/meow_amsd_host diff --git a/patch_v2/meow_amsd/am b/patch_v2/meow_amsd/am new file mode 100755 index 0000000000000000000000000000000000000000..24129afc2c9ceaa62dd5f86d4147da6105f64055 GIT binary patch literal 58160 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 literal 0 HcmV?d00001 diff --git a/patch_v2/meow_amsd/am.c b/patch_v2/meow_amsd/am.c new file mode 100644 index 0000000..ee92078 --- /dev/null +++ b/patch_v2/meow_amsd/am.c @@ -0,0 +1,140 @@ +/* am.c — MeowOS 活动管理器用户侧 CLI(AMSD_DESIGN.md §3,安卓习惯,进固件 /usr/bin/am)。 + * + * 连 amsd sock(--sock/MEOW_AMS_SOCK,默认 /usr/data/meow_ams.sock),发一条命令行, + * 读响应直到 EOF,格式化输出。root 免鉴权(读);写操作(start/kill)一期仅 root/系统身份。 + * + * 子命令: + * am status → 在跑 App 表(pkg/状态/pid/运行时长/activity) + * am list → 注册表 + 状态(pkg/name/state/pid/launches/crashes) + * am history [pkg] → 事件历史(每 App 最近 8 条;无 pkg=全部) + * am start [/] → 经 amsd→launcher 拉起 + * am kill → 经 amsd→launcher 终止(SIGTERM 语义) + * + * 编译(mipsel 静态):zig-mipsel-cc -Os -Wall -Wextra -static am.c -o am + * 宿主:gcc -Os -Wall -Wextra am.c -o am_host + */ +#include +#include +#include +#include +#include +#include +#include + +#define AMS_SOCK_DEFAULT "/usr/data/meow_ams.sock" +#define AMS_SOCK_PATH_MAX 108 +#define AMS_RESP_MAX 65536 + +static const char *g_sock = NULL; + +static int connect_path(const char *path) +{ + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) { perror("socket"); return -1; } + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + snprintf(a.sun_path, sizeof a.sun_path, "%s", path); + if (connect(fd, (struct sockaddr *)&a, sizeof a) < 0) { + fprintf(stderr, "connect %s: %s\n", path, strerror(errno)); + close(fd); + return -1; + } + return fd; +} + +/* 发送单行命令,读取响应直到 EOF,打印。返回 0=ok。 */ +static int am_query(const char *cmd) +{ + int fd = connect_path(g_sock); + if (fd < 0) return 1; + ssize_t w = write(fd, cmd, strlen(cmd)); + (void)w; + static char resp[AMS_RESP_MAX]; + size_t n = 0; + char tmp[2048]; + ssize_t r; + while ((r = read(fd, tmp, sizeof tmp)) > 0) { + if (n + (size_t)r < sizeof resp - 1) { memcpy(resp + n, tmp, (size_t)r); n += (size_t)r; } + } + close(fd); + resp[n] = '\0'; + fputs(resp, stdout); + return 0; +} + +static int cmd_status(void) +{ + return am_query("status\n"); +} + +static int cmd_list(void) +{ + return am_query("list\n"); +} + +static int cmd_history(const char *pkg) +{ + char line[512]; + if (pkg && pkg[0]) + snprintf(line, sizeof line, "history %s\n", pkg); + else + snprintf(line, sizeof line, "history\n"); + return am_query(line); +} + +static int cmd_start(const char *spec) +{ + if (geteuid() != 0) { printf("ERR permission denied (root only)\n"); return 1; } + char line[512]; + snprintf(line, sizeof line, "start %s\n", spec); + return am_query(line); +} + +static int cmd_kill(const char *pkg) +{ + if (geteuid() != 0) { printf("ERR permission denied (root only)\n"); return 1; } + char line[512]; + snprintf(line, sizeof line, "kill %s\n", pkg); + return am_query(line); +} + +static void usage(const char *a0) +{ + fprintf(stderr, + "usage: %s [--sock ] status|list|history [pkg]|start [/]|kill \n" + " --sock amsd socket (default %s, or $MEOW_AMS_SOCK)\n", + a0, AMS_SOCK_DEFAULT); +} + +int main(int argc, char **argv) +{ + const char *env = getenv("MEOW_AMS_SOCK"); + g_sock = (env && env[0]) ? env : AMS_SOCK_DEFAULT; + + const char *cmd = NULL, *arg = NULL; + for (int i = 1; i < argc; i++) { + const char *a = argv[i]; + if (!strcmp(a, "--sock") && i + 1 < argc) g_sock = argv[++i]; + else if (!strcmp(a, "-h") || !strcmp(a, "--help")) { usage(argv[0]); return 0; } + else if (a[0] == '-') { usage(argv[0]); return 2; } + else if (!cmd) cmd = a; + else if (!arg) arg = a; + else { fprintf(stderr, "extra arg %s\n", a); return 2; } + } + if (!cmd) { usage(argv[0]); return 2; } + + if (!strcmp(cmd, "status")) return cmd_status(); + if (!strcmp(cmd, "list")) return cmd_list(); + if (!strcmp(cmd, "history")) return cmd_history(arg); + if (!strcmp(cmd, "start")) { + if (!arg) { fprintf(stderr, "start needs [/]\n"); return 2; } + return cmd_start(arg); + } + if (!strcmp(cmd, "kill")) { + if (!arg) { fprintf(stderr, "kill needs \n"); return 2; } + return cmd_kill(arg); + } + usage(argv[0]); + return 2; +} diff --git a/patch_v2/meow_amsd/am_host b/patch_v2/meow_amsd/am_host new file mode 100755 index 0000000000000000000000000000000000000000..a3e5fa6a3a1c8c942ae4947e43c18d9ecc7927d9 GIT binary patch literal 71704 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 Md6pGE2cIhb6L{Jxr2qf` literal 0 HcmV?d00001 diff --git a/patch_v2/meow_amsd/ams_stub.c b/patch_v2/meow_amsd/ams_stub.c new file mode 100644 index 0000000..8f866d9 --- /dev/null +++ b/patch_v2/meow_amsd/ams_stub.c @@ -0,0 +1,70 @@ +/* ams_stub.c — meow_amsd 宿主测试桩(不入固件)。 + * + * 用途:在宿主集成测试里,把 stdin 的每一行原样发到 amsd socket(command 与 EV 事件均可), + * 然后读取响应直到 EOF 并打印。既当「launcher 上报桩」(注入 EV LAUNCH/EV OUT/EV EXIT), + * 也当通用命令客户端(status/list/history/start/kill)。 + * + * 用法: + * printf 'EV LAUNCH os.meow.hello home - 123 12345 100\n' | ./ams_stub_host --sock /tmp/sim_ams.sock + * echo status | ./ams_stub_host --sock /tmp/sim_ams.sock + * + * 编译(宿主):gcc -Os -Wall -Wextra ams_stub.c -o ams_stub_host + */ +#include +#include +#include +#include +#include +#include +#include + +#define AMS_SOCK_DEFAULT "/usr/data/meow_ams.sock" +#define AMS_SOCK_PATH_MAX 108 +#define AMS_RESP_MAX 65536 + +static const char *g_sock = AMS_SOCK_DEFAULT; + +int main(int argc, char **argv) +{ + const char *env = getenv("MEOW_AMS_SOCK"); + if (env && env[0]) g_sock = env; + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--sock") && i + 1 < argc) g_sock = argv[++i]; + else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { + fprintf(stderr, "usage: %s [--sock ] (reads lines from stdin -> amsd)\n", argv[0]); + return 0; + } else { fprintf(stderr, "bad arg %s\n", argv[i]); return 2; } + } + + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) { perror("socket"); return 1; } + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + snprintf(a.sun_path, sizeof a.sun_path, "%s", g_sock); + if (connect(fd, (struct sockaddr *)&a, sizeof a) < 0) { + fprintf(stderr, "connect %s: %s\n", g_sock, strerror(errno)); + return 1; + } + + char line[2048]; + while (fgets(line, sizeof line, stdin)) { + ssize_t w = write(fd, line, strlen(line)); + (void)w; + } + /* half-close 写端:告知 amsd「无更多数据」(= launcher fire-and-forget 的 close 语义), + * 事件连接 amsd 即收尾关闭;命令连接 amsd 写回响应后才关闭。 */ + shutdown(fd, SHUT_WR); + /* read response until EOF */ + static char resp[AMS_RESP_MAX]; + size_t n = 0; + char tmp[2048]; + ssize_t r; + while ((r = read(fd, tmp, sizeof tmp)) > 0) { + if (n + (size_t)r < sizeof resp - 1) { memcpy(resp + n, tmp, (size_t)r); n += (size_t)r; } + } + close(fd); + resp[n] = '\0'; + if (n > 0) fputs(resp, stdout); + return 0; +} diff --git a/patch_v2/meow_amsd/ams_stub_host b/patch_v2/meow_amsd/ams_stub_host new file mode 100755 index 0000000000000000000000000000000000000000..b396c5929857504a7efc448a68f08f331bcce5c6 GIT binary patch literal 71520 zcmeI1e{dA%dB>l-6G9fh#18|GZ8!nx5H~sm$QV10eG)$;CI|?~ZR$+A?A@)T8{Mzj z-Q#DQU^+=NwOgZ@+KDrEJ*4dbopjWM#7?IZ6Pod~wc9GVw&}QzCF~@gv8Ta9NOcZy zeV*O-k=|R~QctJ-qtj=Z)w9p{eV*ri_p|T5ySIE{%l56&NCbF`!L#6bExwXe4e^$# zm?Uh3W=O*Aa2qsYdjswq7qsnBY{ZRilkY+dE#)0o?Lm91iet;Ylbxa3>Y3RKeU&Zv zXXE{)v5sE#+efeZ71{RCfNg5VF<6YEx=^b5PPFP0)Fk{>h@K14sdBwKzm6vm z$F|`1MHE&9Mf5+9ySlVBtuxW9SHCkv-w{&hPebC2dgD1B5`TM${ud#7cL<-i zLi&9zq|O^5`U4^Q^C9}PA$lT2r~9nlb@`2u^Lim9{;3ch%hat8{R5WkfKw>h*@D{- zj+@CApk�(FVhCTr)jnqz8wLelwc`rQDTuO*Wf!%6 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

ZH%J)dP0%A*m*dWQDi#ZkT)2J>VDmkQ;sw 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/stdout__.log`。 + * - 崩溃双保险:amsd 检测到异常退出时另以 meow_crash 认识的 `SVC ...` 格式转发 + * `/tmp/meow_crash.sock`(meow_crash.c handle_conn 只认 SVC 前缀;launcher 现行 `app ...` + * 格式落不了盘,amsd 的 SVC 转发正好补上)。 + * - 落盘:TF 卡 `MeowOS/logs/`(amsd 只清 `ams_` 与 `stdout_` 前缀文件,不与 meow_crash 的 + * `meow_` 与 `crash_` 前缀清理冲突)。无卡回退 /tmp(256KB 滚动);卡出现自动迁移。 + * - 铁律:上报/转发全程非阻塞、可失败(amsd 不在,launcher 照常跑);amsd 自身绝不因 + * App 事件而崩(只改内存表 + poll,不 exit)。 + * + * 编译(mipsel 静态,见 build_amsd.sh): + * zig-mipsel-cc -I../meow_launcherd -Os -Wall -Wextra -static meow_amsd.c -o meow_amsd + * 宿主编译(集成测试):gcc -I../meow_launcherd -Os -Wall -Wextra meow_amsd.c -o meow_amsd_host + */ +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "meow_ipc.h" /* MEOW_IPC 帧/MAGIC/m_ams_* 结构(与 launcher 同源,杜绝漂移) */ + +/* ---- 默认路径 / 常量 ---- */ +#define AMS_CARD_DEFAULT "/usr/data/mnt/sd_0" /* TF 卡挂载点 */ +#define AMS_LOGS_REL "MeowOS/logs" /* 卡上日志目录(同 launcher/crash) */ +#define AMS_SOCK_DEFAULT "/usr/data/meow_ams.sock" +#define AMS_IPC_SOCK_DEFAULT "/usr/data/meow_ipc.sock" /* 连 launcher IPC 用 */ +#define AMS_APPS_DEFAULT "/usr/data/mnt/sd_0/MeowAPPs" /* 注册表扫描源 */ +#define AMS_CRASH_SOCK_DEFAULT "/tmp/meow_crash.sock" +#define AMS_TMP_LOG "/tmp/meow_ams.log" +#define AMS_TMP_MAX (256u * 1024u) +#define AMS_LOG_SIZE_LIMIT (1u << 30) /* logs/ 总量 1GB 纪律 */ +#define AMS_FILE_MAX (1u << 20) /* stdout 单文件 1MB 轮转 */ +#define AMS_LINE_MAX 2048 /* 单行 read 缓冲 */ +#define AMS_HIST 8 /* 每 App 最近事件数 */ +#define AMS_MAX_APPS 64 +#define AMS_MAX_CONNS 32 +#define AMS_TICK_MS 1000 +#define AMS_CLEANUP_MS 60000 +#define AMS_PATH_MAX 512 +#define AMS_SOCK_PATH_MAX 108 +#define AMS_BOOTTS_LEN 64 +#define AMS_REQ_MAX 512 /* 命令响应缓冲 */ + +/* 每 App 状态(一期:STOPPED/FG;BG 预留二期) */ +enum { AMS_STOPPED = 0, AMS_FG = 1, AMS_BG = 2 }; + +struct ams_ev { + char detail[192]; /* 事件描述(exit=0 / sig=11 / ams_start=... 等) */ + long epoch; /* 墙钟秒 */ + long up; /* uptime 秒 */ + char kind[16]; /* launch / exit / crash / ams_start / ams_kill */ +}; + +struct ams_app { + char pkg[MEOW_APP_ID_MAX]; /* app_id=package */ + char name[17]; + char exec[129]; + int known; /* 注册表(app.json 扫描)命中 */ + int state; /* AMS_* */ + pid_t pid; + char activity[MEOW_ACT_MAX]; + char chain[MEOW_CHAIN_MAX]; + long long launch_ms; /* CLOCK_MONOTONIC ms */ + long launch_epoch; /* 墙钟秒 */ + long launch_up; + int launches; + int crashes; /* 异常退出次数(sig 或 exit!=0) */ + int last_kind; /* 0=干净 exit 1=exit 2=sig */ + int last_code; + long long last_dur_ms; + struct ams_ev hist[AMS_HIST]; + int hist_n, hist_idx; +}; + +/* stdout 捕获会话(一期同一时刻仅一个前台 App → 单槽) */ +struct ams_out { + int active; + char pkg[MEOW_APP_ID_MAX]; + pid_t pid; + int fd; /* 打开的日志文件 fd */ + char base[AMS_PATH_MAX]; /* 当前文件路径 */ + long long bytes; /* 当前文件字节数 */ +}; +struct ams_out g_out = { .active = 0, .fd = -1 }; + +/* ---- 全局状态 ---- */ +static char g_card[256] = AMS_CARD_DEFAULT; +static char g_sock[AMS_SOCK_PATH_MAX] = AMS_SOCK_DEFAULT; +static char g_ipc_sock[AMS_SOCK_PATH_MAX] = AMS_IPC_SOCK_DEFAULT; +static char g_apps_dir[AMS_PATH_MAX] = AMS_APPS_DEFAULT; +static char g_crash_sock[AMS_SOCK_PATH_MAX] = AMS_CRASH_SOCK_DEFAULT; +static char g_bootts[AMS_BOOTTS_LEN] = ""; +static int g_log_fd = -1; /* 卡日志 fd;-1=未开(落 /tmp) */ +static int g_on_card = 0; +static int g_shutdown = 0; +static int g_sigpipe[2] = {-1, -1}; +static int g_listen_fd = -1; +static struct ams_app g_apps[AMS_MAX_APPS]; +static int g_napps = 0; + +struct ams_conn { + int fd; + char buf[AMS_LINE_MAX]; + int n; /* buf 有效字节(可能含未完结行,跨 poll 保留) */ + char resp[AMS_REQ_MAX]; + int resp_n; /* 已产生的命令响应(写回后即关连接) */ +}; + +/* ---- 工具 ---- */ +static unsigned long long now_ms(void) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (unsigned long long)ts.tv_sec * 1000 + (unsigned long long)ts.tv_nsec / 1000000; +} + +static int safe_strcpy(char *dst, size_t cap, const char *src) +{ + if (!dst || cap == 0) return -1; + int n = snprintf(dst, cap, "%s", src ? src : ""); + return (n >= 0 && (size_t)n < cap) ? 0 : -1; +} + +/* 有界字符串拷贝(memcpy 实现,不触发 gcc -Wformat-truncation)。 */ +static size_t scopy(char *dst, size_t cap, const char *src) +{ + if (!dst || cap == 0) { if (dst) dst[0] = '\0'; return 0; } + size_t l = strnlen(src ? src : "", cap - 1); + if (src) memcpy(dst, src, l); + dst[l] = '\0'; + return l; +} + +/* 把 src 追加到 dst 末尾(有界,memcpy 实现)。返回 0=成功;-1=溢出(截断到 cap-1)。 */ +static int path_append(char *dst, size_t cap, const char *src) +{ + size_t dl = strnlen(dst, cap); + size_t sl = strnlen(src ? src : "", cap > dl + 1 ? cap - dl - 1 : 0); + if (dl + sl + 1 > cap) { + /* 溢出:截断并保存 NUL */ + if (cap > 0) { dst[cap - 1] = '\0'; } + return -1; + } + if (sl) memcpy(dst + dl, src, sl); + dst[dl + sl] = '\0'; + return 0; +} + +static long read_uptime_sec(void) +{ + int fd = open("/proc/uptime", O_RDONLY); + if (fd < 0) return 0; + char b[64]; + ssize_t n = read(fd, b, sizeof b - 1); + close(fd); + if (n <= 0) return 0; + b[n] = '\0'; + return (long)atof(b); +} + +/* 本 boot 时间戳 "%Y%m%d_%H%M%S":复用 /tmp/meow_bootts(launcher/crash 共用,跨进程同一 boot)。 */ +static void boot_ts(char *out, size_t n) +{ + out[0] = '\0'; + int fd = open("/tmp/meow_bootts", O_RDONLY); + if (fd >= 0) { + char b[AMS_BOOTTS_LEN]; + ssize_t r = read(fd, b, sizeof b - 1); + close(fd); + if (r > 0) { + b[r] = '\0'; + char *p = b; + if (strncmp(p, "meow_", 5) == 0) p += 5; + snprintf(out, n, "%s", p); + if (out[0]) return; + } + } + time_t now = time(NULL); + time_t up = (time_t)read_uptime_sec(); + time_t boot = now - up; + struct tm tm; + localtime_r(&boot, &tm); + strftime(out, n, "%Y%m%d_%H%M%S", &tm); +} + +static void ams_append_line(const char *line) +{ + if (g_log_fd >= 0) { + ssize_t w = write(g_log_fd, line, strlen(line)); + if (w < 0) { close(g_log_fd); g_log_fd = -1; g_on_card = 0; } + else return; + } + struct stat st; + if (stat(AMS_TMP_LOG, &st) == 0 && st.st_size > (long long)AMS_TMP_MAX) + unlink(AMS_TMP_LOG); + int fd = open(AMS_TMP_LOG, O_WRONLY | O_APPEND | O_CREAT, 0644); + if (fd >= 0) { ssize_t w = write(fd, line, strlen(line)); (void)w; close(fd); } +} + +static void emit_log(const char *fmt, ...) +{ + char line[AMS_LINE_MAX]; + long epoch = (long)time(NULL); + long up = read_uptime_sec(); + va_list ap; + va_start(ap, fmt); + int l = snprintf(line, sizeof line, "%ld %ld amsd ", epoch, up); + if (l < 0) l = 0; + int m = vsnprintf(line + l, sizeof line - l, fmt, ap); + va_end(ap); + if (m > 0) { + l += m; + if ((size_t)l < sizeof line) { line[l++] = '\n'; line[l] = 0; ams_append_line(line); } + } +} + +/* ---- 卡可用性 / 持久日志 ---- */ +static int card_available(void) +{ + const char *nc = getenv("MEOW_AMSD_NOCARD"); + if (nc && nc[0] == '1') return 0; + + char logs[AMS_PATH_MAX]; + if (snprintf(logs, sizeof logs, "%s/%s", g_card, AMS_LOGS_REL) >= (int)sizeof logs) return 0; + if (strcmp(g_card, AMS_CARD_DEFAULT) == 0) { + FILE *f = fopen("/proc/mounts", "r"); + if (!f) return 0; + char needle[AMS_PATH_MAX], line[AMS_PATH_MAX]; + snprintf(needle, sizeof needle, " %s ", g_card); + int found = 0; + while (fgets(line, sizeof line, f)) + if (strstr(line, needle)) { found = 1; break; } + fclose(f); + if (!found) return 0; + } + (void)mkdir(logs, 0755); + return access(logs, W_OK) == 0; +} + +/* 只对 ams_ 前缀与 stdout_ 前缀文件做 1GB 清理(不与 meow_crash 的 meow_/crash_ 前缀冲突)。 */ +static void log_cleanup_old(void) +{ + char logs[AMS_PATH_MAX]; + if (snprintf(logs, sizeof logs, "%s/%s", g_card, AMS_LOGS_REL) >= (int)sizeof logs) return; + DIR *d = opendir(logs); + if (!d) return; + struct lf { char name[96]; long long size, mtime; } files[128]; + int n = 0; + struct dirent *de; + while ((de = readdir(d)) != NULL && n < 128) { + const char *nm = de->d_name; + if (strncmp(nm, "ams_", 4) != 0 && strncmp(nm, "stdout_", 7) != 0) continue; + char path[AMS_PATH_MAX]; + if (snprintf(path, sizeof path, "%s/%s", logs, nm) >= (int)sizeof path) continue; + struct stat st; + if (stat(path, &st) != 0 || !S_ISREG(st.st_mode)) continue; + size_t nl = strlen(nm); + if (nl >= sizeof files[n].name) nl = sizeof files[n].name - 1; + memcpy(files[n].name, nm, nl); + files[n].name[nl] = '\0'; + files[n].size = (long long)st.st_size; + files[n].mtime = (long long)st.st_mtime; + n++; + } + closedir(d); + long long total = 0; + for (int i = 0; i < n; i++) total += files[i].size; + for (int i = 0; i < n; i++) + for (int j = i + 1; j < n; j++) + if (files[j].mtime < files[i].mtime) { struct lf t = files[i]; files[i] = files[j]; files[j] = t; } + int deleted = 0; + for (int i = 0; i < n && total > (long long)AMS_LOG_SIZE_LIMIT; i++) { + char path[AMS_PATH_MAX]; + if (snprintf(path, sizeof path, "%s/%s", logs, files[i].name) >= (int)sizeof path) continue; + if (unlink(path) == 0) { total -= files[i].size; deleted++; } + } + if (deleted) fprintf(stderr, "[meow_amsd] log_cleanup deleted %d old log(s)\n", deleted); +} + +static int log_open_card(void) +{ + if (g_log_fd >= 0) return 0; + if (!card_available()) return -1; + char ts[AMS_BOOTTS_LEN]; + boot_ts(ts, sizeof ts); + char path[AMS_PATH_MAX]; + if (snprintf(path, sizeof path, "%s/%s/ams_%s.log", g_card, AMS_LOGS_REL, ts) + >= (int)sizeof path) return -1; + int fd = open(path, O_WRONLY | O_APPEND | O_CREAT, 0644); + if (fd < 0) return -1; + g_log_fd = fd; g_on_card = 1; + return 0; +} + +static void poll_card(void) +{ + if (g_log_fd >= 0) return; + if (log_open_card() != 0) return; + int fd = open(AMS_TMP_LOG, O_RDONLY); + if (fd >= 0) { + char chunk[1024]; ssize_t cn; + while ((cn = read(fd, chunk, sizeof chunk)) > 0) { + if (write(g_log_fd, chunk, cn) < 0) { close(fd); g_log_fd = -1; g_on_card = 0; return; } + } + close(fd); + unlink(AMS_TMP_LOG); + fprintf(stderr, "[meow_amsd] /tmp buffered log moved to card\n"); + } +} + +/* ---- 注册表扫描(app.json 迷你解析:package/name/exec) ---- */ +static void appjson_get(const char *content, const char *key, char *out, size_t n) +{ + out[0] = '\0'; + char pat[64]; + snprintf(pat, sizeof pat, "\"%s\"", key); + const char *p = strstr(content, pat); + if (!p) return; + p += strlen(pat); + const char *c = strchr(p, ':'); + if (!c) return; + c++; + while (*c == ' ' || *c == '\t') c++; + if (*c != '"') return; + c++; + const char *e = strchr(c, '"'); + if (!e) return; + size_t l = (size_t)(e - c); + if (l >= n) l = n - 1; + memcpy(out, c, l); + out[l] = '\0'; +} + +/* 扫描 --apps 下每个目录(app_id=目录名;name/exec 从 app.json 抽,缺省回退)。 */ +static void registry_scan(void) +{ + DIR *d = opendir(g_apps_dir); + if (!d) { emit_log("registry scan: %s not reachable (%s)", g_apps_dir, strerror(errno)); return; } + struct dirent *de; + int n = 0; + while ((de = readdir(d)) != NULL && n < AMS_MAX_APPS) { + if (de->d_name[0] == '.') continue; + char nm[96]; + scopy(nm, sizeof nm, de->d_name); + char dir[AMS_PATH_MAX + 64]; + scopy(dir, sizeof dir, g_apps_dir); + path_append(dir, sizeof dir, "/"); + if (path_append(dir, sizeof dir, nm) != 0) continue; /* 路径过长 → 跳过 */ + struct stat st; + if (stat(dir, &st) != 0 || !S_ISDIR(st.st_mode)) continue; + char jpath[AMS_PATH_MAX + 64]; + scopy(jpath, sizeof jpath, dir); + if (path_append(jpath, sizeof jpath, "/app.json") != 0) continue; + char content[2048]; + content[0] = '\0'; + FILE *jf = fopen(jpath, "r"); + if (jf) { + size_t rd = fread(content, 1, sizeof content - 1, jf); + fclose(jf); + content[rd] = '\0'; + } + struct ams_app *a = &g_apps[n]; + memset(a, 0, sizeof *a); + /* app_id 权威 = 目录名(APPS.md §2);app.json package 字段作为兜底校验(不一致时用目录名) */ + scopy(a->pkg, sizeof a->pkg, de->d_name); + a->known = 1; + char tmp[96]; + appjson_get(content, "name", tmp, sizeof tmp); + if (!tmp[0]) scopy(tmp, sizeof tmp, de->d_name); + scopy(a->name, sizeof a->name, tmp); + appjson_get(content, "exec", tmp, sizeof tmp); + if (tmp[0]) scopy(a->exec, sizeof a->exec, tmp); + else { + scopy(a->exec, sizeof a->exec, dir); + path_append(a->exec, sizeof a->exec, "/meow"); + } + n++; + } + closedir(d); + g_napps = n; + emit_log("registry scan: %d app(s) from %s", g_napps, g_apps_dir); + for (int i = 0; i < g_napps; i++) + emit_log(" app %s name=%s exec=%s", g_apps[i].pkg, g_apps[i].name, g_apps[i].exec); +} + +/* ---- App 表辅助 ---- */ +static struct ams_app *app_find(const char *pkg) +{ + if (!pkg) return NULL; + for (int i = 0; i < g_napps; i++) + if (!strcmp(g_apps[i].pkg, pkg)) return &g_apps[i]; + return NULL; +} + +/* get-or-create:launcher 上报可能先于注册表扫描(或 pkg 未扫到),追加建项。 */ +static struct ams_app *app_get(const char *pkg) +{ + struct ams_app *a = app_find(pkg); + if (a) return a; + if (g_napps >= AMS_MAX_APPS) return NULL; + a = &g_apps[g_napps++]; + memset(a, 0, sizeof *a); + snprintf(a->pkg, sizeof a->pkg, "%s", pkg); + snprintf(a->name, sizeof a->name, "%s", pkg); + snprintf(a->exec, sizeof a->exec, "%s", "?"); + return a; +} + +static void hist_push(struct ams_app *a, const char *kind, const char *detail, + long epoch, long up) +{ + struct ams_ev *e = &a->hist[a->hist_idx]; + snprintf(e->kind, sizeof e->kind, "%s", kind); + snprintf(e->detail, sizeof e->detail, "%s", detail); + e->epoch = epoch; + e->up = up; + a->hist_idx = (a->hist_idx + 1) % AMS_HIST; + if (a->hist_n < AMS_HIST) a->hist_n++; +} + +/* ---- meow_crash 转发(SVC 格式,best-effort) ---- */ +static void crash_forward(const char *pkg, const char *kind, int code, long epoch, long up) +{ + char msg[256]; + int l = snprintf(msg, sizeof msg, "SVC %s %s %d %ld %ld\n", pkg, kind, code, epoch, up); + if (l <= 0) return; + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) return; + int fl = fcntl(fd, F_GETFL, 0); + if (fl >= 0) fcntl(fd, F_SETFL, fl | O_NONBLOCK); + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + strncpy(a.sun_path, g_crash_sock, sizeof a.sun_path - 1); + if (connect(fd, (struct sockaddr *)&a, sizeof a) != 0) { + if (errno == EINPROGRESS || errno == EWOULDBLOCK) { + struct pollfd pf = { fd, POLLOUT, 0 }; + int r = poll(&pf, 1, 150); + if (r <= 0 || !(pf.revents & POLLOUT)) { close(fd); return; } + } else { close(fd); return; } + } + ssize_t w = write(fd, msg, (size_t)l); + (void)w; + close(fd); +} + +/* ---- stdout 捕获会话 ---- */ +static void out_close(void) +{ + if (g_out.fd >= 0) close(g_out.fd); + memset(&g_out, 0, sizeof g_out); + g_out.fd = -1; +} + +static void out_open(const char *pkg, pid_t pid, long epoch) +{ + out_close(); + /* 路径:/MeowOS/logs//stdout__.log(与 SDK 日志同目录) */ + char logs[AMS_PATH_MAX], pdir[AMS_PATH_MAX], base[AMS_PATH_MAX]; + if (snprintf(logs, sizeof logs, "%s/%s", g_card, AMS_LOGS_REL) >= (int)sizeof logs) return; + if (snprintf(pdir, sizeof pdir, "%s/%s", logs, pkg) >= (int)sizeof pdir) return; + (void)mkdir(logs, 0755); + (void)mkdir(pdir, 0755); + if (snprintf(base, sizeof base, "%s/stdout_%ld_%ld.log", pdir, epoch, (long)pid) + >= (int)sizeof base) return; + int fd = open(base, O_WRONLY | O_APPEND | O_CREAT, 0644); + if (fd < 0) { emit_log("stdout open fail %s: %s", base, strerror(errno)); return; } + snprintf(g_out.pkg, sizeof g_out.pkg, "%s", pkg); + g_out.pid = pid; + g_out.fd = fd; + snprintf(g_out.base, sizeof g_out.base, "%s", base); + struct stat st; + g_out.bytes = (stat(base, &st) == 0) ? (long long)st.st_size : 0; + g_out.active = 1; + emit_log("stdout session open: %s (pid=%ld) -> %s", pkg, (long)pid, base); +} + +/* 超 1MB 轮转:base -> base.1(覆盖),重开 base 续写。 */ +static void out_rotate(void) +{ + if (g_out.fd < 0) return; + close(g_out.fd); + char old[AMS_PATH_MAX]; + if (snprintf(old, sizeof old, "%s.1", g_out.base) < (int)sizeof old) + (void)rename(g_out.base, old); + int fd = open(g_out.base, O_WRONLY | O_APPEND | O_CREAT, 0644); + g_out.fd = fd; + g_out.bytes = 0; + emit_log("stdout rotate -> %s.1", g_out.base); +} + +static void out_append(const char *pkg, pid_t pid, long epoch, long up, const char *text) +{ + if (!g_out.active || g_out.fd < 0) return; + if (strcmp(g_out.pkg, pkg) != 0 || g_out.pid != pid) return; /* 会话不匹配,忽略 */ + char line[AMS_LINE_MAX]; + int l = snprintf(line, sizeof line, "[%ld|up=%ld] %s\n", epoch, up, text ? text : ""); + if (l <= 0) return; + if (g_out.bytes + l > (long long)AMS_FILE_MAX) out_rotate(); + ssize_t w = write(g_out.fd, line, (size_t)l); + if (w > 0) g_out.bytes += w; +} + +/* ---- launcher IPC 转发(xchg 一帧,读回一帧) ---- */ +static int ipc_xchg(uint16_t type, const void *payload, uint32_t len, + uint8_t *rbuf, uint32_t rcap) +{ + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) return -1; + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + strncpy(a.sun_path, g_ipc_sock, sizeof a.sun_path - 1); + if (connect(fd, (struct sockaddr *)&a, sizeof a) != 0) { close(fd); return -1; } + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC, rmagic, rlen; + uint32_t reqid = 0; /* amsd→launcher 控制请求无需回显 */ + uint16_t ver = MEOW_IPC_VERSION, rver, rtype; + memcpy(hdr + 0, &magic, 4); memcpy(hdr + 4, &ver, 2); + memcpy(hdr + 6, &type, 2); memcpy(hdr + 8, &reqid, 4); + memcpy(hdr + 12, &len, 4); + size_t off = 0; + while (off < sizeof hdr) { + ssize_t w = write(fd, hdr + off, sizeof hdr - off); + if (w <= 0) { close(fd); return -1; } + off += (size_t)w; + } + if (len && payload) { + size_t p = 0; + while (p < len) { + ssize_t w = write(fd, (const uint8_t *)payload + p, len - p); + if (w <= 0) { close(fd); return -1; } + p += (size_t)w; + } + } + off = 0; + while (off < sizeof hdr) { + ssize_t r = read(fd, hdr + off, sizeof hdr - off); + if (r <= 0) { close(fd); return -1; } + off += (size_t)r; + } + memcpy(&rmagic, hdr, 4); memcpy(&rver, hdr + 4, 2); + memcpy(&rtype, hdr + 6, 2); memcpy(&rlen, hdr + 12, 4); + if (rmagic != MEOW_IPC_MAGIC || rver != MEOW_IPC_VERSION) { close(fd); return -1; } + if (rlen > rcap) rlen = rcap; + off = 0; + while (off < rlen) { + ssize_t r = read(fd, rbuf + off, rlen - off); + if (r <= 0) { close(fd); return -1; } + off += (size_t)r; + } + close(fd); + return (int)rtype; +} + +/* 向 launcher 申请 start/kill。返回 0=launcher 回 code(a_out 输出);-1=launcher 不通。 */ +static int ams_request_ctl(uint16_t type, const void *payload, uint32_t len, uint32_t *code) +{ + uint8_t rbuf[64]; + int rt = ipc_xchg(type, payload, len, rbuf, sizeof rbuf); + if (rt == MSG_ACK) { + m_ack_t a; + memcpy(&a, rbuf, sizeof a); + if (code) *code = a.code; + return 0; + } + if (rt == MSG_ERR) return MEOW_ERR_INTERNAL; + return -1; +} + +/* ---- 事件处理(launcher 上报) ---- */ +static void handle_launch(char **t, int nt) +{ + if (nt < 4) return; + const char *pkg = t[0], *act = t[1], *chain = t[2]; + pid_t pid = (pid_t)atoi(t[3]); + long epoch = (nt > 4) ? atol(t[4]) : (long)time(NULL); + long up = (nt > 5) ? atol(t[5]) : read_uptime_sec(); + struct ams_app *a = app_get(pkg); + if (!a) return; + a->state = AMS_FG; + a->pid = pid; + snprintf(a->activity, sizeof a->activity, "%s", strcmp(act, "-") ? act : ""); + snprintf(a->chain, sizeof a->chain, "%s", strcmp(chain, "-") ? chain : ""); + a->launch_ms = (long long)now_ms(); + a->launch_epoch = epoch; + a->launch_up = up; + a->launches++; + a->last_kind = 0; a->last_code = 0; a->last_dur_ms = 0; + char detail[192]; + snprintf(detail, sizeof detail, "act=%s chain=%.64s pid=%ld", a->activity, a->chain, (long)pid); + hist_push(a, "launch", detail, epoch, up); + emit_log("LAUNCH %s %s %s pid=%ld", pkg, a->activity, a->chain, (long)pid); + out_open(pkg, pid, epoch); +} + +static void handle_exit(char **t, int nt) +{ + if (nt < 3) return; + const char *pkg = t[0]; + const char *kind = t[1]; /* exit | sig */ + int code = atoi(t[2]); + long long dur = (nt > 3) ? atoll(t[3]) : 0; + long epoch = (nt > 4) ? atol(t[4]) : (long)time(NULL); + long up = (nt > 5) ? atol(t[5]) : read_uptime_sec(); + struct ams_app *a = app_find(pkg); + if (!a) { if (g_out.active && !strcmp(g_out.pkg, pkg)) out_close(); return; } + int abnormal = (strcmp(kind, "sig") == 0) || (strcmp(kind, "exit") == 0 && code != 0); + a->state = AMS_STOPPED; + a->pid = 0; + a->last_kind = (strcmp(kind, "sig") == 0) ? 2 : (code == 0 ? 0 : 1); + a->last_code = code; + a->last_dur_ms = dur; + if (abnormal) { + a->crashes++; + crash_forward(pkg, kind, code, epoch, up); /* 双保险:并入 meow_crash 日志 */ + } + char detail[192]; + if (abnormal) + snprintf(detail, sizeof detail, "%s=%d dur=%lldms crash=%d", kind, code, dur, a->crashes); + else + snprintf(detail, sizeof detail, "%s=%d dur=%lldms", kind, code, dur); + hist_push(a, abnormal ? "crash" : "exit", detail, epoch, up); + emit_log("EXIT %s %s=%d dur=%lld abnormal=%d", pkg, kind, code, dur, abnormal); + if (g_out.active && !strcmp(g_out.pkg, pkg)) out_close(); +} + +static void handle_out(char **t, int nt) +{ + if (nt < 3) return; + const char *pkg = t[0]; + pid_t pid = (pid_t)atoi(t[1]); + long epoch = atol(t[2]); + long up = atol(t[3]); + /* 拼接剩余 tokens(text 可含空格) */ + char text[AMS_LINE_MAX]; + text[0] = '\0'; + int off = 0; + for (int i = 4; i < nt; i++) { + int w = snprintf(text + off, sizeof text - off, "%s%s", off ? " " : "", t[i]); + if (w < 0) break; + off += w; + if ((size_t)off >= sizeof text - 1) { off = (int)sizeof text - 1; break; } + } + text[off] = '\0'; + out_append(pkg, pid, epoch, up, text); +} + +/* ---- am CLI 命令处理 ---- */ +static int cmd_status(char *resp, int rn) +{ + int l = snprintf(resp, rn, "# amd status (running apps)\n"); + int found = 0; + for (int i = 0; i < g_napps; i++) { + struct ams_app *a = &g_apps[i]; + if (a->state == AMS_STOPPED || a->pid <= 0) continue; + found = 1; + unsigned long long dur = a->launch_ms ? (now_ms() - (unsigned long long)a->launch_ms) : 0; + const char *st = (a->state == AMS_FG) ? "fg" : (a->state == AMS_BG) ? "bg" : "stop"; + int m = snprintf(resp + l, rn - l, "RUN %s %s %ld %llu %s\n", + a->pkg, st, (long)a->pid, (unsigned long long)dur, + a->activity); + if (m > 0) l += m; + } + if (!found) { int m = snprintf(resp + l, rn - l, "(none running)\n"); if (m > 0) l += m; } + return l; +} + +static int cmd_list(char *resp, int rn) +{ + int l = snprintf(resp, rn, "# amd register+state\n"); + for (int i = 0; i < g_napps; i++) { + struct ams_app *a = &g_apps[i]; + const char *st = (a->state == AMS_FG) ? "fg" : (a->state == AMS_BG) ? "bg" : "stop"; + const char *lk = (a->last_kind == 2) ? "sig" : (a->last_kind == 1) ? "exit" : "clean"; + int m = snprintf(resp + l, rn - l, "APP %s %s %s %ld %d %d %s %d\n", + a->pkg, a->name, st, (long)a->pid, a->launches, a->crashes, lk, a->last_code); + if (m > 0) l += m; + } + return l; +} + +static int cmd_history(const char *pkg, char *resp, int rn) +{ + int l = snprintf(resp, rn, "# amd history %s\n", pkg && pkg[0] ? pkg : "(all)"); + if (pkg && pkg[0]) { + struct ams_app *a = app_find(pkg); + if (!a) { int m = snprintf(resp + l, rn - l, "(no such app %s)\n", pkg); if (m > 0) l += m; return l; } + for (int k = 0; k < a->hist_n; k++) { + int idx = (a->hist_idx - a->hist_n + k + AMS_HIST) % AMS_HIST; + struct ams_ev *e = &a->hist[idx]; + int m = snprintf(resp + l, rn - l, "EVT %ld %ld %s %s %s\n", + e->epoch, e->up, e->kind, a->pkg, e->detail); + if (m > 0) l += m; + } + } else { + for (int i = 0; i < g_napps; i++) { + struct ams_app *a = &g_apps[i]; + for (int k = 0; k < a->hist_n; k++) { + int idx = (a->hist_idx - a->hist_n + k + AMS_HIST) % AMS_HIST; + struct ams_ev *e = &a->hist[idx]; + int m = snprintf(resp + l, rn - l, "EVT %ld %ld %s %s %s\n", + e->epoch, e->up, e->kind, a->pkg, e->detail); + if (m > 0) l += m; + } + } + } + return l; +} + +static int cmd_start(const char *spec, char *resp, int rn) +{ + /* spec: or / */ + char pkg[MEOW_APP_ID_MAX], act[MEOW_ACT_MAX]; + snprintf(pkg, sizeof pkg, "%s", spec); + act[0] = '\0'; + char *slash = strchr(pkg, '/'); + if (slash) { *slash = 0; snprintf(act, sizeof act, "%s", slash + 1); } + struct ams_app *a = app_find(pkg); + if (!a) { + int m = snprintf(resp, rn, "ERR pkg not registered: %s\n", pkg); + return m > 0 ? m : 0; + } + m_ams_start_t s; + memset(&s, 0, sizeof s); + snprintf(s.app_id, sizeof s.app_id, "%s", pkg); + if (act[0]) snprintf(s.activity, sizeof s.activity, "%s", act); + uint32_t code = MEOW_ERR_INTERNAL; + int rt = ams_request_ctl(MSG_AMS_START, &s, sizeof s, &code); + char detail[192]; + if (rt == 0 && code == MEOW_OK) { + hist_push(a, "ams_start", "intent (forwarded)", (long)time(NULL), read_uptime_sec()); + snprintf(detail, sizeof detail, "ok forwarded"); + emit_log("AMS start %s%s forwarded to launcher", pkg, act[0] ? "/" : ""); + } else if (rt == 0 && code == (uint32_t)MEOW_ERR_BUSY) { + snprintf(detail, sizeof detail, "busy (app running)"); + emit_log("AMS start %s -> BUSY (app running)", pkg); + } else { + snprintf(detail, sizeof detail, "launcher offline"); + emit_log("AMS start %s -> launcher offline", pkg); + } + snprintf(resp, rn, "%s %s/%s\n", strstr(detail, "ok forwarded") ? "OK" : "ERR", + pkg, act[0] ? act : "(default)"); + return (int)strlen(resp); +} + +static int cmd_kill(const char *pkg, char *resp, int rn) +{ + struct ams_app *a = app_find(pkg); + if (!a) { int m = snprintf(resp, rn, "ERR pkg not registered: %s\n", pkg); return m > 0 ? m : 0; } + if (a->state == AMS_STOPPED || a->pid <= 0) { + int m = snprintf(resp, rn, "ERR not running: %s\n", pkg); + return m > 0 ? m : 0; + } + m_ams_kill_t k; + memset(&k, 0, sizeof k); + snprintf(k.app_id, sizeof k.app_id, "%s", pkg); + uint32_t code = 0; + int rt = ams_request_ctl(MSG_AMS_KILL, &k, sizeof k, &code); + if (rt != 0 && a->pid > 0) { + /* 兜底:launcher 不在,直接 SIGTERM(与 launcher 的 SIGTERM 语义一致) */ + kill(a->pid, SIGTERM); + emit_log("AMS kill %s -> direct SIGTERM (launcher offline)", pkg); + } else if (rt != 0) { + return snprintf(resp, rn, "ERR launcher offline: %s\n", pkg); + } else if (code != MEOW_OK) { + emit_log("AMS kill %s -> launcher refused code=%u", pkg, code); + return snprintf(resp, rn, "ERR launcher refused: %s (code=%u)\n", pkg, code); + } + hist_push(a, "ams_kill", "terminate (via launcher)", (long)time(NULL), read_uptime_sec()); + int m = snprintf(resp, rn, "OK terminate %s\n", pkg); + emit_log("AMS kill %s -> terminate", pkg); + return m > 0 ? m : 0; +} + +/* 把一「行」分发。命令 → 生成响应返回 1;事件 → 返回 0。 */ +static int dispatch_line(char *line, char *resp, int rn) +{ + int l = (int)strlen(line); + while (l > 0 && (line[l - 1] == '\n' || line[l - 1] == '\r')) line[--l] = '\0'; + if (l == 0) return 0; + + /* 事件:EV */ + if (strncmp(line, "EV ", 3) == 0) { + char *tok[16]; + int nt = 0; + char *save = NULL, *cur = line + 3; + for (int i = 0; i < (int)(sizeof tok / sizeof tok[0]); i++) { + char *tk = strtok_r(i == 0 ? cur : NULL, " ", &save); + if (!tk) break; + tok[nt++] = tk; + } + if (nt < 1) return 0; + if (!strcmp(tok[0], "LAUNCH")) { handle_launch(tok + 1, nt - 1); } + else if (!strcmp(tok[0], "EXIT")) { handle_exit(tok + 1, nt - 1); } + else if (!strcmp(tok[0], "OUT")) { handle_out(tok + 1, nt - 1); } + return 0; + } + + /* 命令:status/list/history/start/kill */ + char *save = NULL; + char *cmd = strtok_r(line, " ", &save); + if (!cmd) return 0; + char *arg = strtok_r(NULL, " ", &save); + if (!strcmp(cmd, "status")) return cmd_status(resp, rn) > 0; + if (!strcmp(cmd, "list")) return cmd_list(resp, rn) > 0; + if (!strcmp(cmd, "history")) { + if (arg && arg[0]) cmd_history(arg, resp, rn); + else cmd_history(NULL, resp, rn); + return 1; + } + if (!strcmp(cmd, "start")) { + if (!arg) { snprintf(resp, rn, "ERR start needs [/]\n"); return 1; } + cmd_start(arg, resp, rn); + return 1; + } + if (!strcmp(cmd, "kill")) { + if (!arg) { snprintf(resp, rn, "ERR kill needs \n"); return 1; } + cmd_kill(arg, resp, rn); + return 1; + } + snprintf(resp, rn, "ERR unknown cmd: %s\n", cmd); + return 1; +} + +/* ---- 连接处理(读可用字节,处理完整行,命令回响应) ---- */ +/* 读入可用字节并处理所有「完整行」(以 \n 结尾);未完结的尾巴保留在 buf(跨 poll 累积)。 + * 命令行 → 响应累积到 c->resp(返回后由调用方写回)。 + * 返回 1=读到 EOF(对端已关闭写端,应随后收尾关闭);0=还有后续。 */ +static int conn_read(struct ams_conn *c) +{ + int eof = 0; + while (c->n < (int)sizeof c->buf - 1) { + ssize_t r = read(c->fd, c->buf + c->n, sizeof c->buf - 1 - c->n); + if (r == 0) { eof = 1; break; } + if (r < 0) break; /* EAGAIN / EINTR 等:还有后续 */ + c->n += (int)r; + } + c->buf[c->n] = '\0'; + + /* 从 buf 头部逐条切「完整行」,完成 >=1 行后 memmove 保留未完结尾巴。 */ + size_t consumed = 0; + size_t buflen = (size_t)c->n; + while (consumed < buflen) { + char *nl = memchr(c->buf + consumed, '\n', buflen - consumed); + if (!nl) break; /* 剩余为未完结尾巴,保留 */ + *nl = '\0'; + size_t linelen = (size_t)(nl - (c->buf + consumed)); + if (linelen > 0) { + int got = dispatch_line(c->buf + consumed, c->resp + c->resp_n, + (int)sizeof c->resp - c->resp_n); + if (got) c->resp_n += (int)strlen(c->resp + c->resp_n); + } + consumed += linelen + 1; + } + /* 保留未完结尾巴(无 \n)到 buf 头部;丢弃已消费部分。 */ + if (consumed > 0 && consumed < buflen) { + memmove(c->buf, c->buf + consumed, buflen - consumed); + c->n = (int)(buflen - consumed); + c->buf[c->n] = '\0'; + } else if (consumed >= buflen) { + c->n = 0; c->buf[0] = '\0'; + } + return eof; +} + +/* 连接关闭(EOF)后:处理可能残留的最后一行(无 \n),再写回累积响应。 */ +static void conn_finish(struct ams_conn *c) +{ + if (c->n > 0) { + c->buf[c->n] = '\0'; + int got = dispatch_line(c->buf, c->resp + c->resp_n, (int)sizeof c->resp - c->resp_n); + if (got) c->resp_n += (int)strlen(c->resp + c->resp_n); + c->n = 0; + } + if (c->resp_n > 0) { + ssize_t w = write(c->fd, c->resp, (size_t)c->resp_n); + (void)w; + c->resp_n = 0; + } +} + +/* ---- 信号 / socket ---- */ +static void sig_handler(int sig) +{ + g_shutdown = 1; + char ch = 'T'; + ssize_t w = write(g_sigpipe[1], &ch, 1); + (void)w; + (void)sig; +} + +static int setup_signals(void) +{ + if (pipe(g_sigpipe) != 0) return -1; + int rf = fcntl(g_sigpipe[0], F_GETFL, 0); + if (rf >= 0) fcntl(g_sigpipe[0], F_SETFL, rf | O_NONBLOCK); + int wf = fcntl(g_sigpipe[1], F_GETFL, 0); + if (wf >= 0) fcntl(g_sigpipe[1], F_SETFL, wf | O_NONBLOCK); + struct sigaction sa; + memset(&sa, 0, sizeof sa); + sa.sa_handler = sig_handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + signal(SIGPIPE, SIG_IGN); + return 0; +} + +static int setup_socket(void) +{ + unlink(g_sock); + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) { fprintf(stderr, "[meow_amsd] socket: %s\n", strerror(errno)); return -1; } + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + safe_strcpy(a.sun_path, sizeof a.sun_path, g_sock); + if (bind(fd, (struct sockaddr *)&a, sizeof a) != 0) { + fprintf(stderr, "[meow_amsd] bind %s: %s\n", g_sock, strerror(errno)); + close(fd); + return -1; + } + (void)chmod(g_sock, 0666); + if (listen(fd, 8) != 0) { fprintf(stderr, "[meow_amsd] listen: %s\n", strerror(errno)); close(fd); return -1; } + g_listen_fd = fd; + return 0; +} + +static int run_daemon(void) +{ + if (setup_signals() != 0) return 1; + if (setup_socket() != 0) return 1; + boot_ts(g_bootts, sizeof g_bootts); + log_open_card(); + log_cleanup_old(); + registry_scan(); + + fprintf(stderr, "[meow_amsd] up: sock=%s ipc=%s apps=%s card=%s bootts=%s log=%s\n", + g_sock, g_ipc_sock, g_apps_dir, g_card, g_bootts, + g_on_card ? "card" : AMS_TMP_LOG); + + struct pollfd pfds[2 + AMS_MAX_CONNS]; + struct ams_conn conns[AMS_MAX_CONNS]; + memset(conns, 0, sizeof conns); + for (int i = 0; i < AMS_MAX_CONNS; i++) conns[i].fd = -1; + int nfds = 2; + + unsigned long long last_cleanup = 0; + while (!g_shutdown) { + pfds[0].fd = g_listen_fd; pfds[0].events = POLLIN; pfds[0].revents = 0; + pfds[1].fd = g_sigpipe[0]; pfds[1].events = POLLIN; pfds[1].revents = 0; + for (int i = 0; i < nfds - 2; i++) { + pfds[2 + i].fd = conns[i].fd; + pfds[2 + i].events = POLLIN; + pfds[2 + i].revents = 0; + } + int r = poll(pfds, (nfds_t)nfds, AMS_TICK_MS); + if (r < 0) { + if (errno == EINTR) continue; + fprintf(stderr, "[meow_amsd] poll: %s\n", strerror(errno)); + break; + } + if (g_shutdown) break; + + if (pfds[0].revents & POLLIN) { + int cfd = accept(g_listen_fd, NULL, NULL); + if (cfd >= 0) { + int fl = fcntl(cfd, F_GETFL, 0); + if (fl >= 0) fcntl(cfd, F_SETFL, fl | O_NONBLOCK); + if (nfds - 2 < AMS_MAX_CONNS) { + conns[nfds - 2].fd = cfd; + conns[nfds - 2].n = 0; + conns[nfds - 2].resp_n = 0; + nfds++; + } else close(cfd); + } + } + if (pfds[1].revents & POLLIN) { + char tmp[64]; + while (read(g_sigpipe[0], tmp, sizeof tmp) > 0) {} + } + for (int i = 0; i < nfds - 2; i++) { + struct ams_conn *c = &conns[i]; + int ev = pfds[2 + i].revents; + int done = 0; + if (ev & (POLLIN | POLLHUP)) { + if (conn_read(c)) { conn_finish(c); done = 1; } /* EOF:处理残行+回响应后关 */ + } + if (!done && (ev & (POLLHUP | POLLERR | POLLNVAL))) { conn_finish(c); done = 1; } + /* 命令行 → 响应已就绪:写回并关闭(am 单命令即回)。 */ + if (c->resp_n > 0) { + ssize_t w = write(c->fd, c->resp, (size_t)c->resp_n); + (void)w; + c->resp_n = 0; + done = 1; + } + if (done) { + close(c->fd); + c->fd = -1; + for (int j = i; j < nfds - 3; j++) conns[j] = conns[j + 1]; + nfds--; + i--; + } + } + if (now_ms() - last_cleanup >= (unsigned long long)AMS_CLEANUP_MS) { + last_cleanup = now_ms(); + poll_card(); + log_cleanup_old(); + } + } + + if (g_listen_fd >= 0) close(g_listen_fd); + unlink(g_sock); + out_close(); + if (g_log_fd >= 0) close(g_log_fd); + fprintf(stderr, "[meow_amsd] shutdown\n"); + return 0; +} + +int main(int argc, char **argv) +{ + for (int i = 1; i < argc; i++) { + const char *a = argv[i]; + if (!strcmp(a, "--sock") && i + 1 < argc) safe_strcpy(g_sock, sizeof g_sock, argv[++i]); + else if (!strcmp(a, "--ipc-sock") && i + 1 < argc) safe_strcpy(g_ipc_sock, sizeof g_ipc_sock, argv[++i]); + else if (!strcmp(a, "--apps") && i + 1 < argc) safe_strcpy(g_apps_dir, sizeof g_apps_dir, argv[++i]); + else if (!strcmp(a, "--card") && i + 1 < argc) safe_strcpy(g_card, sizeof g_card, argv[++i]); + else if (!strcmp(a, "--crash-sock") && i + 1 < argc) safe_strcpy(g_crash_sock, sizeof g_crash_sock, argv[++i]); + else if (!strcmp(a, "-h") || !strcmp(a, "--help")) { + fprintf(stderr, "usage: %s [--sock

] [--ipc-sock

] [--apps

] " + "[--card

] [--crash-sock

]\n", argv[0]); + return 0; + } else if (a[0] == '-') { fprintf(stderr, "bad option %s\n", a); return 2; } + } + const char *e; + if ((e = getenv("MEOW_AMS_SOCK")) && e[0]) safe_strcpy(g_sock, sizeof g_sock, e); + if ((e = getenv("MEOW_IPC_SOCK")) && e[0]) safe_strcpy(g_ipc_sock, sizeof g_ipc_sock, e); + if ((e = getenv("MEOW_AMSD_APPS")) && e[0]) safe_strcpy(g_apps_dir, sizeof g_apps_dir, e); + if ((e = getenv("MEOW_AMSD_CARD")) && e[0]) safe_strcpy(g_card, sizeof g_card, e); + if ((e = getenv("MEOW_CRASH_SOCK")) && e[0]) safe_strcpy(g_crash_sock, sizeof g_crash_sock, e); + + setvbuf(stdout, NULL, _IONBF, 0); + return run_daemon(); /* svcd 空参拉起 → 前台常驻 */ +} diff --git a/patch_v2/meow_amsd/meow_amsd_host b/patch_v2/meow_amsd/meow_amsd_host new file mode 100755 index 0000000000000000000000000000000000000000..0ade591ad466a2b30ce16914de9d8b5067872589 GIT binary patch literal 76160 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 0) fcntl(fd, F_SETFL, fl | O_NONBLOCK); + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + strncpy(a.sun_path, ams_sock_path(), sizeof a.sun_path - 1); + if (connect(fd, (struct sockaddr *)&a, sizeof a) != 0) { + if (errno == EINPROGRESS || errno == EWOULDBLOCK) { + struct pollfd pf; + pf.fd = fd; pf.events = POLLOUT; pf.revents = 0; + int r = poll(&pf, 1, 150); + if (r <= 0 || !(pf.revents & POLLOUT)) { close(fd); return; } + } else { close(fd); return; } + } + ssize_t w = write(fd, payload, (size_t)len); + (void)w; + close(fd); +} + +/* launch 上报:pkg/activity/chain/pid。amsd 建表项 + 开 stdout 会话。 */ +static void ams_report_launch(const struct app *a, const char *chain, pid_t pid) +{ + if (!a) return; + char act[MEOW_ACT_MAX + 1] = ""; + char ch[MEOW_CHAIN_MAX + 1] = "-"; + if (chain && chain[0]) { + const char *top = strrchr(chain, ';'); + top = top ? top + 1 : chain; + snprintf(act, sizeof act, "%s", top); + snprintf(ch, sizeof ch, "%s", chain); + } + char line[512]; + int l = snprintf(line, sizeof line, "EV LAUNCH %s %s %s %d %ld %ld\n", + a->id, act, ch, (int)pid, (long)time(NULL), ams_uptime()); + if (l > 0) ams_send(line, l); +} + +/* exit 上报:kind(exit|sig)/code/dur_ms。异常退出由 amsd 判 crash + 转发 meow_crash。 */ +static void ams_report_exit(const struct app *a, int status, long long dur_ms) +{ + if (!a) return; + const char *kind; + int code; + if (WIFSIGNALED(status)) { kind = "sig"; code = WTERMSIG(status); } + else { kind = "exit"; code = WIFEXITED(status) ? WEXITSTATUS(status) : 1; } + char line[256]; + int l = snprintf(line, sizeof line, "EV EXIT %s %s %d %lld %ld %ld\n", + a->id, kind, code, dur_ms, (long)time(NULL), ams_uptime()); + if (l > 0) ams_send(line, l); +} + +/* ---- stdout/stderr 管道捕获(AMSD_DESIGN §5):前台 waitpid 循环排空 + 按行转发 ---- */ +static char g_ams_out_line[1024]; /* 未完结行缓冲(无 \n) */ +static int g_ams_out_n = 0; +static char g_ams_out_flush[4096]; /* 已完结、待转发行 */ +static int g_ams_out_flush_n = 0; +static int g_ams_out_had = 0; /* 本次迭代是否排空到数据(驱动短睡) */ + +static void ams_out_flush(void) +{ + if (g_ams_out_flush_n > 0) { + ams_send(g_ams_out_flush, g_ams_out_flush_n); + g_ams_out_flush_n = 0; + } +} + +/* 追加一行(line 为无 \n 的 NUL 串)到 flush 缓冲;满了先 flush。 */ +static void ams_out_line(const struct app *a, pid_t pid, const char *line) +{ + if (!a || !line) return; + int need = snprintf(NULL, 0, "EV OUT %s %d %ld %ld %s\n", + a->id, (int)pid, (long)time(NULL), ams_uptime(), line); + if (g_ams_out_flush_n + need + 1 > (int)sizeof g_ams_out_flush) ams_out_flush(); + if (need < (int)sizeof g_ams_out_flush - 1 - g_ams_out_flush_n) + g_ams_out_flush_n += snprintf(g_ams_out_flush + g_ams_out_flush_n, + sizeof g_ams_out_flush - g_ams_out_flush_n, + "EV OUT %s %d %ld %ld %s\n", + a->id, (int)pid, (long)time(NULL), ams_uptime(), line); +} + +/* 排空读端全部可用字节,按行切分转发;超长行截断标记。 */ +static void ams_drain_stdout(const struct app *a, int fd, pid_t pid) +{ + char tmp[2048]; + ssize_t n; + while ((n = read(fd, tmp, sizeof tmp)) > 0) { + g_ams_out_had = 1; + for (ssize_t i = 0; i < n; i++) { + char c = tmp[i]; + if (c == '\n') { + g_ams_out_line[g_ams_out_n] = '\0'; + ams_out_line(a, pid, g_ams_out_line); + g_ams_out_n = 0; + } else if (c == '\r') { + /* 去尾 \r */ + } else if (g_ams_out_n < (int)sizeof g_ams_out_line - 1) { + g_ams_out_line[g_ams_out_n++] = c; + } else { + /* 超长行:截断标记 + 重置(当前字符丢弃) */ + g_ams_out_line[ (int)sizeof g_ams_out_line - 2 ] = '\0'; + ams_out_line(a, pid, g_ams_out_line); + ams_out_line(a, pid, "[...trunc]"); + g_ams_out_n = 0; + } + } + } +} + +/* ---- amsd start/kill 挂点(主循环单写者)---- */ +static struct { char pkg[MEOW_APP_ID_MAX]; char act[MEOW_ACT_MAX]; int pending; } g_ams_start; +static struct { char pkg[MEOW_APP_ID_MAX]; int pending; } g_ams_kill; + +int meow_ams_pending_start_set(const char *pkg, const char *act) +{ + if (!pkg || !pkg[0]) return -MEOW_ERR_INVAL; + if (g_app_session_active) return -MEOW_ERR_BUSY; + snprintf(g_ams_start.pkg, sizeof g_ams_start.pkg, "%s", pkg); + g_ams_start.act[0] = 0; + if (act && act[0]) snprintf(g_ams_start.act, sizeof g_ams_start.act, "%s", act); + g_ams_start.pending = 1; + return 0; +} + +int meow_ams_take_start(char *pkg, int pn, char *act, int an) +{ + if (!g_ams_start.pending) return 0; + g_ams_start.pending = 0; + if (pkg && pn > 0) snprintf(pkg, pn, "%s", g_ams_start.pkg); + if (act && an > 0) snprintf(act, an, "%s", g_ams_start.act); + return 1; +} + +void meow_ams_pending_kill_set(const char *pkg) +{ + if (!pkg || !pkg[0]) return; + snprintf(g_ams_kill.pkg, sizeof g_ams_kill.pkg, "%s", pkg); + g_ams_kill.pending = 1; +} + +int meow_ams_kill_pending(const char *pkg) +{ + if (!g_ams_kill.pending) return 0; + if (pkg && strcmp(g_ams_kill.pkg, pkg) != 0) return 0; + g_ams_kill.pending = 0; + g_ams_kill.pkg[0] = 0; + return 1; +} + + /* ---- 阶段 D · M1:路由注册表辅助(主循环单写者,无锁)---- */ struct meow_acct *meow_acct_find(const char *app_id) { @@ -990,9 +1173,23 @@ static int launch_app_chain(struct app *a, const char *chain) if (pipe(execpipe) < 0) { logmsg("exec pipe failed: %s", strerror(errno)); return -1; } fcntl(execpipe[1], F_SETFD, FD_CLOEXEC); + /* AMSD_DESIGN §5:stdout/stderr 管道捕获(logcat 思路)。fork 前建管道;子进程 dup2 到 + * stdout/stderr;父进程保留读端(O_NONBLOCK)+ 前台 waitpid 循环排空转发 amsd。 + * 管道建失败仅 log 不崩(App 照常无捕获运行)。写端设 CLOEXEC:exec 成功后关闭写端, + * App 死 → 读端 EOF(崩溃尾巴可排空)。 */ + int out_pipe[2] = { -1, -1 }; + if (pipe(out_pipe) != 0) { + out_pipe[0] = -1; out_pipe[1] = -1; + logmsg("ams: stdout pipe fail: %s", strerror(errno)); + } else { + fcntl(out_pipe[1], F_SETFD, FD_CLOEXEC); + } + pid_t pid = fork(); if (pid < 0) { close(execpipe[0]); close(execpipe[1]); + if (out_pipe[0] >= 0) close(out_pipe[0]); + if (out_pipe[1] >= 0) close(out_pipe[1]); logmsg("fork failed: %s", strerror(errno)); return -1; } if (pid == 0) { @@ -1002,6 +1199,14 @@ static int launch_app_chain(struct app *a, const char *chain) * (读全局 log.level),使 SDK meow_log() 按 app 分离写 logs//_.log 并做级别过滤。 * M2.x 简化:MEOW_LOG_DIR 从 logs/apps//logs 改注入 logs/(目录不存在则建)。 */ close(execpipe[0]); + /* AMSD_DESIGN §5:stdout/stderr 合并重定向到管道写端(dup2 不清 CLOEXEC), + * 原始 out_pipe 两根 fd 关闭;成功 exec 后仅 fd1/2 持有写端,App 死 → EOF。 */ + if (out_pipe[1] >= 0) { + dup2(out_pipe[1], STDOUT_FILENO); + dup2(out_pipe[1], STDERR_FILENO); + close(out_pipe[1]); + close(out_pipe[0]); + } char *argv[] = { a->exec, NULL }; char env_path[320], env_log[320], env_data[320], env_cache[320]; char app_log_dir[288]; @@ -1130,6 +1335,12 @@ static int launch_app_chain(struct app *a, const char *chain) _exit(127); } close(execpipe[1]); + if (out_pipe[1] >= 0) close(out_pipe[1]); /* parent: 关闭写端 */ + int out_fd = out_pipe[0]; /* parent 保留读端,前台循环排空 */ + if (out_fd >= 0) { + int fl = fcntl(out_fd, F_GETFL, 0); + if (fl >= 0) fcntl(out_fd, F_SETFL, fl | O_NONBLOCK); + } int exe_err = 0; ssize_t er = read(execpipe[0], &exe_err, sizeof exe_err); close(execpipe[0]); @@ -1138,9 +1349,13 @@ static int launch_app_chain(struct app *a, const char *chain) strerror(exe_err), exe_err); int st = 0; waitpid(pid, &st, 0); /* reap the failed child */ + if (out_fd >= 0) close(out_fd); return -1; } + /* AMSD_DESIGN §4.1:启动上报(pkg/activity/chain/pid),amsd 建表项 + 开 stdout 捕获会话。 */ + ams_report_launch(a, chain, pid); + /* GESTURE_BACK §2.4:应用启动即写 immersive 状态,watchdog 依此隐藏/保留虚拟返回键 */ meow_write_app_state(a->immersive == '1' ? 1 : 0); @@ -1181,6 +1396,8 @@ static int launch_app_chain(struct app *a, const char *chain) * never fires on this unit, §18.12). Volume is snapped on the first * tap and restored when the sequence completes. */ int status = 0; + unsigned long long ams_t0 = now_ms(); /* AMSD_DESIGN §4.1:运行时长起点 */ + int ams_status_valid = 0; /* 仅真实 waitpid 回收才置 1(规避 sigterm/重启路径 status=0 假干净退出) */ int nav_clean_exit = 0; /* M3:MSG_NAV{EXIT} 主动退出 → 不按崩溃上报 */ int app_prev_vold = 0; int app_seq_hits = 0; @@ -1218,18 +1435,31 @@ static int launch_app_chain(struct app *a, const char *chain) meow_notif_open_clear(); for (;;) { int r = waitpid(pid, &status, WNOHANG); - if (r == pid) break; + if (r == pid) { ams_status_valid = 1; break; } if (r < 0 && errno != EINTR) break; if (sigterm_flag) { logmsg("sigterm during app"); kill(pid, SIGTERM); break; } + /* AMSD_DESIGN §5.1:排空 App stdout/stderr 管道(非阻塞),按行转发 amsd;App 写满不阻塞。 */ + g_ams_out_had = 0; + if (out_fd >= 0) ams_drain_stdout(a, out_fd, pid); /* M3 导航栈:前台会话排空 IPC(App 经 MSG_NAV REPORT/EXIT 上报导航/请求退出)。 * REPORT 更新 nav_stack(meow_ipc_process 内单写者);EXIT → 终止应用回主屏。 */ meow_ipc_process(); + /* AMSD_DESIGN §4.3:amsd `am kill` → 前台循环消费 → SIGTERM(执行器=launcher)。 */ + if (meow_ams_kill_pending(a->id)) { + logmsg("ams: kill %s -> SIGTERM", a->name); + kill(pid, SIGTERM); + usleep(300000); + if (waitpid(pid, &status, WNOHANG) != pid) { kill(pid, SIGKILL); waitpid(pid, &status, 0); } + ams_status_valid = 1; + break; + } if (meow_nav_exit_pending()) { logmsg("nav: app %s MSG_NAV{EXIT} -> terminate, return to home", a->name); nav_clean_exit = 1; kill(pid, SIGTERM); usleep(300000); if (waitpid(pid, &status, WNOHANG) != pid) { kill(pid, SIGKILL); waitpid(pid, &status, 0); } + ams_status_valid = 1; break; } /* §10.5:App 前台顶部下滑(MSG_NOTIF_OPEN)→ 展开通知中心叠加会话。复用电源菜单 @@ -1248,6 +1478,7 @@ static int launch_app_chain(struct app *a, const char *chain) /* App 会话中崩溃(overlay 内 proc_is_zombie 探测):回收僵尸取真实状态, * 走统一应用退出路径(不 SIGCONT 死进程、不恢复死帧;launcher 不崩)。 */ waitpid(pid, &status, 0); + ams_status_valid = 1; break; } } @@ -1259,6 +1490,7 @@ static int launch_app_chain(struct app *a, const char *chain) kill(pid, SIGTERM); usleep(300000); if (waitpid(pid, &status, WNOHANG) != pid) { kill(pid, SIGKILL); waitpid(pid, &status, 0); } + ams_status_valid = 1; break; } /* in-app kill: VOL_DOWN x3 quick taps */ @@ -1323,6 +1555,7 @@ static int launch_app_chain(struct app *a, const char *chain) usleep(500000); kill(pid, SIGKILL); waitpid(pid, &status, 0); + ams_status_valid = 1; break; } } @@ -1373,12 +1606,31 @@ static int launch_app_chain(struct app *a, const char *chain) app_overlay_statusbar(); } } - /* 顶条收合/恢复过渡期把循环睡得短些(~20ms),驱动更平滑的上移出屏;稳定后回 100ms。 */ - usleep(meow_ui_statusbar_animating() ? 20000 : 100000); + /* 顶条收合/恢复过渡期把循环睡得短些(~20ms),驱动更平滑的上移出屏;稳定后回 100ms。 + * AMSD_DESIGN §5.1:本轮排空到 stdout 数据 → 也睡短些,防止 App 写满管道被阻塞。 */ + usleep((meow_ui_statusbar_animating() || g_ams_out_had) ? 20000 : 100000); } /* §10.5:App 前台会话结束,清会话标记(ipc_dispatch 不再受理 MSG_NOTIF_OPEN) */ g_app_session_active = 0; meow_notif_open_clear(); + /* AMSD_DESIGN §5.1:崩溃尾巴不丢 —— App 已死,终局排空剩余 stdout/stderr(含未完结行) + * 先转发 amsd,再报 EXIT / crash。仅当有读端(管道建立成功)才 drain。 */ + if (out_fd >= 0) { + g_ams_out_had = 0; + ams_drain_stdout(a, out_fd, pid); /* 排空全部剩余(App 死 → read 返回 0=EOF) */ + if (g_ams_out_n > 0) { /* 未完结尾行:强制提交 */ + g_ams_out_line[g_ams_out_n] = '\0'; + ams_out_line(a, pid, g_ams_out_line); + g_ams_out_n = 0; + } + ams_out_flush(); + close(out_fd); + out_fd = -1; + } + /* AMSD_DESIGN §4.1:waitpid 回收上报(真实回收才报;规避 sigterm/电源菜单重启 status=0 的 + * 假干净退出)。amsd 依 kind/code 判 crash 并转发 meow_crash(SVC 格式)。 */ + if (ams_status_valid) + ams_report_exit(a, status, (long long)(now_ms() - ams_t0)); /* M2.x:App 异常退出(信号杀 / 非 0 退出码)→ best-effort 直报 meow_crash。 * 判据与 svcd reap_children 一致:failed = !(WIFEXITED && WEXITSTATUS==0)。干净 exit(0) * 不上报;sigterm 关停/电源菜单重启路径 status 保持 0(未 waitpid)→ 视为干净退出不上报。 */ diff --git a/patch_v2/meow_launcherd/main_menu.c b/patch_v2/meow_launcherd/main_menu.c index 43b6ac3..6791401 100644 --- a/patch_v2/meow_launcherd/main_menu.c +++ b/patch_v2/meow_launcherd/main_menu.c @@ -683,6 +683,33 @@ static unsigned long long apps_dir_sig(void) return sig; } +/* M2.83 修补:字库目录签名(根+各 family 目录 mtime)。meow_font_scan_presets 内含逐套 + * sha256 校验(gbk 套 6.8MB 级),绝不能每 2s 轮询全量扫——只在目录签名变化时扫。 */ +static unsigned long long fonts_dir_sig(void) +{ + char root[300]; + snprintf(root, sizeof root, "/usr/data/mnt/sd_0/%s", MEOW_FONTS_CFG); + unsigned long long sig = 1469598103934665603ULL; + struct stat st; + if (stat(root, &st) != 0) return 0; + sig ^= (unsigned long long)st.st_mtime; sig *= 1099511628211ULL; + DIR *d = opendir(root); + if (d) { + struct dirent *de; + while ((de = readdir(d))) { + if (de->d_name[0] == '.') continue; + char p[400]; + snprintf(p, sizeof p, "%s/%s", root, de->d_name); + if (stat(p, &st) == 0 && S_ISDIR(st.st_mode)) { + sig ^= (unsigned long long)st.st_mtime * 256 + (unsigned char)de->d_name[0]; + sig *= 1099511628211ULL; + } + } + closedir(d); + } + return sig; +} + static void run_menu(struct app apps[MAX_APPS], int napps, int state, long sim_tap_ms, long sim_exit_ms) { @@ -700,6 +727,7 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state, long sim_tap_done = 0, sim_exit_done = 0; long meow_last_poll = 0; /* M2.2:MeowOS 后台拔营(卡/网)轮询时间戳 */ unsigned long long apps_sig = 0; /* M2.77:应用目录签名(0=未初始化,首圈建立基线) */ + unsigned long long fonts_sig = 0; /* M2.83:字库目录签名(门控 scan_presets,防 2s 轮询 sha256 风暴) */ load_config(); /* meow.conf on the card: bg_color etc. */ menu_icons_load(apps, napps); /* MD3:应用图标解码一次进缓存(不每帧解码) */ @@ -824,6 +852,45 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state, /* 阶段 D · M0:菜单/主屏循环内排空 IPC(非阻塞;应用可随时查询/声明路由) */ meow_ipc_process(); + /* AMSD_DESIGN §4.3:amsd `am start` → 消费 pending-start(仅菜单态/无前台 App 时拉起)。 + * 镜像 sim-tap 启动路径:launch 后 menu_after_app_exit + dirty 重绘菜单。 */ + { + char spkg[MEOW_APP_ID_MAX], sact[MEOW_ACT_MAX]; + if (meow_ams_take_start(spkg, sizeof spkg, sact, sizeof sact)) { + if (state != 0) { + snprintf(toast, sizeof toast, "AMS START: app list not ready"); + toast_ms = TOAST_MS; + } else { + int idx = -1; + for (int i = 0; i < napps; i++) + if (!strcmp(apps[i].id, spkg)) { idx = i; break; } + if (idx < 0) { + snprintf(toast, sizeof toast, "AMS START: NO APP %s", spkg); + toast_ms = TOAST_MS; + } else { + int ret; + if (sact[0]) { + char chain[MEOW_CHAIN_MAX]; int depth; + if (resolve_chain(spkg, sact, chain, &depth) == MEOW_OK) + ret = launch_activity(&apps[idx], chain); + else { + snprintf(toast, sizeof toast, "AMS: NO ROUTE %s/%s", spkg, sact); + toast_ms = TOAST_MS; ret = 0; + } + } else { + ret = launch_app(&apps[idx]); + } + if (ret != 0) { + snprintf(toast, sizeof toast, "CANNOT START: %s", apps[idx].name); + toast_ms = TOAST_MS; + } + menu_after_app_exit(ret == 0); + last_input_ms = now_ms(); /* M2.17:回主界面即视为输入 */ + dirty = 1; + } + } + } + } meow_notif_tick(); /* M2a:通知 TTL 10s 转储(§8)*/ meow_media_tick(); /* 阶段D附录B:媒体源死亡(播放中无 META 超时)清槽回空态 */ @@ -898,7 +965,15 @@ static void run_menu(struct app apps[MAX_APPS], int napps, int state, int was_nocard = (state == 1); if (!mfont_ready && meow_font_ensure()) { dirty = 1; logmsg("hotplug: font loaded late"); } if (mfont_ready) meow_font_reload_multifont(); /* M2.5x:卡挂载后重配多字体(此前无全局可配) */ - meow_font_scan_presets(); /* M2.82+:卡就绪后重扫字库(启动时卡未挂载会只有默认项) */ + /* M2.83 修补:字库重扫改为签名门控——扫描含逐套 sha256(gbk 套 6.8MB 级), + * 每 2s 全量扫会把 CPU 烧满(真机实测 100%)。只在字体目录签名变化时扫。 */ + { + unsigned long long fsig = fonts_dir_sig(); + if (fsig != fonts_sig) { + fonts_sig = fsig; + meow_font_scan_presets(); + } + } if (was_nocard || state != 0 || napps == 0) { struct app fresh[MAX_APPS]; int fn = scan_apps(fresh); diff --git a/patch_v2/meow_launcherd/meow_ipc.h b/patch_v2/meow_launcherd/meow_ipc.h index 23f4bb4..bc2f97a 100644 --- a/patch_v2/meow_launcherd/meow_ipc.h +++ b/patch_v2/meow_launcherd/meow_ipc.h @@ -72,6 +72,10 @@ enum { MSG_PICKER_RESULT = 0x0071, /* ↓ picker 返回值(候选结果回 A) */ MSG_META = 0x0072, /* ↑ 媒体会话上报元数据/进度/状态(阶段 D 附录 B) */ MSG_PLAYCTL = 0x0073, /* ↓ 播放控制下发/↑ 控制器转发到最近活跃媒体会话 */ + /* ---- amsd 控制(AMSD_DESIGN §4.2):amsd→launcher,申请拉起/终止某 App ---- + * 语义:amsd 为「启动/终止」决策者 → launcher(执行器)执行。payload 见下。 */ + MSG_AMS_START = 0x00A0, /* → 请求 launcher 拉起某 App(pkg + 可选 activity) */ + MSG_AMS_KILL = 0x00A1, /* → 请求 launcher 终止某 App(SIGTERM 语义) */ MSG_SYS = 0x00F0 /* ↓ 系统事件(守护关闭/服务死亡/播放器状态) */ }; @@ -319,4 +323,18 @@ typedef struct m_power_status { char msg[96]; /* 结果/状态文本 */ } m_power_status_t; +/* ---- amsd 控制(AMSD_DESIGN §4.2)---- */ + +/* MSG_AMS_START →:请求 launcher 拉起某 App。app_id=包名(权威);activity 空=裸启动 + * (launcher launch_app),非空=resolve_chain+launch_activity。 */ +typedef struct m_ams_start { + char app_id[MEOW_APP_ID_MAX]; /* 32 */ + char activity[MEOW_ACT_MAX]; /* 64;空=裸启动 */ +} m_ams_start_t; /* 96 B */ + +/* MSG_AMS_KILL →:请求 launcher 终止某 App(SIGTERM 语义,执行器=launcher)。 */ +typedef struct m_ams_kill { + char app_id[MEOW_APP_ID_MAX]; /* 32 */ +} m_ams_kill_t; /* 32 B */ + #endif /* MEOW_IPC_H */ diff --git a/patch_v2/meow_launcherd/meow_launcher_internal.h b/patch_v2/meow_launcherd/meow_launcher_internal.h index ebd6b78..b794f75 100644 --- a/patch_v2/meow_launcherd/meow_launcher_internal.h +++ b/patch_v2/meow_launcherd/meow_launcher_internal.h @@ -642,6 +642,12 @@ void meow_nav_report(const char *app_id, uint32_t depth, const char *current); void meow_nav_exit(void); /* 清栈(应用退出/EXIT) */ void meow_nav_request_exit(void); /* MSG_NAV{EXIT}:置位让前台 waitpid 循环终止 app */ int meow_nav_exit_pending(void); /* 读取并清除退出请求(前台 launch_* 循环轮询) */ +/* ---- amsd 控制挂点(AMSD_DESIGN §4.3):主循环单写者,跨模块声明 ---- + * pending-start/kill 仅在主循环上下文写入与消费(ipc_dispatch 写、run_menu 前台循环/菜单循环读)。 */ +int meow_ams_pending_start_set(const char *pkg, const char *act); /* 有前台 App 时拒绝(返回 -MEOW_ERR_BUSY) */ +int meow_ams_take_start(char *pkg, int pn, char *act, int an); /* 1=取到待拉起 App(清位);0=无 */ +void meow_ams_pending_kill_set(const char *pkg); /* 请求终止某 pkg */ +int meow_ams_kill_pending(const char *pkg); /* 匹配则清除并返回 1(前台循环轮询) */ void meow_dac_vol_write(int pct); void meow_dac_vol_write_throttled(void); diff --git a/patch_v2/meow_launcherd/meow_launcherd b/patch_v2/meow_launcherd/meow_launcherd index 521aa372b90a19742badacfe9a6210ed7c1a8085..9e2ad182d62d1a35da63ab9079bf4884ed7c4526 100755 GIT binary patch delta 187793 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%0Dj)v_Bszkbd%uC<8u_5izfIJ-d6wTMj&LZ0--NT# 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 delta 183352 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 j^LWSKHG8&0j`2P@4payload, m->plen < (uint16_t)sizeof s ? m->plen : (uint16_t)sizeof s); + s.app_id[MEOW_APP_ID_MAX - 1] = 0; + s.activity[MEOW_ACT_MAX - 1] = 0; + int rc = meow_ams_pending_start_set(s.app_id, s.activity); + m_ack_t a; + a.code = (uint32_t)(rc < 0 ? -rc : MEOW_OK); /* 0=OK;MEOW_ERR_BUSY=有前台 App */ + a.status = 0; + ipc_send(m->fd, MSG_ACK, m->req_id, &a, sizeof a); + logmsg("ipc: AMS_START app=%s act=\"%s\" -> ACK code=%u", s.app_id, s.activity, a.code); + break; + } + case MSG_AMS_KILL: { + m_ams_kill_t k; + memset(&k, 0, sizeof k); + memcpy(&k, m->payload, m->plen < (uint16_t)sizeof k ? m->plen : (uint16_t)sizeof k); + k.app_id[MEOW_APP_ID_MAX - 1] = 0; + m_ack_t a; + if (g_app_session_active) { + meow_ams_pending_kill_set(k.app_id); + a.code = MEOW_OK; + } else { + a.code = (uint32_t)MEOW_ERR_NOENT; /* 无前台 App 可终止 */ + } + a.status = 0; + ipc_send(m->fd, MSG_ACK, m->req_id, &a, sizeof a); + logmsg("ipc: AMS_KILL app=%s -> ACK code=%u", k.app_id, a.code); + break; + } /* M2a:通知存储(NOTIFICATION_SYSTEM.md §4/§7/§8)。IPC 线程只入队,此处在主循环 * 单写者落存储 + 回 ACK(与 HELLO/QUERY 同一线程模型,绝不在 socket IO 阻塞)。 */ case MSG_NOTIFY: { diff --git a/patch_v2/meow_svcd/S89meow_svcd b/patch_v2/meow_svcd/S89meow_svcd index 7f4a4b3..679b7e1 100755 --- a/patch_v2/meow_svcd/S89meow_svcd +++ b/patch_v2/meow_svcd/S89meow_svcd @@ -110,6 +110,22 @@ EOF chmod 644 /usr/data/meow/services.d/meow_crash.conf echo -n "provisioned crash.conf " fi + if [ -f /usr/data/meow/services.d/meow_amsd.conf ]; then + echo -n "amsd.conf exists " + else + cat > /usr/data/meow/services.d/meow_amsd.conf <<'EOF' +exec=/usr/bin/meow_amsd +args= +enabled=1 +restart=on-fail +backoff_ms=2000 +max_restart=5 +trigger=boot +cap= +EOF + chmod 644 /usr/data/meow/services.d/meow_amsd.conf + echo -n "provisioned amsd.conf " + fi else echo -n "skip svc confs (/usr/data/meow not writable) " fi