#include #include #include #include #include #include #include #include #include #include #include #include #define xxx_DEVICE_COUNT 1 /*自己主动创建设备节点类*/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");