Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.2 kB
1
Indexable
Never
#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");