问个在模块中调用内核函数的未定义问题

wf521yezi 2010-10-20 08:46:36
我在一个模块的open()函数中调用了dev_activate()这个函数,在编译的时候,直接显示dev_activate这个函数未定义,有没有高手晓得这个是啥原因的哈
PS:函数的声明所在的头文件/net/sch_generic.h已经包含在里面了,这个函数所在的定义的地方是在/net/sched/sch_generic.c
...全文
421 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyubo 2011-11-09
  • 打赏
  • 举报
回复
楼主知道怎么解决了吗
wf521yezi 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 eclipse_2 的回复:]
从符号表中找出函数符号
然后分析一下 得出你的地址地址
然后调用这个地址
不需要重新编译内核
[/Quote]
这个具体是咋个做的呢,就是使用未导出函数的具体步骤哈,比如说调用哪些函数的哈
小魔菇 2010-11-09
  • 打赏
  • 举报
回复
从符号表中找出函数符号
然后分析一下 得出你的地址地址
然后调用这个地址
不需要重新编译内核
汗晕倒 2010-11-09
  • 打赏
  • 举报
回复
重新编译内核把~~
井朝天 2010-11-08
  • 打赏
  • 举报
回复
一般内核没有导出的函数是用不了的。除非加上EXPORT_SYMBOL并重新编译内核,要么就静态编译你的驱动模块。

还有一种方法,把这个函数实现拿出来放到你的代码里,但是如果这个函数是内核中关于一些全局,静态变量处理的函数。你拿出来也没用。
wf521yezi 2010-10-31
  • 打赏
  • 举报
回复
EXPORT_SYMBOL_GPL没法采用这种导出方法,这个需要重新编译内核才行,有没有可以不需要编译内核就能使用这个函数的方法?
wf521yezi 2010-10-31
  • 打赏
  • 举报
回复
问题是/net/sched/sch_generic.c已经是编译好了的,linux里不存在sch_generic.c源文件的哈
pottichu 2010-10-21
  • 打赏
  • 举报
回复
在 /net/sched/sch_generic.c 中加入

EXPORT_SYMBOL_GPL(dev_activate);

4,465

社区成员

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

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