Untitled
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