export.c
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * export.c -- export a symbol (maybe a versioned one) (v2.1)
  3.  *
  4.  * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet
  5.  * Copyright (C) 2001 O'Reilly & Associates
  6.  *
  7.  * The source code in this file can be freely used, adapted,
  8.  * and redistributed in source or binary form, so long as an
  9.  * acknowledgment appears in derived source files.  The citation
  10.  * should list that the code comes from the book "Linux Device
  11.  * Drivers" by Alessandro Rubini and Jonathan Corbet, published
  12.  * by O'Reilly & Associates.   No warranty is attached;
  13.  * we cannot take responsibility for errors or fitness for use.
  14.  *
  15.  */
  16. #ifndef __KERNEL__
  17. #  define __KERNEL__
  18. #endif
  19. #ifndef MODULE
  20. #  define MODULE
  21. #endif
  22. /* This stuff might go in the Makefile, but I'd better put it here */
  23. #include <linux/config.h> /* retrieve the CONFIG_* macros */
  24. #if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS)
  25. #   define MODVERSIONS
  26. #endif
  27. /*
  28.  * Include the versioned definitions for both kernel symbols and our
  29.  * symbol, *unless* we are generating checksums (__GENKSYMS__
  30.  * defined) */
  31. #if defined(MODVERSIONS) && !defined(__GENKSYMS__)
  32. #    include <linux/modversions.h>
  33. #    include "export.ver" /* redefine "export_function" to include CRC */
  34. #endif
  35. /*
  36.  * Everything from now on is normal. The previous stuff can be replaced
  37.  * by "$(CC) -D__KERNEL__ -DMODULE -DMODVERSIONS -DEXPORT_SYMTAB 
  38.  *         -include $(INCLUDEDIR)/linux/modversions.h" if versioning
  39.  * is enabled, and the following (simpler) cmdline for genksyms:
  40.  *    "$(CC) -E -DCONFIG_MODVERSIONS -DEXPORT_SYMTAB"
  41.  */
  42. #ifndef EXPORT_SYMTAB
  43. #  define EXPORT_SYMTAB /* need this one 'cause we export symbols */
  44. #endif
  45. #include <linux/module.h>
  46. #include <linux/sched.h>
  47. #include <linux/kernel.h> /* printk() */
  48. #include "sysdep.h"
  49. /* our dumb function, with two dumb arguments */
  50. int export_function(int a, int b);
  51. #ifdef __USE_OLD_SYMTAB__
  52.     static struct symbol_table export_syms = {
  53.         #include <linux/symtab_begin.h>
  54.         X(export_function),
  55.         #include <linux/symtab_end.h>
  56.     };
  57. #else
  58.     EXPORT_SYMBOL(export_function);
  59. #endif
  60. int export_init(void)
  61. {
  62.     REGISTER_SYMTAB(&export_syms);
  63.     return 0;
  64. }
  65. void export_cleanup(void)
  66. {
  67. }
  68. int export_function(int a, int b)
  69. {return a+b;}
  70. module_init(export_init);
  71. module_exit(export_cleanup);