From 9de2c09a27ffb9bf7200dc51b7b6b4b36c1dbdf0 Mon Sep 17 00:00:00 2001 From: liankong Date: Mon, 31 Mar 2025 15:40:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0kpmmgr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- userspace/kpmmgr/jni/kpmmgr.c | 48 +++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/userspace/kpmmgr/jni/kpmmgr.c b/userspace/kpmmgr/jni/kpmmgr.c index ff0a07e1..f594c722 100644 --- a/userspace/kpmmgr/jni/kpmmgr.c +++ b/userspace/kpmmgr/jni/kpmmgr.c @@ -13,13 +13,36 @@ #define CMD_KPM_CONTROL_MAX 7 // 控制代码 -#define SUKISU_KPM_LOAD 1 -#define SUKISU_KPM_UNLOAD 2 -#define SUKISU_KPM_NUM 3 -#define SUKISU_KPM_LIST 4 -#define SUKISU_KPM_INFO 5 -#define SUKISU_KPM_CONTROL 6 -#define SUKISU_KPM_PRINT 7 +// prctl(xxx, 28, "PATH", "ARGS") +// success return 0, error return -N +#define SUKISU_KPM_LOAD 28 + +// prctl(xxx, 29, "NAME") +// success return 0, error return -N +#define SUKISU_KPM_UNLOAD 29 + +// num = prctl(xxx, 30) +// error return -N +// success return +num or 0 +#define SUKISU_KPM_NUM 30 + +// prctl(xxx, 31, Buffer, BufferSize) +// success return +out, error return -N +#define SUKISU_KPM_LIST 31 + +// prctl(xxx, 32, "NAME", Buffer[256]) +// success return +out, error return -N +#define SUKISU_KPM_INFO 32 + +// prctl(xxx, 33, "NAME", "ARGS") +// success return KPM's result value +// error return -N +#define SUKISU_KPM_CONTROL 33 + +// prctl(xxx, 34, buffer, bufferSize) +// success return KPM's result value +// error return -N +#define SUKISU_KPM_VERSION 34 #define CONTROL_CODE(n) (CMD_KPM_CONTROL + n - 1) @@ -32,7 +55,7 @@ void print_usage(const char *prog) { printf(" list List loaded KPM modules\n"); printf(" info Get info of a KPM module\n"); printf(" control Send control command to a KPM module\n"); - printf(" print Print KPM module list to stdout\n"); + printf(" version Print KPM Loader version\n"); } int main(int argc, char *argv[]) { @@ -72,9 +95,12 @@ int main(int argc, char *argv[]) { } else if (strcmp(argv[1], "control") == 0 && argc >= 4) { // 控制 KPM 模块 ret = prctl(KSU_OPTIONS, CONTROL_CODE(SUKISU_KPM_CONTROL), argv[2], argv[3], &out); - } else if (strcmp(argv[1], "print") == 0) { - // 在 stdout 输出 KPM 列表 - ret = prctl(KSU_OPTIONS, CONTROL_CODE(SUKISU_KPM_PRINT), NULL, NULL, &out); + } else if (strcmp(argv[1], "version") == 0) { + char buffer[1024] = {0}; + ret = prctl(KSU_OPTIONS, CONTROL_CODE(SUKISU_KPM_VERSION), buffer, sizeof(buffer), &out); + if (ret >= 0) { + printf("%s", buffer); + } } else { print_usage(argv[0]); return 1;