如何调用linux内核源码中的全局变量

qq109444129 2017-05-03 09:09:46
内核编程新手。。

mem_map是一个struct page的数组,管理着系统中所有的物理内存页面。 的定义,在mm/memory.c中:
#ifndef CONFIG_NEED_MULTIPLE_NODES
/* use the per-pgdat data instead for discontigmem - mbligh */
unsigned long max_mapnr;
struct page *mem_map;
EXPORT_SYMBOL(max_mapnr);
EXPORT_SYMBOL(mem_map);
#endif

mem_map是一个全局变量。我想自己在模块中使用:
extern struct page *mem_map;
printk(KERN_ALERT "%ld/n",mem_map[0].flags);

编译提示:
WARNING: "mem_map" [/wyq/mem.ko] undefined!
insmod提示:
insmod: ERROR: could not insert module mem.ko: Unknown symbol in module
Unknown symbol mem_map

内核应该安装编译的没什么问题。不知道应该怎么写,是缺少什么头文件吗?
...全文
1515 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2017-06-05
  • 打赏
  • 举报
回复
InsaneCode 2017-05-31
  • 打赏
  • 举报
回复
你想访问mem_map的目的是什么呢?说出来可能有更合理的办法。
小陆zi 2017-05-17
  • 打赏
  • 举报
回复
1,你的模块 要放在 内核源码中修改。 2,Unknown symbol mem_map这说明mem_map这个变量 不希望通过这种方式去访问。 3,如果一定要访问 EXPORT_SYMBL(mem_map)。 4,标准用法是 get_current这个宏定义 找到本进程相关的mem_map相关的数据结构。
qq109444129 2017-05-15
  • 打赏
  • 举报
回复
这是现成的实例,为什么我就云不出来。。。 来个大神啊,求助。
  • 打赏
  • 举报
回复
在mm/memory.c中 写个函数return它,函数要在.h声明,在调用函数的.c要include这个.h。
qq109444129 2017-05-04
  • 打赏
  • 举报
回复
引用 2 楼 q3733353520 的回复:
在mm/memory.c中 写个函数return它,函数要在.h声明,在调用函数的.c要include这个.h。
嗯,可以试试倒是,但是这样还要重新编译内核,就不想重编内核,只想在模块中处理一下。。
qq109444129 2017-05-04
  • 打赏
  • 举报
回复
嗯,可以试试倒是,但是这样还要重新编译内核,就不想重编内核,只想在模块中处理一下。。
qq109444129 2017-05-03
  • 打赏
  • 举报
回复
/proc/kallsyms中也没有查找到mem_map这个变量。 求指点给个方向!~

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧