模块API之lookup_module_symbol_attrs
2017-11-08 08:46
211 查看
static inline int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name) 的作用是返回addr所在模块的size和offset,并返回模块的name和addr代表symbol的name 使用的例子如下: int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name) { name[0] = '\0'; name[KSYM_NAME_LEN - 1] = '\0'; if (is_ksym_addr(addr)) { unsigned long pos; pos = get_symbol_pos(addr, size, offset); /* Grab name */ kallsyms_expand_symbol(get_symbol_offset(pos), name, KSYM_NAME_LEN); modname[0] = '\0'; return 0; } /* See if it's in a module. */ return lookup_module_symbol_attrs(addr, size, offset, modname, name); } 其源码如下: int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name) { struct module *mod; //在查找modules 这个list时,需要通过preempt_disable()/preempt_enable();来禁止内核抢占 preempt_disable(); list_for_each_entry_rcu(mod, &modules, list) { if (mod->state == MODULE_STATE_UNFORMED) continue; if (within_module(addr, mod)) { const char *sym; //返回addr在自身模块中的size和offset sym = get_ksymbol(mod, addr, size, offset); if (!sym) goto out; // 返回addr所在模块的name if (modname) strlcpy(modname, mod->name, MODULE_NAME_LEN); // 返回addr代表的symbol的字符串 if (name) strlcpy(name, sym, KSYM_NAME_LEN); preempt_enable(); return 0; } } out: preempt_enable(); return -ERANGE; }
相关文章推荐
- 模块API之lookup_module_symbol_name
- 模块API之module_address_lookup
- linux内核插入模块时 Unknown symbol in module
- 模块API之ref_module
- 模块API之symbol_put_addr
- 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解
- 模块API之module_is_live
- 模块API之sprint_symbol
- kvm 模块加载时报错:insmod: error inserting 'kvm.ko': -1 Unknown symbol in module
- 模块API之print_symbol
- apache 模块开发提示错误Cant locate api module
- SIP模块版本错误问题:the sip module implements API v??? but XXX module requires API v???
- 模块API之register_module_notifier
- intel dpdk api interrupt module 中断模块介绍
- intel dpdk api interrupt module 中断模块介绍
- Linux加载模块时:disagrees about version of symbol struct_module
- 模块API之each_symbol_section
- Springboot整合dubbo构建maven多模块项目(三) - 把server分为api(服务接口定义)和server(服务实现)两个子module
- intel dpdk api memory manage module (内存管理模块)
- 模块API之module_put/__module_get