标签:
#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/miscdevice.h> ///////////////////////////////////////////////// MODULE_LICENSE("Dual BSD/GPL"); int open_state = 0; ///////////////////////////////////////////////// int misc01_open(struct inode *inode, struct file *filp) { if (open_state == 0) { open_state = 1; printk("misc01 open!\n"); return 0; } printk("misc01 has been open!\n"); return -1; } int misc01_release(struct inode *inode, struct file *filp) { if (open_state == 1) { open_state = 0; printk("misc01 release!\n"); return 0; } printk("misc01 has not been open yet!\n"); return -1; } ssize_t misc01_read(struct file *filp, char *buf, size_t count, loff_t *fpos) { printk("misc01 read!\n"); return 0; } ssize_t misc01_write(struct file *filp, const char *buf, size_t count, loff_t *fpos) { printk("misc01 write!\n"); return 0; } long misc01_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { printk("ioctl is called!\n"); printk("cmd:%d arg:%ld\n", cmd, arg); switch(cmd) { case 0: break; case 1: break; case 2: break; default: break; } return 0; } ///////////////////////////////////////////////// struct file_operations fops = { .owner = THIS_MODULE, .write = misc01_write, .read = misc01_read, .unlocked_ioctl = misc01_ioctl, .open = misc01_open, .release = misc01_release, }; struct miscdevice dev = { .minor = MISC_DYNAMIC_MINOR, .fops = &fops, .name = "misc01", .nodename = "misc01_node" }; int setup_misc01(void) { return misc_register(&dev); } ///////////////////////////////////////////////// static int __init misc01_init(void) { printk("misc01 init!\n"); return setup_misc01(); } static void __exit misc01_exit(void) { printk("misc01 exit!\n"); misc_deregister(&dev); } ///////////////////////////////////////////////// module_init(misc01_init); module_exit(misc01_exit);
标签:
原文地址:http://www.cnblogs.com/kozmers/p/4530287.html