Untitled
unknown
plain_text
3 years ago
2.7 kB
4
Indexable
#include <linux/module.h> #include<linux/fs.h> #include<linux/cdev.h> #include<linux/device.h> #include<asm/uaccess.h> #define NAZWA "mojeznaki" static ssize_t moje_open(struct file *f, char __user *u, size_t size, loff_t* pos){ return 0; } static ssize_t moje_release(struct file *f, char __user *u, size_t size, loff_t* pos){ return 0; } static ssize_t moje_read(struct file *f, char __user *u, size_t size, loff_t* pos){ return 0; } static ssize_t moje_write(struct file *f, char __user *u, size_t size, loff_t* pos){ return 0; } static struct file_operations moje_op = { .owner = THIS_MODULE, .open = moje_open, .release = moje_release, .read = moje_read, .write = moje_write, }; static dev_t numer_urzadzenia = 0; static struct cdev moje_cdev; static struct class *moje_klasa; static struct device *moje_urzadzenie; static int __init znakowe_init(void) { if(alloc_chrdev_region(&numer_urzadzenia,0,1,NAZWA)<0) { pr_alert("Blad przydzialu zakresu numerow!\n"); return -1; } moje_klasa = class_create(THIS_MODULE,NAZWA); if(IS_ERR(moje_klasa)) { pr_alert("Blad tworzenia klasy: %ld!\n",PTR_ERR(moje_klasa)); unregister_chrdev_region(numer_urzadzenia,1); return -1; } cdev_init(&moje_cdev,&moje_op); moje_cdev.owner = THIS_MODULE; if(cdev_add(&moje_cdev,numer_urzadzenia,1)) { pr_alert("Nie moge dodac cdev!\n"); class_destroy(moje_klasa); unregister_chrdev_region(numer_urzadzenia,1); return -1; } moje_urzadzenie = device_create(moje_klasa, NULL, numer_urzadzenia, NULL, NAZWA); if(IS_ERR(moje_urzadzenie)) { pr_alert("Blad tworzenia urzadzenia: %ld!\n", PTR_ERR(moje_urzadzenie)); cdev_del(&moje_cdev); class_destroy(moje_klasa); unregister_chrdev_region(numer_urzadzenia,1); return -1; } return 0; } static void __exit znakowe_exit(void) { if(moje_urzadzenie) device_destroy(moje_klasa,numer_urzadzenia); cdev_del(&moje_cdev); if(moje_klasa) class_destroy(moje_klasa); if(numer_urzadzenia>=0) unregister_chrdev_region(numer_urzadzenia,1); } module_init(znakowe_init); module_exit(znakowe_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Ten modulik nic nie robi."); MODULE_VERSION("0.001");
Editor is loading...