Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98174
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 384
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-06 16:52
文章分类

全部博文(38)

文章存档

2014年(38)

我的朋友

分类: 嵌入式

2014-04-15 20:05:09

一般需要包含如下头文件

点击(此处)折叠或打开

  1. //moudle.h 包含了大量加载模块需要的函数和符号的定义
  2. #include <linux/module.h>
  3. //kernel.h以便使用printk()等函数
  4. #include <linux/kernel.h>
  5. //fs.h包含常用的数据结构,如struct file等
  6. #include <linux/fs.h>
  7. //uaccess.h 包含copy_to_user(),copy_from_user()等函数
  8. #include <linux/uaccess.h>
  9. //io.h 包含inl(),outl(),readl(),writel()等IO口操作函数
  10. #include <linux/io.h> 
  11. #include <linux/miscdevice.h>
  12. #include <linux/pci.h>
  13. //init.h来指定你的初始化和清理函数,例如:module_init(init_function)、module_exit(cleanup_function)
  14. #include <linux/init.h>
  15. #include <linux/delay.h>
  16. #include <linux/device.h>
  17. #include <linux/cdev.h>
  18. #include <linux/gpio.h>
  19. #include <linux/irq.h>
  20. #include <linux/sched.h>
  21. #include <linux/interrupt.h>
  22. #include <linux/poll.h>
  23. //irq.h中断与并发请求事件
  24. #include <asm/irq.h>
  25. //下面这些头文件是IO口在内核的虚拟映射地址,涉及IO口的操作所必须包含
  26. //#include <mach/gpio.h> 
  27. #include <mach/regs-gpio.h>
  28. #include <plat/gpio-cfg.h>
  29. #include <mach/hardware.h>
  30. #include <mach/map.h>
基本框架如下

点击(此处)折叠或打开

  1. static struct class  *XXXdrv_class;

  2. static int XXX_drv_open(struct inode *inode, struct file *file)
  3. {
  4.     .......
  5.     return 0;
  6. }

  7. static ssize_t XXX_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
  8. {
  9.     .......
  10.     return 0;
  11. }

  12. static struct file_operations XXX_drv_fops = {
  13.     .owner    =     THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */
  14.     .open     =     XXX_drv_open, 
  15.     .write    =     XXX_drv_write,     
  16. };


  17. int major; // 系统自动分配设备号 //

  18. static int XXX_drv_init(void)
  19. {
  20.     major = register_chrdev(0, "XXX_drv", &XXX_drv_fops); // 注册, 告诉内核
  21.     XXXdrv_class = class_create(THIS_MODULE, "XXXdrv");
  22.     device_create(XXXdrv_class, NULL, MKDEV(major, 0), NULL, "XXX"); /* /dev/XXX */
  23.     return 0;
  24. }

  1. static void XXX_drv_exit(void)
  2. {
  3.     unregister_chrdev(major, "XXX_drv"); // 卸载
  4.     device_destroy(XXXdrv_class,MKDEV(major, 0));
  5.     class_destroy(XXXdrv_class);
  6. }

  7. module_init(XXX_drv_init);
  8. module_exit(XXX_drv_exit);

  9. MODULE_LICENSE("GPL");


阅读(955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~