diff --git a/Software/OperatingSystem/Linux/Modules/KernelDriver/Demo/Misc/Makefile b/Software/OperatingSystem/Linux/Modules/KernelDriver/Demo/Misc/Makefile new file mode 100644 index 0000000..b6289c4 --- /dev/null +++ b/Software/OperatingSystem/Linux/Modules/KernelDriver/Demo/Misc/Makefile @@ -0,0 +1,14 @@ +obj-m:= \ + demomisc.o + +demomisc-objs:= \ + demo_misc.o + +EXTRA_CFLAGS += \ + -I$(PWD) + +all: + $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules + +clean: + $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean \ No newline at end of file diff --git a/Software/OperatingSystem/Linux/Modules/KernelDriver/Demo/Misc/demo_misc.c b/Software/OperatingSystem/Linux/Modules/KernelDriver/Demo/Misc/demo_misc.c new file mode 100644 index 0000000..57a2a50 --- /dev/null +++ b/Software/OperatingSystem/Linux/Modules/KernelDriver/Demo/Misc/demo_misc.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include + +static int demo_open(struct inode *inode, struct file* filp) +{ + return 0; +} + +static int demo_release(struct inode *inode, struct file* filp) +{ + return 0; +} + +static loff_t demo_llseek(struct file *filp, loff_t offset, int origin) +{ + return filp->f_pos; +} + +static ssize_t demo_read(struct file *filp, char __user *buffer, size_t count, loff_t *offset) +{ + const char __user *p = buffer; + return p-buffer; +} + +static ssize_t demo_write(struct file *filp, const char __user *buffer, size_t count, loff_t *offset) +{ + const char __user *p = buffer; + return p-buffer; +} + +static long demo_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + return 0; +} + +static int demo_mmap(struct file* filp, struct vm_area_struct* vma) +{ + return 0; +} + +static struct file_operations demo_fops = { + .owner = THIS_MODULE, + .open = demo_open, + .release = demo_release, + .llseek = demo_llseek, + .read = demo_read, + .write = demo_write, + .unlocked_ioctl = demo_ioctl, + .mmap = demo_mmap +}; + +static struct miscdevice demo_dev = { + .minor = MISC_DYNAMIC_MINOR, // Dynamically allocate minor. + .name = "demo_misc", + .fops = &demo_fops, +}; + +static int __init demo_init(void) +{ + misc_register(&demo_dev); + return 0; +} + +static void __exit demo_exit(void) +{ + misc_deregister(&demo_dev); +} + +module_init(demo_init); +module_exit(demo_exit); \ No newline at end of file