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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * faulty.c -- a module which generates an oops when read (v2.1)
  3.  *
  4.  */
  5. #ifndef __KERNEL__
  6. #  define __KERNEL__
  7. #endif
  8. #ifndef MODULE
  9. #  define MODULE
  10. #endif
  11. #define __NO_VERSION__ /* don't define kernel_verion in module.h */
  12. #include <linux/module.h>
  13. #include <linux/version.h>
  14. char kernel_version [] = UTS_RELEASE;
  15. #include <linux/kernel.h> /* printk() */
  16. #include <linux/fs.h>     /* everything... */
  17. #include <linux/types.h>  /* size_t */
  18. #include <asm/segment.h>
  19. #include "sysdep-2.1.h"
  20. int faulty_major=0;
  21. char faulty_buf[1024];
  22. read_write_t faulty_read (struct inode *inode, struct file *filp,
  23.                 char *buf, count_t count)
  24. {
  25.   printk(KERN_DEBUG "read: inode %p, file %p, buf %p, count %lin",
  26.          inode, filp, buf, (long)count);
  27.   copy_to_user(buf,faulty_buf,count);
  28.   return count;
  29. }
  30. struct pio {int a; char b; long c;};
  31. read_write_t faulty_write (struct inode *inode, struct file *filp,
  32.                const char *buf, count_t count)
  33. {
  34.     /* put_user(0,(struct pio *)buf);*/
  35.     return 0;
  36. }
  37. struct file_operations faulty_fops = {
  38.     NULL,          /* lseek */
  39.     faulty_read,
  40.     faulty_write,
  41.                    /* nothing more, fill with NULLs */
  42. };
  43. int init_module(void)
  44. {
  45.     int result;
  46.     /*
  47.      * Register your major, and accept a dynamic number
  48.      */
  49.     result = register_chrdev(faulty_major, "faulty", &faulty_fops);
  50.     if (result < 0) return result;
  51.     if (faulty_major == 0) faulty_major = result; /* dynamic */
  52.     /* 
  53.      * allocate the devices -- we can't have them static, as the number
  54.      * can be specified at load time
  55.      */
  56.     return 0;
  57. }
  58. void cleanup_module(void)
  59. {
  60.     unregister_chrdev(faulty_major, "faulty");
  61. }