123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2018/08/11 Bernard the first version
- */
- #ifndef RT_DL_MODULE_H__
- #define RT_DL_MODULE_H__
- #include <rtthread.h>
- #define RT_DLMODULE_STAT_INIT 0x00
- #define RT_DLMODULE_STAT_RUNNING 0x01
- #define RT_DLMODULE_STAT_CLOSING 0x02
- #define RT_DLMODULE_STAT_CLOSED 0x03
- struct rt_dlmodule;
- typedef void* rt_addr_t;
- typedef void (*rt_dlmodule_init_func_t)(struct rt_dlmodule *module);
- typedef void (*rt_dlmodule_cleanup_func_t)(struct rt_dlmodule *module);
- typedef int (*rt_dlmodule_entry_func_t)(int argc, char** argv);
- struct rt_dlmodule
- {
- struct rt_object parent;
- rt_list_t object_list; /* objects inside this module */
- rt_uint8_t stat; /* status of module */
- /* main thread of this module */
- rt_uint16_t priority;
- rt_uint32_t stack_size;
- struct rt_thread *main_thread;
- /* the return code */
- int ret_code;
- /* VMA base address for the first LOAD segment */
- rt_uint32_t vstart_addr;
- /* module entry, RT_NULL for dynamic library */
- rt_dlmodule_entry_func_t entry_addr;
- char *cmd_line; /* command line */
- rt_addr_t mem_space; /* memory space */
- rt_uint32_t mem_size; /* sizeof memory space */
- /* init and clean function */
- rt_dlmodule_init_func_t init_func;
- rt_dlmodule_cleanup_func_t cleanup_func;
- rt_uint16_t nref; /* reference count */
- rt_uint16_t nsym; /* number of symbols in the module */
- struct rt_module_symtab *symtab; /* module symbol table */
- };
- struct rt_dlmodule_ops
- {
- rt_uint8_t *(*load)(const char* filename); /* load dlmodule file data */
- rt_err_t (*unload)(rt_uint8_t *param); /* unload dlmodule file data */
- };
- struct rt_dlmodule *dlmodule_create(void);
- rt_err_t dlmodule_destroy(struct rt_dlmodule* module);
- struct rt_dlmodule *dlmodule_self(void);
- struct rt_dlmodule *dlmodule_load(const char* pgname);
- struct rt_dlmodule *dlmodule_exec(const char* pgname, const char* cmd, int cmd_size);
- #if defined(RT_USING_CUSTOM_DLMODULE)
- struct rt_dlmodule* dlmodule_load_custom(const char* filename, struct rt_dlmodule_ops* ops);
- struct rt_dlmodule* dlmodule_exec_custom(const char* pgname, const char* cmd, int cmd_size, struct rt_dlmodule_ops* ops);
- #endif
- void dlmodule_exit(int ret_code);
- struct rt_dlmodule *dlmodule_find(const char *name);
- rt_uint32_t dlmodule_symbol_find(const char *sym_str);
- #endif
|