linux字符设备驱动程序框架(老方法)

来源:互联网 发布:在linux服务器搭建svn 编辑:程序博客网 时间:2024/04/28 23:37
#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/irq.h>#include <asm/io.h>#include <asm/arch/regs-gpio.h>#include <asm/hardware.h>#include <linux/cdev.h>#include <linux/types.h>#definexxx_DEVICE_COUNT1/*自动创建设备节点类*/static struct class *xxx_dev_class;static struct class_device *xxx_dev_class_dev;/*xxx设备相关的相关操作函数:open、read、write、close、ioctl等*/static int xxx_dev_open(struct inode *inode, struct file *filp){printk("Open xxx device OK.\n");return 0;}static int xxx_dev_close(struct inode *inode, struct file *filp){printk("Close xxx device OK.\n");return 0;}static int xxx_dev_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos){printk("Write xxx device OK.\n");return 0;}static int xxx_dev_read(struct file *file, const char __user *buf, size_t count, loff_t ppos){printk("Read xxx device OK.\n");return 0;}static int xxx_dev_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg){printk("DRIVER : Get cmd %d.\n", cmd);return 0;}/*xxx设备操作函数结构体*/struct file_operations xxx_fops = {.owner = THIS_MODULE,.open = xxx_dev_open,.release = xxx_dev_close,.read = xxx_dev_read,.write = xxx_dev_write,.ioctl = xxx_dev_ioctl,};/*xxx设备驱动模块的注册和卸载*/int xxx_major = 0;static int __init initialization_xxx_dev(void){/* 注册设备号 */printk("Before register xxx Major = %d\n", xxx_major);if (xxx_major) {register_chrdev(xxx_major, "xxx", &xxx_fops);} else {xxx_major = register_chrdev(0, "xxx", &xxx_fops);}printk("After register xxx Major = %d\n", xxx_major);/* 自动生成设备节点 */xxx_dev_class = class_create(THIS_MODULE, "xxx_dev");xxx_dev_class_dev = class_device_create(xxx_dev_class, NULL, MKDEV(xxx_major, 0), NULL, "xxx");/* 模块初始化成功必须返回0 */printk("Module register OK.\n");return 0;}static void __exit cleanup_xxx_dev(void){/* 删除设备文件 */unregister_chrdev(xxx_major, "xxx");class_device_unregister(xxx_dev_class_dev);class_destroy(xxx_dev_class);printk("Module unregister OK.\n");}/*模块注册与卸载*/module_init(initialization_xxx_dev);module_exit(cleanup_xxx_dev);/*模块传参:insmod char_driver_frame_old.ko xxx_major=xxx*/module_param(xxx_major, int, S_IRUGO);/*模块的相关声明*/MODULE_AUTHOR("lhbo");MODULE_DESCRIPTION("GPIO Driver for xxx");MODULE_LICENSE("GPL");
0 0
原创粉丝点击