Linux驱动开发--Linux字符设备驱动模板
来源:互联网 发布:e卡销官网源码 编辑:程序博客网 时间:2024/06/08 06:41
#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include <linux/cdev.h>#include <linux/fs.h>/*包含struct file_operations,MAJOR等*/#include <linux/slab.h>/*kmalloc*/#include <asm/io.h>/*ioread8...*/#include <mach/map.h>#include <mach/regs-gpio.h>#include <mach/gpio-bank-l.h>/*端口操作用到的三个头文件*/#define XXX_MAJOR 125#define DEVICE_NAME "xxx_dev"#define CMD_1 0;#define CMD_2 1;int xxx_major=XXX_MAJOR;struct XXX_DEV{struct cdev cdev;int value;};struct XXX_DEV *xxx_dev;int xxx_open(struct inode* inode,struct file* filp){struct XXX_DEV* dev;dev=container_of(inode->i_cdev,struct XXX_DEV,cdev);filp->private_data=dev;return 0;}int xxx_release(struct inode* inode,struct file* filp){return 0;}ssize_t xxx_read(struct file* filp,char __user *buf,size_t count,loff_t *f_pos){return 0;}ssize_t xxx_write(struct file *filp,const char __user *buf,size_t count,loff_t *f_pos){return 0;}long xxx_ioctl(struct file *filp,unsigned int cmd,unsigned long arg){struct XXX_DEV *xxx_dev=filp->private_data;switch(cmd){case LED_0:{break;}case LED_1:{break;}default:return -ENOTTY;}return 0;}struct file_operations xxx_fops={.owner=THIS_MODULE,.open=xxx_open,.read=xxx_read,.write=xxx_write,.unlocked_ioctl=xxx_ioctl,.release=xxx_release,};static int __init xxx_init(void){int result;dev_t devno;if(XXX_MAJOR){devno=MKDEV(XXX_MAJOR,0);result=register_chrdev_region(devno,1,DEVICE_NAME);}else{result=alloc_chrdev_region(&devno,0,1,DEVICE_NAME);xxx_major=MAJOR(devno);}if(result<0){printk(KERN_WARNING "ERROR: can not register\n");return result;}xxx_dev=kmalloc(sizeof(struct XXX_DEV),GFP_KERNEL);if(!xxx_dev){result=-ENOMEM;goto fail;}memset(xxx_dev,0,sizeof(struct XXX_DEV));cdev_init(&xxx_dev->cdev,&xxx_fops);xxx_dev->cdev.owner=THIS_MODULE;result=cdev_add(&xxx_dev->cdev,devno,1);if(result){printk(KERN_WARNING "ERROR: can not add cdev\n");goto fail;}return 0;fail:unregister_chrdev_region(devno,1);return result;}static void __exit xxx_exit(void){dev_t devno=MKDEV(xxx_major,0);if(xxx_dev){cdev_del(&xxx_dev->cdev);kfree(xxx_dev);}unregister_chrdev_region(devno,1);}MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("yixuaning <yixuaning@sina.com>");module_init(xxx_init);module_exit(xxx_exit);
- Linux驱动开发--Linux字符设备驱动模板
- linux驱动开发-字符设备
- linux字符设备驱动开发
- Linux 驱动开发-字符设备驱动
- 字符设备驱动 - linux驱动开发
- linux字符设备驱动开发模板及Makefile
- linux字符设备驱动开发模板及Makefile
- 【驱动】linux设备驱动·字符设备驱动开发
- Linux 字符设备驱动基本书写模板
- linux字符设备驱动一般模板
- linux字符设备驱动模板(新标准)
- 【Linux驱动】字符设备驱动
- 【Linux驱动】字符设备驱动
- linux驱动-字符设备驱动
- 【Linux驱动】字符设备驱动
- linux设备驱动模板
- LINUX--字符设备驱动
- Linux字符设备驱动
- STL的list的erase问题
- sqlite数据类型、关键词及创建、修改、删除数据表
- C++ 关键字typeid
- Uva 10305 - Ordering Tasks
- iOS应用内支付(IAP)的那些坑
- Linux驱动开发--Linux字符设备驱动模板
- java反射学习四
- 关于IAP的破解
- C语言常见面试题
- 纪念一下自己一下午的愚蠢——KMP算法核心
- LESS/Sass/CoffeeScript图形编译工具推荐
- 百度地图开发( 基于新版本V2_1_1)— 覆盖物(3)_路线图层(RouteOverlay)
- GitHub+TortoiseGit
- Dom与Pull方式解析XML文件