Untitled

 avatar
unknown
plain_text
a year ago
3.6 kB
3
Indexable
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/uaccess.h>

#define DEVICE_NAME "encrypt_decrypt"
#define SUCCESS 0

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Dein Name");
MODULE_DESCRIPTION("Ein einfacher Linux-Treiber für Encrypt/Decrypt");
MODULE_VERSION("0.1");

static int majorNumber;
static struct class* encryptDecryptClass = NULL;
static struct device* encryptDevice = NULL;
static struct device* decryptDevice = NULL;

// Prototypen für Funktionen
static int encryptDecrypt_open(struct inode*, struct file*);
static int encryptDecrypt_release(struct inode*, struct file*);
static ssize_t encryptDecrypt_read(struct file*, char*, size_t, loff_t*);
static ssize_t encryptDecrypt_write(struct file*, const char*, size_t, loff_t*);

static struct file_operations fops = {
    .open = encryptDecrypt_open,
    .read = encryptDecrypt_read,
    .write = encryptDecrypt_write,
    .release = encryptDecrypt_release,
};

static int __init encryptDecrypt_init(void) {
    // Dynamisch eine Major-Nummer zuweisen
    majorNumber = register_chrdev(0, DEVICE_NAME, &fops);
    if (majorNumber < 0) {
        printk(KERN_ALERT "Fehler beim Registrieren der Major-Nummer\n");
        return majorNumber;
    }

    // Klasse erstellen
    encryptDecryptClass = class_create(THIS_MODULE, "encrypt_decrypt_class");
    if (IS_ERR(encryptDecryptClass)) {
        unregister_chrdev(majorNumber, DEVICE_NAME);
        printk(KERN_ALERT "Fehler beim Erstellen der Klasse\n");
        return PTR_ERR(encryptDecryptClass);
    }

    // Geräte erstellen
    encryptDevice = device_create(encryptDecryptClass, NULL, MKDEV(majorNumber, 0), NULL, "encrypt");
    if (IS_ERR(encryptDevice)) {
        class_destroy(encryptDecryptClass);
        unregister_chrdev(majorNumber, DEVICE_NAME);
        printk(KERN_ALERT "Fehler beim Erstellen des Geräts für Encrypt\n");
        return PTR_ERR(encryptDevice);
    }

    decryptDevice = device_create(encryptDecryptClass, NULL, MKDEV(majorNumber, 1), NULL, "decrypt");
    if (IS_ERR(decryptDevice)) {
        device_destroy(encryptDecryptClass, MKDEV(majorNumber, 0));
        class_destroy(encryptDecryptClass);
        unregister_chrdev(majorNumber, DEVICE_NAME);
        printk(KERN_ALERT "Fehler beim Erstellen des Geräts für Decrypt\n");
        return PTR_ERR(decryptDevice);
    }

    printk(KERN_INFO "Encrypt/Decrypt-Treiber erfolgreich initialisiert\n");
    return SUCCESS;
}

static void __exit encryptDecrypt_exit(void) {
    device_destroy(encryptDecryptClass, MKDEV(majorNumber, 0));
    device_destroy(encryptDecryptClass, MKDEV(majorNumber, 1));
    class_unregister(encryptDecryptClass);
    class_destroy(encryptDecryptClass);
    unregister_chrdev(majorNumber, DEVICE_NAME);

    printk(KERN_INFO "Encrypt/Decrypt-Treiber erfolgreich beendet\n");
}

static int encryptDecrypt_open(struct inode* inodep, struct file* filep) {
    // Implementiere die Open-Funktion hier
    return 0;
}

static ssize_t encryptDecrypt_read(struct file* filep, char* buffer, size_t len, loff_t* offset) {
    // Implementiere die Read-Funktion hier
    return 0;
}

static ssize_t encryptDecrypt_write(struct file* filep, const char* buffer, size_t len, loff_t* offset) {
    // Implementiere die Write-Funktion hier
    return len;
}

static int encryptDecrypt_release(struct inode* inodep, struct file* filep) {
    // Implementiere die Release-Funktion hier
    return 0;
}

module_init(encryptDecrypt_init);
module_exit(encryptDecrypt_exit);
Editor is loading...
Leave a Comment