Untitled
unknown
plain_text
2 years ago
3.6 kB
6
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