diff options
Diffstat (limited to '1/main.c')
-rw-r--r-- | 1/main.c | 38 |
1 files changed, 32 insertions, 6 deletions
@@ -1,26 +1,52 @@ +#include <linux/cdev.h> #include <linux/init.h> #include <linux/module.h> #include "fopdrv.h" +#include "config.h" -MODULE_LICENSE("MIT"); - +struct cdev *cdev; struct file_operations fops = { - .read = fop_read, - .write = fop_write, - .open = fop_open, - .release = fop_release, + .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"); |