驱动程序--初步入门

此程序,是抄自网上,特地记录下,备以后回看。
  1. #ifndef __KERNEL__
  2. #define __KERNEL__
  3. #endif
  4. #ifndef __MODULE__
  5. #define __MODULE__
  6. #endif
  7. #include <linux/init.h>
  8. #include <linux/module.h>
  9. #include <linux/kernel.h>
  10. #include <linux/fs.h>
  11. #include <asm/uaccess.h>
  12. #include <asm/io.h>
  13. #include <linux/delay.h>
  14. #define VIRTUAL_CHAR_MAJOR 240
  15. #define VIRTUAL_CHAR_DEVICE_NAME "myvcd"
  16. static int virtual_char_open(struct inode* inode, struct file* file)
  17. {
  18.   printk("++++++++++++++++++/n");
  19.   printk("pid is %d, comm is %s/n", current->pid, current->comm);
  20.   (file->private_data) = (void*)0x76543210;
  21.   return 0;
  22. }
  23. static int virtual_char_close(struct inode* inode, struct file* file)
  24. {
  25.   printk("virtual char close/n");
  26.   return 0;
  27. }
  28. static ssize_t virtual_char_read(struct file* file, char* buf, size_t count, loff_t* offset)
  29. {
  30.   int res;
  31.   printk("virtual_char read /n");
  32.   res = copy_to_user((void __user*)buf, (void*)(file->private_data), sizeof(unsigned int));
  33.   if (res == 0)
  34.     {
  35.       printk("virtual char can not copy to user %d/n", res);
  36.       return -EFAULT;
  37.     }
  38.   return count;
  39. }
  40. static ssize_t virtual_char_write(struct file* file, const char* buf, size_t count, loff_t* offset)
  41. {
  42.   printk("virtual char write %d byte/n", count);
  43.   return count;
  44. }
  45. static loff_t virtual_char_llseek(struct file* file, loff_t offset, int whence)
  46. {
  47.   printk("virtual char device llseek/n");
  48.   return 0;
  49. }
  50. static struct file_operations virtual_char_fops = 
  51.   {
  52.     .llseek = virtual_char_llseek,
  53.     .read   = virtual_char_read,
  54.     .write  = virtual_char_write,
  55.     .open   = virtual_char_open,
  56.     .release= virtual_char_close,
  57.     .ioctl  = NULL,
  58.   };
  59. static int virtual_char_init(void)
  60. {  
  61.   int res = register_chrdev(VIRTUAL_CHAR_MAJOR, VIRTUAL_CHAR_DEVICE_NAME, &virtual_char_fops);
  62.   if (res < 0)
  63.     {
  64.       printk("virtual char init failure/n");
  65.       return res;
  66.     }
  67.   printk("virtual char init success/n");
  68.   return 0;
  69. }
  70. static void virtual_char_cleanup(void)
  71. {
  72.   printk("virtual char cleanup/n");
  73.   unregister_chrdev(VIRTUAL_CHAR_MAJOR, VIRTUAL_CHAR_DEVICE_NAME);
  74. }
  75. module_init(virtual_char_init);
  76. module_exit(virtual_char_cleanup);
  77. MODULE_LICENSE("GPL");
  78. MODULE_AUTHOR("yijunjun");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值