LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1315|回复: 1

请问export symbol的问题?

[复制链接]
发表于 2005-12-7 10:25:37 | 显示全部楼层 |阅读模式
在看linux设备驱动这本书的模块间通信这一章,想试试它export symbol的例子,但是make file 不知道怎么写啊,请大虾指点一下。
export.c
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif

#include <linux/config.h> /* retrieve the CONFIG_* macros */
#include <linux/sched.h>
#include <linux/kernel.h> /* printk() */

#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS)
#   define MODVERSIONS
#endif

#if defined(MODVERSIONS) && !defined(__GENKSYMS__)
#    include <linux/modversions.h>
#    include "export.ver" /* redefine "export_function" to include CRC */
#endif
int export_function(int a, int b);
EXPORT_SYMBOL(export_function);
int export_init(void)
{
    return 0;
}

void export_cleanup(void)
{
}

int export_function(int a, int b)
{return a+b;}
module_init(export_init);
module_exit(export_cleanup);


import.c
#ifndef __KERNEL__
#  define __KERNEL__
#endif
#ifndef MODULE
#  define MODULE
#endif
/*
* Use versioning if needed
*/
#include <linux/config.h> /* retrieve the CONFIG_* macros */
#ifdef CONFIG_MODVERSIONS
#   undef MODVERSIONS /* it might be defined */
#   define MODVERSIONS
#endif

#ifdef MODVERSIONS
#  include <linux/modversions.h>
#  include "export.ver"
#endif

#include <linux/module.h>
#include <linux/kernel.h>

extern int export_function(int, int);

int import_init(void)
{
    int i = export_function(2,2);
    printk("import: my mate tells that 2+2 = %i\n",i);
    return 0;
}

void import_cleanup(void)
{
}
module_init(import_init);
module_exit(import_cleanup);
目的就是让import调用export模块的那个export_function函数。
发表于 2005-12-7 11:30:02 | 显示全部楼层
你是在用2.4还是2.6内核啊?

2.4 内核中编译如下,也就是多一个-DEXPORT_SYMTAB:
gcc -Wall -O2 -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -I/usr/src/linux-2.4.32/include -c export.c

2.6 内核也应该依此类推吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表