Работает отлично. Суёшь в него какие-нибудь буквы, а он возвращает чистейший метан. Статистика работы биореактора находится в /proc/bioreactor. Там указано количество произведённого метана и количество метана, находящегося в резервуаре. Makefile: _______________________________________ obj-m += bioreactor.o all: make -C /lib/modules/`uname -r`/build M=${PWD} modules clean: make -C /lib/modules/`uname -r`/build M=${PWD} clean _______________________________________ bioreactor.c: _______________________________________ #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <asm/uaccess.h> #include <linux/fs.h> #include <linux/proc_fs.h> static int major; static int opened; static int ch4, total_ch4; struct proc_dir_entry *proc_bioreactor; static int bioreactor_open(struct inode *inode, struct file *file); static int bioreactor_close(struct inode *inode, struct file *file); static ssize_t bioreactor_read(struct file *, char *, size_t, loff_t *); static ssize_t bioreactor_write(struct file *, char *, size_t, loff_t *); int proc_bioreactor_read(char *buffer, char **buffer_location, off_t offset, int buffer_length, int *eof, void *data); static struct file_operations fops = { .read = bioreactor_read, .write = bioreactor_write, .open = bioreactor_open, .release = bioreactor_close }; static int bioreactor_open(struct inode *inode, struct file *file) { if (opened) return -EBUSY; opened++; printk(KERN_INFO "Door opened. Give me some shit!\n"); return 0; } static int bioreactor_close(struct inode *inode, struct file *file) { opened--; printk(KERN_INFO "Door closed.\n"); return 0; } static ssize_t bioreactor_read(struct file *f, char *buffer, size_t length, loff_t *offset) { int l, i; char metan = 'm'; if (length > ch4) { l = ch4; ch4 = 0; } else { l = length; ch4 -= length; } for(i = 0; i < l; i++) put_user('m', buffer++); return l; } static ssize_t bioreactor_write(struct file *f, char *buffer, size_t length, loff_t *offset) { ch4 += length; total_ch4 += length; return length; } int proc_bioreactor_read(char *buffer, char **buffer_location, off_t offset, int buffer_length, int *eof, void *data) { return sprintf(buffer, "Total CH4: %10d Kg\nCH4 in the tank: %10d Kg\n", total_ch4, ch4); } static int __init bioreactor_init(void) { printk(KERN_INFO "Turning bioreactor on...\n"); major = register_chrdev(0, "bioreactor", &fops); if (major < 0) { printk(KERN_ALERT "Failed to register device\n"); return major; } printk(KERN_INFO "Registered device %d\n", major); proc_bioreactor = create_proc_entry("bioreactor", 644, NULL); proc_bioreactor->read_proc = proc_bioreactor_read; proc_bioreactor->owner = THIS_MODULE; proc_bioreactor->mode = S_IFREG | S_IRUGO; proc_bioreactor->uid = 0; proc_bioreactor->gid = 0; proc_bioreactor->size = 20; printk(KERN_INFO "/proc/bioreactor has been created\n"); return 0; } static void __exit bioreactor_exit(void) { int r = unregister_chrdev(major, "bioreactor"); if (r < 0) printk(KERN_ALERT "Error in unregister_chrdev %d\n", r); remove_proc_entry("bioreactor", &proc_root); printk(KERN_INFO "Turning bioreactor off...\n"); } MODULE_AUTHOR("unnamed"); MODULE_DESCRIPTION("Bioreactor"); module_init(bioreactor_init); module_exit(bioreactor_exit); _______________________________________
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от unnamed
Ответ на:
комментарий
от mikhail
Ответ на:
комментарий
от unnamed
Ответ на:
комментарий
от JB
Ответ на:
комментарий
от unnamed
Ответ на:
комментарий
от CrazyPit
Ответ на:
комментарий
от WerNA
Ответ на:
комментарий
от unnamed
Ответ на:
комментарий
от unnamed
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от unnamed
Ответ на:
комментарий
от no-dashi
Ответ на:
комментарий
от no-dashi
Ответ на:
комментарий
от RomanU
Ответ на:
комментарий
от no-dashi
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Почему не видно устройства, и как исправить это? (2017)
- Форум Еще немного про драйвера (2005)
- Форум Всё ли нормально в символьном устройстве? (2017)
- Форум Драйвер чтения и записи (2013)
- Форум Реализация системного вызова ? (2008)
- Форум Перехват системных вызовов в модуле ядра [Ubuntu] (2018)
- Форум Производительность AF_PACKET RAW и AF_INET SOCK_STREAM сокетов в ядре. (2010)
- Форум поток ядра созданный kthread_create() не может создать или открыть файл используя filp_open() (2020)
- Форум IRQ 8 request irq (2012)
- Форум Не могу собрать старый модуль ядра. (2010)