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");