#include #include #include #include "fopdrv.h" #include "config.h" struct cdev *cdev; struct file_operations fops = { .read = fop_read, .write = fop_write, .open = fop_open, .release = fop_release, }; static int mod_init(void) { int err; cdev = cdev_alloc(); dev_t node = MKDEV(NODE_MAJOR, NODE_MINOR); if (!cdev) { err = ENOMEM; goto free_cdev; } cdev->ops = &fops; err = cdev_add(cdev, node, 1); if (err < 0) { printk(KERN_ERR "cdev_add failed w/ error code %d\n", err); goto free_cdev; } printk("%s\n", __PRETTY_FUNCTION__); return 0; free_cdev: cdev_del(cdev); printk("%s: %d\n", __PRETTY_FUNCTION__, err); return err; } static void mod_exit(void) { cdev_del(cdev); printk("%s\n", __PRETTY_FUNCTION__); } module_init(mod_init); module_exit(mod_exit); MODULE_LICENSE("MIT");