Lines Matching full:module

32 /* set the name of module */
33 static void _dlmodule_set_name(struct rt_dlmodule *module, const char *path) in _dlmodule_set_name() argument
39 object = &(module->parent); in _dlmodule_set_name()
103 struct rt_dlmodule *module; in _dlmodule_exit() local
105 module = dlmodule_self(); in _dlmodule_exit()
106 if (!module) return; /* not a module thread */ in _dlmodule_exit()
109 if (module->stat == RT_DLMODULE_STAT_RUNNING) in _dlmodule_exit()
115 module->stat = RT_DLMODULE_STAT_CLOSING; in _dlmodule_exit()
117 /* suspend all threads in this module */ in _dlmodule_exit()
118 for (node = module->object_list.next; node != &(module->object_list); node = node->next) in _dlmodule_exit()
146 struct rt_dlmodule *module = (struct rt_dlmodule*)parameter; in _dlmodule_thread_entry() local
148 if (module == RT_NULL || module->cmd_line == RT_NULL) in _dlmodule_thread_entry()
152 if (module->cmd_line) in _dlmodule_thread_entry()
155 argc = _rt_module_split_arg((char *)module->cmd_line, rt_strlen(module->cmd_line), argv); in _dlmodule_thread_entry()
159 /* set status of module */ in _dlmodule_thread_entry()
160 module->stat = RT_DLMODULE_STAT_RUNNING; in _dlmodule_thread_entry()
163 module->entry_addr, in _dlmodule_thread_entry()
164 module->cmd_line); in _dlmodule_thread_entry()
166 if (module->entry_addr) in _dlmodule_thread_entry()
167 module->entry_addr(argc, argv); in _dlmodule_thread_entry()
177 struct rt_dlmodule *module = RT_NULL; in dlmodule_create() local
179 module = (struct rt_dlmodule*) rt_object_allocate(RT_Object_Class_Module, "module"); in dlmodule_create()
180 if (module) in dlmodule_create()
182 module->stat = RT_DLMODULE_STAT_INIT; in dlmodule_create()
185 module->priority = RT_THREAD_PRIORITY_MAX - 1; in dlmodule_create()
186 module->stack_size = 2048; in dlmodule_create()
188 rt_list_init(&(module->object_list)); in dlmodule_create()
191 return module; in dlmodule_create()
194 void dlmodule_destroy_subthread(struct rt_dlmodule *module, rt_thread_t thread) in dlmodule_destroy_subthread() argument
196 RT_ASSERT(thread->module_id == module); in dlmodule_destroy_subthread()
240 rt_err_t dlmodule_destroy(struct rt_dlmodule* module) in dlmodule_destroy() argument
247 if (module == RT_NULL) in dlmodule_destroy()
250 /* can not destroy a running module */ in dlmodule_destroy()
251 if (module->stat == RT_DLMODULE_STAT_RUNNING) in dlmodule_destroy()
254 /* do module cleanup */ in dlmodule_destroy()
255 if (module->cleanup_func) in dlmodule_destroy()
258 module->cleanup_func(module); in dlmodule_destroy()
262 // list_object(&(module->object_list)); in dlmodule_destroy()
264 /* cleanup for all kernel objects inside module*/ in dlmodule_destroy()
269 /* detach/delete all threads in this module */ in dlmodule_destroy()
270 for (node = module->object_list.next; node != &(module->object_list); ) in dlmodule_destroy()
285 dlmodule_destroy_subthread(module, (rt_thread_t)object); in dlmodule_destroy()
326 LOG_E("Unsupported oject type in module."); in dlmodule_destroy()
335 dlmodule_destroy_subthread(module, (rt_thread_t)object); in dlmodule_destroy()
374 LOG_E("Unsupported oject type in module."); in dlmodule_destroy()
381 if (module->cmd_line) rt_free(module->cmd_line); in dlmodule_destroy()
382 /* release module symbol table */ in dlmodule_destroy()
383 for (i = 0; i < module->nsym; i ++) in dlmodule_destroy()
385 rt_free((void *)module->symtab[i].name); in dlmodule_destroy()
387 if (module->symtab != RT_NULL) in dlmodule_destroy()
389 rt_free(module->symtab); in dlmodule_destroy()
392 /* destory module */ in dlmodule_destroy()
393 rt_free(module->mem_space); in dlmodule_destroy()
394 /* delete module object */ in dlmodule_destroy()
395 rt_object_delete((rt_object_t)module); in dlmodule_destroy()
427 struct rt_dlmodule *module = RT_NULL; in dlmodule_load() local
452 rt_kprintf("Module: magic error\n"); in dlmodule_load()
459 rt_kprintf("Module: ELF class error\n"); in dlmodule_load()
463 module = dlmodule_create(); in dlmodule_load()
464 if (!module) goto __exit; in dlmodule_load()
466 /* set the name of module */ in dlmodule_load()
467 _dlmodule_set_name(module, filename); in dlmodule_load()
469 LOG_D("rt_module_load: %.*s", RT_NAME_MAX, module->parent.name); in dlmodule_load()
473 ret = dlmodule_load_relocated_object(module, module_ptr); in dlmodule_load()
477 ret = dlmodule_load_shared_object(module, module_ptr); in dlmodule_load()
481 rt_kprintf("Module: unsupported elf type\n"); in dlmodule_load()
488 /* release module data */ in dlmodule_load()
491 /* increase module reference count */ in dlmodule_load()
492 module->nref ++; in dlmodule_load()
496 rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, module->mem_space, module->mem_size); in dlmodule_load()
497 rt_hw_cpu_icache_ops(RT_HW_CACHE_INVALIDATE, module->mem_space, module->mem_size); in dlmodule_load()
500 /* set module initialization and cleanup function */ in dlmodule_load()
501 module->init_func = dlsym(module, "module_init"); in dlmodule_load()
502 module->cleanup_func = dlsym(module, "module_cleanup"); in dlmodule_load()
503 module->stat = RT_DLMODULE_STAT_INIT; in dlmodule_load()
504 /* do module initialization */ in dlmodule_load()
505 if (module->init_func) in dlmodule_load()
507 module->init_func(module); in dlmodule_load()
510 return module; in dlmodule_load()
515 if (module) dlmodule_destroy(module); in dlmodule_load()
522 struct rt_dlmodule *module = RT_NULL; in dlmodule_exec() local
524 module = dlmodule_load(pgname); in dlmodule_exec()
525 if (module) in dlmodule_exec()
527 if (module->entry_addr) in dlmodule_exec()
529 /* exec this module */ in dlmodule_exec()
532 module->cmd_line = rt_strdup(cmd); in dlmodule_exec()
535 … if (module->priority > RT_THREAD_PRIORITY_MAX) module->priority = RT_THREAD_PRIORITY_MAX - 1; in dlmodule_exec()
536 … if (module->stack_size < 2048 || module->stack_size > (1024 * 32)) module->stack_size = 2048; in dlmodule_exec()
538 tid = rt_thread_create(module->parent.name, _dlmodule_thread_entry, (void*)module, in dlmodule_exec()
539 module->stack_size, module->priority, 10); in dlmodule_exec()
542 tid->module_id = module; in dlmodule_exec()
543 module->main_thread = tid; in dlmodule_exec()
549 /* destory dl module */ in dlmodule_exec()
550 dlmodule_destroy(module); in dlmodule_exec()
551 module = RT_NULL; in dlmodule_exec()
556 return module; in dlmodule_exec()
562 struct rt_dlmodule *module; in dlmodule_exit() local
564 module = dlmodule_self(); in dlmodule_exit()
565 if (!module) return; in dlmodule_exit()
570 /* module is not running */ in dlmodule_exit()
571 if (module->stat != RT_DLMODULE_STAT_RUNNING) in dlmodule_exit()
580 module->ret_code = ret_code; in dlmodule_exit()
582 /* do exit for this module */ in dlmodule_exit()
584 /* the stat of module was changed to CLOSING in _dlmodule_exit */ in dlmodule_exit()
586 thread = module->main_thread; in dlmodule_exit()
639 * This function will find the specified module.
641 * @param name the name of module finding
643 * @return the module
681 struct rt_dlmodule *module; in list_module() local
688 rt_kprintf("module ref address \n"); in list_module()
692 module = (struct rt_dlmodule *)(rt_list_entry(node, struct rt_object, list)); in list_module()
694 RT_NAME_MAX, RT_NAME_MAX, module->parent.name, module->nref, module->mem_space); in list_module()