Commit df70caaa authored by Julian Kralik's avatar Julian Kralik
Browse files

Update Dokumentation.md

parent f5424fa7
......@@ -12,27 +12,27 @@ Der Code wurde mit Visual Studio 2017 Community verfasst.
<img src="https://mygit.th-deg.de/ce12213/Kernelmodul_Sevenseg/raw/master/Bild.png" width="250" height="200">
# 1. Informationen über das Kernel-Modul
Ein Kernel-Modul (kurz "LKM" für engl: loadable kernel module) ist ein spezielles
Ein Kernel-Modul (kurz "LKM" für engl.: loadable kernel module) ist ein spezielles
Computerprogramm, das im laufenden Betrieb in den Kernel des Computers geladen
und entfernt werden kann. In diesem Fall soll ein solches Modul für den Raspberry Pi
und wieder entladen werden kann. In diesem Fall soll ein solches Modul für den Raspberry Pi
Linux Kernel geschrieben werden. Verwendet wird hierzu die Sprache C.
### Wieso verwendet man ein Kernel-Modul?
Sinn des Kernel-Modules ist es im laufenden Betrieb einen Treiber für ein tempörär
benötigtes Device zu Laden und wenn es nicht gebraucht wird zu entladen. Diese Methode
verbraucht also nur dann System-Resourcen wenn das Modul geladen und benutzt wird.
benötigtes Device zu laden und wenn es nicht gebraucht wird zu entladen. Diese Methode
verbraucht also nur dann System-Ressourcen wenn das Modul geladen und benutzt wird.
Ein weiterer Vorteil ist, dass man das System nach dem Laden des Moduls nicht neustarten muss und
das Gerät sofort einsatzbereit ist.
Außerdem ist ein LKM leichter zu warten und debuggen als ein in den Kernel kompilierter Treiber.
## Für was verwendet man ein Kernel-Modul?
Im Großen und Ganzen gibt es 6 Hauptanwedungsgebiete:
Im Großen und Ganzen gibt es 5 Hauptanwedungsgebiete:
- Device driver: Ein Gerätetreiber ist nur für ein spezielles Gerät, um mit dem Computer zu kommunizieren.
- Filesystem driver: Ein Dateisystemtreiber interpretiert den Inhalt eines Dateisystems
(das normalerweise der Inhalt eines Laufwerks ist) als Dateien und Verzeichnisse als solche.
- System calls: User-Space Programme verwenden Systemaufrufe um Informationen vom Kernel zu bekommen.
- Network drivers: Ein Netzwerktreiber interpretiert Netzwerkprotkolle.
- Executable interpreter: Linux kann viele Dateivormate ausführen, benötigt aber für jedes Format einen executable interpreter.
- Executable interpreter: Linux kann viele Dateiformate ausführen, benötigt aber für jedes Format einen executable interpreter.
Quelle: [Linux Loadable Kernel Module HOWTO] (http://tldp.org/HOWTO/Module-HOWTO/index.html)
......@@ -49,7 +49,7 @@ Man benötigt außerdem den ausfürbaren Code in C in diesem Verzeichnis:
> $ nano sevenseg.c
## 2.1 Makefile
Das Makefile wird verwendet um den ausführbaren Code zu kompilieren hierbei ist eine spezielle Formatierung vorgegeben.
Das Makefile wird verwendet um den ausführbaren Code zu kompilieren, hierbei ist eine spezielle Formatierung vorgegeben.
```
obj-m := sevenseg.o
......@@ -60,7 +60,7 @@ clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
```
Da das Modul außserhalb des Kernel-Source-Trees verwaltet und kompiliert werden soll, wird in der ersten Zeile
Da das Modul außerhalb des Kernel-Source-Trees verwaltet und kompiliert werden soll, wird in der ersten Zeile
durch `obj-m := sevenseg.o` ein Makefile im eigenen Source-Tree erstellt.
Außerdem kompiliert der Eintrag `sevenseg.c` in `sevenseg.ko`.
......@@ -70,7 +70,7 @@ Hier wird das Modul in das built-Verzeichnis des aktuellen Kernels (`$(shell una
Beim entladen des Moduls wird target `clean:` aufgerufen und löscht das Modul aus dem Kernel.
Bei der Formatierung ist darauf zu Achten vor den Makebefehlen einen tab einzurücken.
Bei der Formatierung ist darauf zu Achten vor den Makebefehlen einen Tab einzurücken.
Das Makefile wird durch den Befehl `make sevenseg.c` ausgeführt und liefert folgende Systemausgabe:
```
......@@ -88,7 +88,7 @@ Quellen:
## 2.2 sevenseg.c
### 2.2.1 Header-Files und Definition von Makros
Damit alle Funktionen der im Code verwendeten Funktionen funktionieren müssen einige Header-Files eingebunden werden:
Damit alle der im Code verwendeten Funktionen funktionieren müssen einige Header-Files eingebunden werden:
```
#include <linux/init.h>
#include <linux/module.h>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment