Linux中EXPORT_SYMBOL的用法

  EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用 EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用 您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。

    Linux symbol export method:

    [1] If we want export the symbol in a module, just use the EXPORT_SYMBOL(xxxx) in the C or H file.

     And compile the module by adding the compile flag -DEXPORT_SYMTAB.

     Then we can use the xxxx in the other module.

    [2] If we want export some symbol in Kernel that is not in a module such as xxxx in the /arch/ppc/fec.c.

     Firstly, define the xxxx in the fec.c;

     Secondly, make a new file which contain the "extern" define the xxxx(for example, extern int xxxx);

     Lastly, in the ppc_ksyms.c we includes the new file, and add the EXPORT_SYMBOL(xxxx).

     Then we can use the xxxx.

    使用时注意事项:

    在使用EXPORT_SYMBOL 的.c文件中 需要 #include 文件。

    // 先写函数

    func_a ()

    {

    }

    //再使用EXPORT_SYMBOL

    EXPORT_SYMBOL(func_a);

/*
 * Copyright  2011-2012  sunplusapp
 */
 
/*
 * this program is free software; you can redistribute it and/or modify
 * it
 * 
 * Date and Edition:	2012-12-27  v1.2
 * Author:				dxh/zsd/Valor-Lion/lv/dw
 */
 
#include <linux/module.h>    /*module_init()*/
#include <linux/kernel.h>	 /* printk() */
#include <linux/init.h>		 /* __init __exit */

#define DEBUG		//open debug message

#ifdef DEBUG
#define debug(fmt, arg...)		printk(KERN_WARNING fmt, ##arg)
#else
#define debug(fmt, arg...)		printk(KERN_DEBUG fmt, ##arg)
#endif

                         
int add_test(int a ,int b)                                
{                                
	return a + b;                             
} 
                               
int sub_test(int a,int b)                                
{                                
	return a - b;                             
}                            

EXPORT_SYMBOL(add_test);
EXPORT_SYMBOL(sub_test);

MODULE_AUTHOR("sunplsuedu");
MODULE_LICENSE("GPL");


用一个简单的模块调用这两个函数

/*
 * Copyright  2011-2012  sunplusapp
 */
 
/*
 * this program is free software; you can redistribute it and/or modify
 * it
 * 
 * Date and Edition:	2012-12-27  v1.2
 * Author:				dxh/zsd/Valor-Lion/lv/dw
 */
 
#include <linux/module.h>    /*module_init()*/
#include <linux/kernel.h>	 /* printk() */
#include <linux/init.h>		 /* __init __exit */

#define DEBUG	//open debug message

#ifdef DEBUG
#define debug(fmt, arg...)		printk(KERN_WARNING fmt, ##arg)
#else
#define debug(fmt, arg...)		printk(KERN_DEBUG fmt, ##arg)
#endif

extern int add_test(int a ,int b); 
extern int sub_test(int a,int b); 

static int __init hello_init(void)
{
	int a,b;
  
	a = add_test(10,20);
	b = sub_test(30,20);
	debug("the add test result is %d\n",a);
	debug("the sub test result is %d\n",b);
  
	return 0;
}

static void __exit hello_exit(void)
{
	debug(" Hello exit\n ");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("sunplsuedu");
MODULE_LICENSE("GPL");


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值