尝试增加/proc
This commit is contained in:
@@ -18,12 +18,10 @@ typedef struct ns_node
|
||||
node_type_t type; //!< 节点类型
|
||||
struct ns_node *parent; //!< 父节点
|
||||
struct ns_node *next; //!< 下一个
|
||||
// union
|
||||
// {
|
||||
struct ns_node *sub; //!< 子树
|
||||
obj_handler_t svr_hd; //!< 服务节点
|
||||
// };
|
||||
int ref; //!< 引用计数
|
||||
struct ns_node *sub; //!< 子树
|
||||
obj_handler_t svr_hd; //!< 服务节点
|
||||
int belong_pid; //!< 属于哪个pid
|
||||
int ref; //!< 引用计数
|
||||
} ns_node_t;
|
||||
typedef struct ns
|
||||
{
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "u_rpc_svr.h"
|
||||
#include "u_slist.h"
|
||||
#include "u_types.h"
|
||||
#include "u_mutex.h"
|
||||
typedef struct watch_entry
|
||||
{
|
||||
pid_t watch_pid;//!<被监控的pid
|
||||
@@ -30,6 +31,7 @@ typedef struct pm
|
||||
{
|
||||
rpc_svr_obj_t svr_obj;
|
||||
slist_head_t watch_head;
|
||||
u_mutex_t lock;
|
||||
} pm_t;
|
||||
|
||||
#define PM_CREATE_DUMMY_TASK 0x1
|
||||
@@ -59,7 +61,7 @@ static inline pm_flags_t pm_flags_init(uint8_t mem_block, uint8_t flags, pid_t p
|
||||
};
|
||||
}
|
||||
|
||||
void pm_svr_obj_init(pm_t *pm);
|
||||
int pm_svr_obj_init(pm_t *pm);
|
||||
int pm_rpc_run_app(const char *path, pm_flags_t pm_flags, char *params, int params_len_or_app_size, char *env, int envs_len);
|
||||
int pm_rpc_kill_task(int src_pid, int pid, int flags, int exit_code);
|
||||
|
||||
|
||||
@@ -28,8 +28,7 @@ RPC_GENERATION_OP6(pm_t, PM_PROT, PM_RUN_APP, run_app,
|
||||
rpc_ref_array_uint32_t_uint8_t_96_t, rpc_array_uint32_t_uint8_t_96_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, params_len,
|
||||
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, envs,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len
|
||||
)
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len)
|
||||
{
|
||||
int16_t ret = -1;
|
||||
|
||||
@@ -38,17 +37,17 @@ RPC_GENERATION_OP6(pm_t, PM_PROT, PM_RUN_APP, run_app,
|
||||
path->data[path->len - 1] = 0;
|
||||
}
|
||||
ret = pm_rpc_run_app((char *)path->data, pm_flags_init_raw(pm_flags->data),
|
||||
(char *)params->data, params_len->data, (char *)envs->data, envs_len->data);
|
||||
(char *)params->data, params_len->data, (char *)envs->data, envs_len->data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
RPC_GENERATION_DISPATCH6(pm_t, PM_PROT, PM_RUN_APP, run_app,
|
||||
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pm_flags,
|
||||
rpc_ref_array_uint32_t_uint8_t_96_t, rpc_array_uint32_t_uint8_t_96_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, params_len,
|
||||
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, envs,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len)
|
||||
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pm_flags,
|
||||
rpc_ref_array_uint32_t_uint8_t_96_t, rpc_array_uint32_t_uint8_t_96_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, params_len,
|
||||
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, envs,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len)
|
||||
|
||||
/*kill_task*/
|
||||
RPC_GENERATION_OP3(pm_t, PM_PROT, PM_KILL_TASK, kill_task,
|
||||
@@ -114,6 +113,7 @@ RPC_GENERATION_OP2(pm_t, PM_PROT, PM_WATCH_PID, del_watch_pid,
|
||||
RPC_GENERATION_DISPATCH2(pm_t, PM_PROT, PM_WATCH_PID, del_watch_pid,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pid,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags)
|
||||
|
||||
/*dispatch*/
|
||||
RPC_DISPATCH4(pm_t, PM_PROT, typeof(PM_RUN_APP),
|
||||
PM_RUN_APP, run_app,
|
||||
@@ -121,8 +121,13 @@ RPC_DISPATCH4(pm_t, PM_PROT, typeof(PM_RUN_APP),
|
||||
PM_WATCH_PID, watch_pid,
|
||||
PM_COPY_DATA, copy_data)
|
||||
|
||||
void pm_svr_obj_init(pm_t *pm)
|
||||
int pm_svr_obj_init(pm_t *pm)
|
||||
{
|
||||
int ret;
|
||||
|
||||
rpc_svr_obj_init(&pm->svr_obj, rpc_pm_t_dispatch, PM_PROT);
|
||||
slist_init(&pm->watch_head);
|
||||
ret = u_mutex_init(&pm->lock, handler_alloc());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include "sig_svr.h"
|
||||
#include "u_sema.h"
|
||||
#include "u_task.h"
|
||||
#include <ns_cli.h>
|
||||
|
||||
#ifdef CONFIG_USING_SIG
|
||||
|
||||
static sig_t sig_obj;
|
||||
@@ -104,5 +106,13 @@ void sig_init(void)
|
||||
assert(sema_wait_hd != HANDLER_INVALID);
|
||||
tag = facotry_create_sema(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, sema_wait_hd), 0, 1);
|
||||
assert(msg_tag_get_val(tag) >= 0);
|
||||
|
||||
char proc_path[20];
|
||||
umword_t pid;
|
||||
|
||||
task_get_pid(TASK_THIS, &pid);
|
||||
|
||||
snprintf(proc_path, sizeof(proc_path), "/proc/%d", pid);
|
||||
assert(ns_register(proc_path, sig_ipc, 0)>=0 && "task proc init failed.\n");
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user