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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * export.c -- export a symbol (maybe a versioned one)
  3.  *
  4.  * Tested with 2.0 on the x86, Sparc
  5.  */
  6. #ifndef __KERNEL__
  7. #  define __KERNEL__
  8. #endif
  9. #ifndef MODULE
  10. #  define MODULE
  11. #endif
  12. /* This stuff might go in the Makefile, but I'd better put it here */
  13. #ifndef EXPORT_SYMTAB
  14. #  define EXPORT_SYMTAB /* need this one 'cause we export symbols */
  15. #endif
  16. #include <linux/autoconf.h> /* retrieve the CONFIG_* macros */
  17. #if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS)
  18. #   define MODVERSIONS
  19. #endif
  20. /*
  21.  * Include the versioned definitions for both kernel symbols and our
  22.  * symbol, *unless* we are generating checksums (__GENKSYMS__
  23.  * defined)
  24.  */
  25. #if defined(MODVERSIONS) && !defined(__GENKSYMS__)
  26. #    include <linux/modversions.h>
  27. #    include "export.ver" /* redefine "export_function" to include CRC */
  28. #endif
  29. /*
  30.  * Everything from now on is normal. The previous stuff can be replaced
  31.  * by "$(CC) -D__KERNEL__ -DMODULE -DMODVERSIONS -DEXPORT_SYMTAB 
  32.  *         -include $(INCLUDEDIR)/linux/modversions.h" if versioning
  33.  * is enabled, and the following (simpler) cmdline for genksyms:
  34.  *    "$(CC) -E -DCONFIG_MODVERSIONS -DEXPORT_SYMTAB"
  35.  */
  36. #include <linux/module.h>
  37. #ifndef LINUX_VERSION_CODE  /* I don't want compile errors with 1.2 */
  38. #  include <linux/version.h>
  39. #endif
  40. #include "sysdep.h"
  41. #if LINUX_VERSION_CODE < VERSION_CODE(1,3,57)
  42. #  error "This module needs Linux 1.3.57 or newer"
  43. #else
  44. #include <linux/sched.h>
  45. #include <linux/kernel.h> /* printk() */
  46. #include <linux/kerneld.h>
  47. /* our dumb function, with two dumb arguments */
  48. int export_function(int a, int b);
  49. int init_module(void)
  50. {
  51.     static struct symbol_table export_syms = {
  52.         #include <linux/symtab_begin.h>
  53.         X(export_function),
  54.         #include <linux/symtab_end.h>
  55.     };
  56.     register_symtab(&export_syms);
  57.     return 0;
  58. }
  59. void cleanup_module(void)
  60. {
  61. }
  62. int export_function(int a, int b)
  63. {return a+b;}
  64. #endif /* 1.3.57 or newer */