Forskelle
Dette viser forskellene mellem den valgte og den nuværende udgave af dokumentet. Gul er linjer der findes i den gamle udgave, og grøn er linjer der findes i den nuværende.
diverse:fkernelmodul [17-02-2008 21:09] mchro |
diverse:fkernelmodul [16-09-2011 18:48] |
||
---|---|---|---|
Linje 1: | Linje 1: | ||
- | ====== F-Kernel Modul ====== | ||
- | Det (officielle?) fklub kernel modul. Originalt lavet af jokke, mchro & kyrke 2006. | ||
- | |||
- | <code> | ||
- | #include <linux/kernel.h> | ||
- | #include <linux/module.h> | ||
- | #include <linux/fs.h> | ||
- | |||
- | #define MAX_Fs 99999 //-1 for infinitet | ||
- | |||
- | int fCount = 0; | ||
- | |||
- | static int device_open(struct inode *i, struct file *f) | ||
- | { | ||
- | |||
- | return 0; | ||
- | } | ||
- | |||
- | static int device_close(struct inode *i, struct file *f) | ||
- | { | ||
- | return 0; | ||
- | } | ||
- | |||
- | static ssize_t device_read( | ||
- | struct file *f, char *buffer, size_t length, loff_t *offset) | ||
- | { | ||
- | *buffer = 'F'; | ||
- | fCount++; | ||
- | |||
- | if (fCount != -1 && fCount >= MAX_Fs){ | ||
- | panic("No more F's"); | ||
- | } | ||
- | |||
- | return 1; | ||
- | } | ||
- | |||
- | static ssize_t device_write( | ||
- | struct file *f, const char *buffer, size_t length, loff_t *offset) | ||
- | { | ||
- | if (*buffer = 'F' || *buffer = 'f'){ | ||
- | fCount--; | ||
- | }else{ | ||
- | panic("My world only contains F!!! ") | ||
- | } | ||
- | return length; | ||
- | } | ||
- | |||
- | static struct file_operations fops = | ||
- | { | ||
- | .read = device_read, | ||
- | .write = device_write, | ||
- | .open = device_open, | ||
- | .release = device_close | ||
- | }; | ||
- | |||
- | static int major; | ||
- | |||
- | static int device_init(void) | ||
- | { | ||
- | major = register_chrdev(0, "null device", &fops); | ||
- | if (major < 0) | ||
- | { | ||
- | printk("Init failed (%d)\n", major); | ||
- | return major; | ||
- | } | ||
- | printk("Got major %d\n", major); | ||
- | return 0; | ||
- | } | ||
- | |||
- | static void device_exit(void) | ||
- | { | ||
- | int n = unregister_chrdev(major, "null device"); | ||
- | if (n < 0) | ||
- | { | ||
- | printk("Cleanup failed (%d)\n", n); | ||
- | } | ||
- | } | ||
- | |||
- | module_init(device_init); | ||
- | module_exit(device_exit); | ||
- | |||
- | MODULE_LICENSE("GPL"); | ||
- | </code> | ||
- | |||
- | ~~DISCUSSION~~ |