Linux Device Driver I & II Flashcards
Unterschied Modul und Driver
A kernel module is a bit of compiled code that can be inserted into the kernel at run-time, such as with insmod or modprobe.
A driver is a bit of code that runs in the kernel to talk to some hardware device.
Vorteile Module
Geringerer Ressourcen-Verbrauch im Kernel. Einfache Treiberentwicklung (es ist kein ständiges Rebooten notwendig)
Aufgaben der Funktion init_module()?
Modul bei Kernel-Subsysteme anmelden IO-Subsystem (Treiber) PCI Sys-Filesystem proc-Filesystem Initialisierung von Ojekten (z.B. Waitqueues) Reservieren von Ressourcen
Aufgaben der Funktion cleanup_module()
Freigeben der allozierten Systemressourcen
Abmelden des Moduls beim System
Wo speichert der Kernel Consolenausgaben?
Wie sind diese aufrufbar?
log_buffer -> klogd
etc/syslogd -> syslogd
Als was ist ein Treiber im Kernel repräsentiert?
Als ein Object
Instantiierung der struct file_operations
Registrieren des Objekts beim Chardev-Subsystem.
Grundprinzip: Für jede Applikationsfunktion gibt es eine
Funktion (Methode) im Kernel-Treiber-Objekt:
Wie werden Treiber eindeutig identifiziert?
Der Treiber meldet sich beim IO-Subsystem unter einer
eindeutigen Kennung (Major-Nummer) an.
Auf der User-Ebene gibt es eine Zuordnung zwischen dieser Major-Nummer und einem (Geräte-) Dateinamen (Aribut der Datei).
Im Kernel sind Major- und Minornummern durch eine 32-Bit breite Gerätenummer ersetzt worden.
Vorteile Funktionen oder gar ganze Applikationen im Kernel ablaufen zu lassen?
- Zeit – Kontextwechselzeit – eingespart
- verbesserte Reaktionszeit.
Was wird im Begriff »asynchrone Verarbeitung« zusammengefasst.
Interrupts werden asynchron zur App ausgeführt.
Was passiert beim eintreffen eines Interrupts?
Wird ein Interrupt ausgelöst, unterbricht die CPU sofort die aktuelle Verarbeitung und springt in eine Interrupt-Service-Routine (ISR)
Welche Funktion muss der Entwickler bei Treiber Entwicklung berücksichtigen
ISR Programmieren um mit Interrupts in einer Funktion umzugehen.
Diese werden beim einbinden beim Kernel registriert, der dann aufgerufen wird.
Was beinhaltet die Funktion requestirq
- die Interruptnummer,
- die Adresse der aufzurufenden Funktion (ISR),
- ein Flag,
- einen Namen als Kennung für den Treiber
- frei wählbare Kennung für das Gerät (dev_id).
Welche Interrupts dürfen sich schlafen legen welche nicht?
Nicht: HardIR, Tasklet
Allowed: Software IR, Kernel Threads
Was muss bei der Verwendung von Tasklets beachtet werden?
Race Condition -> Treiber entladen bevor Tasklet ausgeführt wurde.
Lösung: TaskletKill in modexit
Wie funktionieren Timer SoftIR?
- Anzahl periodischer Timerinterrupts.
- Im Zähler mit dem Namen jiffies gezählt.
- Alloc timer_list ptimer
- Übergabe function, data und expires an struct.
- add_timer -> ausführung
- del_timer_sync -> löschen Timer
Gleicher Treiber ruft von unterschiedlichen Stellen das Timer Tasklet auf. Wie wird sichergestellt das es zu keine crash kommt?
spin_lock_irqsave
Können sich Kernel Threads schlafen legen?
Ja