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

嵌入式Linux

开发平台:

C/C++

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