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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * master.c -- the master module of a master/slave pair using kmod
  3.  */
  4. #ifndef __KERNEL__
  5. #  define __KERNEL__
  6. #endif
  7. #ifndef MODULE
  8. #  define MODULE
  9. #endif
  10. /*
  11.  * Inclusions related to version problems. They *might* go after
  12.  * <linux/module.h>, unless a symbol table is exported. All in all,
  13.  * better putting them first anyways.
  14.  */
  15. #include <linux/config.h> /* retrieve the CONFIG_* macros */
  16. #if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS)
  17. #  define MODVERSIONS /* force it on */
  18. #endif
  19. #ifdef MODVERSIONS
  20. #  include <linux/modversions.h>
  21. #endif
  22. #include <linux/module.h>
  23. #include <linux/version.h>
  24. /* This depends on kmod.h, refuse to go on with 2.0 */
  25. #if LINUX_VERSION_CODE < 0x020200
  26. #  error "This module needs kmod, so it won't run with 2.0"
  27. #else
  28. #include <linux/sched.h>
  29. #include <linux/kernel.h> /* printk() */
  30. #include <linux/string.h>
  31. #include <linux/init.h>
  32. #ifdef HAVE_INTER_MODULE                
  33. static const char *ime_string = NULL;
  34. static void master_test_inter();
  35. #endif                                  
  36. #include <linux/kmod.h>
  37. #include "sysdep.h"
  38. int master_init_module(void)
  39. {
  40.     int r[2]; /* results */
  41.     
  42.     r[0]=request_module("slave");
  43.     r[1]=request_module("nonexistent");
  44.     printk(KERN_INFO "master: loading results are %i, %in", r[0],r[1]);
  45. #ifdef HAVE_INTER_MODULE                
  46.     master_test_inter();
  47. #endif                                  
  48.     return 0; /* success */
  49. }
  50. #ifndef HAVE_INTER_MODULE                
  51. void master_cleanup_module(void)
  52. { }
  53. #endif                                  
  54. #ifdef HAVE_INTER_MODULE
  55. void master_test_inter()
  56. {
  57.     void (*ime_func)();
  58.     ime_string = inter_module_get_request("ime_string", "inter");
  59.     if (ime_string)
  60.         printk(KERN_INFO "master: got ime_string '%s'n", ime_string);
  61.     else
  62.         printk(KERN_INFO "master: inter_module_get failed");
  63.     ime_func = inter_module_get("ime_function");
  64.     if (ime_func) {
  65. (*ime_func)("master");
  66. inter_module_put("ime_function");
  67.     }
  68. }
  69. void master_cleanup_module(void)
  70. {
  71.     if (ime_string)
  72.         inter_module_put("ime_string");
  73. }
  74. #endif
  75. module_init(master_init_module);
  76. module_exit(master_cleanup_module);
  77. #endif /* no 2.0 allowed */