1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2018/08/11 Bernard the first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #ifndef RT_DL_MODULE_H__ 12*10465441SEvalZero #define RT_DL_MODULE_H__ 13*10465441SEvalZero 14*10465441SEvalZero #include <rtthread.h> 15*10465441SEvalZero 16*10465441SEvalZero #define RT_DLMODULE_STAT_INIT 0x00 17*10465441SEvalZero #define RT_DLMODULE_STAT_RUNNING 0x01 18*10465441SEvalZero #define RT_DLMODULE_STAT_CLOSING 0x02 19*10465441SEvalZero #define RT_DLMODULE_STAT_CLOSED 0x03 20*10465441SEvalZero 21*10465441SEvalZero struct rt_dlmodule; 22*10465441SEvalZero typedef void* rt_addr_t; 23*10465441SEvalZero 24*10465441SEvalZero typedef void (*rt_dlmodule_init_func_t)(struct rt_dlmodule *module); 25*10465441SEvalZero typedef void (*rt_dlmodule_cleanup_func_t)(struct rt_dlmodule *module); 26*10465441SEvalZero typedef int (*rt_dlmodule_entry_func_t)(int argc, char** argv); 27*10465441SEvalZero 28*10465441SEvalZero struct rt_dlmodule 29*10465441SEvalZero { 30*10465441SEvalZero struct rt_object parent; 31*10465441SEvalZero rt_list_t object_list; /* objects inside this module */ 32*10465441SEvalZero 33*10465441SEvalZero rt_uint8_t stat; /* status of module */ 34*10465441SEvalZero 35*10465441SEvalZero /* main thread of this module */ 36*10465441SEvalZero rt_uint16_t priority; 37*10465441SEvalZero rt_uint32_t stack_size; 38*10465441SEvalZero struct rt_thread *main_thread; 39*10465441SEvalZero /* the return code */ 40*10465441SEvalZero int ret_code; 41*10465441SEvalZero 42*10465441SEvalZero /* VMA base address for the first LOAD segment */ 43*10465441SEvalZero rt_uint32_t vstart_addr; 44*10465441SEvalZero 45*10465441SEvalZero /* module entry, RT_NULL for dynamic library */ 46*10465441SEvalZero rt_dlmodule_entry_func_t entry_addr; 47*10465441SEvalZero char *cmd_line; /* command line */ 48*10465441SEvalZero 49*10465441SEvalZero rt_addr_t mem_space; /* memory space */ 50*10465441SEvalZero rt_uint32_t mem_size; /* sizeof memory space */ 51*10465441SEvalZero 52*10465441SEvalZero /* init and clean function */ 53*10465441SEvalZero rt_dlmodule_init_func_t init_func; 54*10465441SEvalZero rt_dlmodule_cleanup_func_t cleanup_func; 55*10465441SEvalZero 56*10465441SEvalZero rt_uint16_t nref; /* reference count */ 57*10465441SEvalZero 58*10465441SEvalZero rt_uint16_t nsym; /* number of symbols in the module */ 59*10465441SEvalZero struct rt_module_symtab *symtab; /* module symbol table */ 60*10465441SEvalZero }; 61*10465441SEvalZero 62*10465441SEvalZero struct rt_dlmodule *dlmodule_create(void); 63*10465441SEvalZero rt_err_t dlmodule_destroy(struct rt_dlmodule* module); 64*10465441SEvalZero 65*10465441SEvalZero struct rt_dlmodule *dlmodule_self(void); 66*10465441SEvalZero 67*10465441SEvalZero struct rt_dlmodule *dlmodule_load(const char* pgname); 68*10465441SEvalZero struct rt_dlmodule *dlmodule_exec(const char* pgname, const char* cmd, int cmd_size); 69*10465441SEvalZero void dlmodule_exit(int ret_code); 70*10465441SEvalZero 71*10465441SEvalZero struct rt_dlmodule *dlmodule_find(const char *name); 72*10465441SEvalZero 73*10465441SEvalZero rt_uint32_t dlmodule_symbol_find(const char *sym_str); 74*10465441SEvalZero 75*10465441SEvalZero #endif 76