当前位置:  技术问答>linux和unix

关于编写内核模块导出符号的问题

    来源: 互联网  发布时间:2017-03-08

    本文导语:  各位大大: 我在编写内核模块的时候遇到一个疑惑:是不是在模块中用EXPORT_SYMBOL导出的符号都会出现在/proc/kallsyms中呢? 我编写了下面两个内核模块 // hello.c #include  #include  MODULE_LICENSE("Dual BSD/GPL"); static int h...

各位大大:

我在编写内核模块的时候遇到一个疑惑:是不是在模块中用EXPORT_SYMBOL导出的符号都会出现在/proc/kallsyms中呢?

我编写了下面两个内核模块


// hello.c
#include 
#include 

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn");
}

int say_hello(void)
{
printk(KERN_ALERT "Want me say hello again?n");
return 0;
}

EXPORT_SYMBOL(say_hello);

module_init(hello_init);
module_exit(hello_exit);



// greeting.c
#include 
#include 

MODULE_LICENSE("Dual BSD/GPL");

extern int say_hello(void);

static int greeting_init(void)
{
say_hello();
return 0;
}

static void greeting_exit(void)
{
printk("No more greetings.n");
}

module_init(greeting_init);
module_exit(greeting_exit);


我这样写两个模块,理论上的话greeting模块依赖hello模块的say_hello函数,而且say_hello已经用EXPORT_SYMBOL导出了,但是我用   cat /proc/kallsyms | grep hello  只有:
$ cat /proc/kallsyms | grep hello
f7cf1000 t hello_exit [hello]
f7cf100c t hello_init [hello]
f7cf1000 t cleanup_module [hello]
f7cf100c t init_module [hello]
fbc9f74e t br_hello_timer_expired [bridge]
fbca0027 t show_hello_timer [bridge]
fbca00fb t store_hello_time [bridge]
fbca0264 t set_hello_time [bridge]
fbca01ee t show_hello_time [bridge]

里面没有say_hello这个函数

所以我就有开头的疑惑:是不是EXPORT_SYMBOL导出的函数都会在/proc/kallsyms里?【另外,greeting模块的确调用了say_hello函数并在/var/log/kern.log里有输出】


|
我把你的hello.c做测试,显示如下信息。
cat /proc/kallsyms | grep hello
ffffffffa05f8000 t hello_exit [hello]
ffffffffa05f8020 t hello_init [hello]
ffffffffa05f9030 r __ksymtab_say_hello [hello]
ffffffffa05f908f r __kstrtab_say_hello [hello]
ffffffffa05f9040 r __kcrctab_say_hello [hello]
ffffffffa05fa000 d __this_module [hello]
ffffffffa05f8000 t cleanup_module [hello]
ffffffffa05f8020 t init_module [hello]

然后把hello.c文件中EXPORT_SYMBOL(say_hello);注释掉,显示信息如下:
cat /proc/kallsyms | grep hello
ffffffffa0609000 t hello_exit [hello]
ffffffffa0609020 t hello_init [hello]
ffffffffa060b000 d __this_module [hello]
ffffffffa0609000 t cleanup_module [hello]
ffffffffa0609020 t init_module [hello]

所以,应该有export成功。

    
 
 

您可能感兴趣的文章:

  • 怎么给内核加载自己编写的模块
  • 自己编写一个程序编译进内核,要修改makefile文件吗?
  • 编译和使用自己编写的linux内核模块的问题
  • 如何用Eclipse编写内核模块程序?
  • linux内核是用c和汇编写的,怎么会有inline内联函数呢?
  • C和汇编编写的32位内核 ScorchOS
  • linux 编写内核函数errno
  • *** AIX 下如何编写内核驱动模块?或者哪位有相关资料? *****
  • 想学编写内核和编makefile文件要看什么书
  • 编写内核模块程序的makefile文件make错误
  • 调查一下:编写Linux内核模块 驱动程序各位高手所用的编辑环境和调试工具
  • 【图】用JAVA编写一个基于linux内核的操作系统【是否可行】
  • 什么情况下自己编写的模块与内核中的相关功能不会冲突啊?
  • 嵌入式中怎么将应用程序代码编写进内核并且生成一个镜像文件
  • 有哪位高人能解释一下以下程序各行意思,该段在别人编写的简单操作系统的内核开头(head.s)里????
  • 内核模块编写
  • 【百度分享】基于内核模块的测试代码编写(三)
  • 【百度分享】基于内核模块的测试代码编写(一)
  • 【百度分享】基于内核模块的测试代码编写(二)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 编写gcc的时候 (`)个符号表示什么意思(1前面的那个点符号)?
  • 编写 linux shell 有什么好的编写工具呢?
  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 用Qt3.1.4编写的程序,如何加入自己编写的另外一个动态库呀?诚恳指教!!
  • 如图 scsi <---> scsi controller <---> pci <---> cpu 如果我想对scsi编写驱动我该对哪个部分编写?
  • 用什么工具编写JSP,可以象用InterDev编写ASP一样方便快捷?
  • 编写程序如编写人生,有人和我的意见相同吗?
  • 请问用jsp编写程序,非要编写代码么?有没有什么象fontpage2000那样的工具,能够生成一些固定模板的工具?就是说不用全部都写的工具。望
  • 用jsp编写web程序到底和java serverlet编写web程序有和区别
  • socket中,从client端(用java编写的)传到server端(用c编写的)的字符串为何总多一个ASCII码为10的字符呀?
  • 如何用java编写一个NT平台下的标准服务?
  • 关于用vj编写sniffer一问。
  • Linux下如何编写脚本文件
  • java能不能编写单独运行的程序?
  • Linux有没有类似bat文件,如何编写。
  • 用JAVA编写COM组件
  • 关于版本和bug管理的rule(规则)的编写
  • 在windows下可以用Code::Blocks编写linux程序吗?
  • 函数互相调用时Makefile编写
  • linux下用java编写邮箱客户端程序与在windows下有什么不同??
  • AIX下如何编写批处理命令和计划任务


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3