Linux Device Driver I & II Flashcards

1
Q

Unterschied Modul und Driver

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Vorteile Module

A
Geringerer Ressourcen-Verbrauch im Kernel.
Einfache Treiberentwicklung (es ist kein ständiges Rebooten notwendig)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Aufgaben der Funktion init_module()?

A
Modul bei Kernel-Subsysteme anmelden
 IO-Subsystem (Treiber)
 PCI
 Sys-Filesystem
 proc-Filesystem
Initialisierung von Ojekten (z.B. Waitqueues)
Reservieren von Ressourcen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Aufgaben der Funktion cleanup_module()

A

Freigeben der allozierten Systemressourcen

Abmelden des Moduls beim System

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wo speichert der Kernel Consolenausgaben?

Wie sind diese aufrufbar?

A

log_buffer -> klogd

etc/syslogd -> syslogd

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Als was ist ein Treiber im Kernel repräsentiert?

A

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:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie werden Treiber eindeutig identifiziert?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Vorteile Funktionen oder gar ganze Applikationen im Kernel ablaufen zu lassen?

A
  • Zeit – Kontextwechselzeit – eingespart

- verbesserte Reaktionszeit.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was wird im Begriff »asynchrone Verarbeitung« zusammengefasst.

A

Interrupts werden asynchron zur App ausgeführt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was passiert beim eintreffen eines Interrupts?

A

Wird ein Interrupt ausgelöst, unterbricht die CPU sofort die aktuelle Verarbeitung und springt in eine Interrupt-Service-Routine (ISR)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche Funktion muss der Entwickler bei Treiber Entwicklung berücksichtigen

A

ISR Programmieren um mit Interrupts in einer Funktion umzugehen.
Diese werden beim einbinden beim Kernel registriert, der dann aufgerufen wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was beinhaltet die Funktion requestirq

A
  • 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).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Welche Interrupts dürfen sich schlafen legen welche nicht?

A

Nicht: HardIR, Tasklet
Allowed: Software IR, Kernel Threads

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was muss bei der Verwendung von Tasklets beachtet werden?

A

Race Condition -> Treiber entladen bevor Tasklet ausgeführt wurde.
Lösung: TaskletKill in modexit

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie funktionieren Timer SoftIR?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Gleicher Treiber ruft von unterschiedlichen Stellen das Timer Tasklet auf. Wie wird sichergestellt das es zu keine crash kommt?

A

spin_lock_irqsave

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Können sich Kernel Threads schlafen legen?

A

Ja

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was ist ein Kernel Thread?

A

Kernel-Thread entspricht einem Thread auf User-Ebene
Unterschied: Wird im Kernel abgearbeitet.
Wird gescheduled

19
Q

Wie werden die Kernel Threads aufgerufen?

A

SystemCall

20
Q

Warum hilft der Befehl fork im Kernel Thread nichts?

A

Sobald der System Call beendet ist wird die Bearbeitung im User Kontext fortgesetzt.
Verwende kernel_thread

21
Q

Wie funktioniert kernel_thread()?

A

Kopie des aktiven Prozesses Threads

Funktion wird übergeben beim Scheduling

22
Q

Wie lange werden Kernel Threads ausgeführt?

A

Da Kernel-Threads im Kernel-Level ablaufen, bekommen sie die CPU so lange zugeteilt, bis sie sich schlafen legen (wait_event oder wait_event_interruptible) oder beenden
!-> Alle anderen müssen warten

23
Q

Wie wird ein Kernel Thread schlafen bzw geweckt?

A
  • (wait_event oder wait_event_interruptible
  • wake_up_interruptible
  • Unterbrechen des Wartens durch das Senden eines Signals
24
Q

In welchem Zustand muss sich der Kernel Thread befinden um von einem Signal unterbrechbar zu sein?

A

TASK_INTERRUPTIBLE

25
Q

Was sind Workqueues?

A

Konkurieren mit Tasklets (nicht so hochprior)

Kernel Thread mit einer Queue und seq abarbeitung von Funktionen

26
Q

Funktionen von Workqueues?

A
  • create_workqueue()
    static struct work_struct work_object;
  • INIT_WORK( &work_object, work_queue_function, NULL);
  • queue_work einhängen Object in Workqueue.
  • destroy_workqueue
27
Q

Was Event Workqueue?

A

Standardmäßig initialisierte Queue für jede CPU der Funktionen abarbeiten kann

  • schedule_work
  • flush_scheduled_work.
28
Q

Welcher Schutz vor Kernel Race Conditions stehen zur Verfügung?

A
Atomare Integer-Operationen
Atomare Bit-Operationen
Semaphore
Interruptsperre
Spinlocks
29
Q

Befehl für atomic operations?

A

atomic_t index = ATOMIC_INIT(0);
atomic_set( &index, 4 );
old_index=atomic_read( &index );

30
Q

Warum werden Spinlocks gebraucht?

A

Schützen von kritischen Abschnitten im ISR Kontext Hardirqs; Softirqs die sich nicht schlafen legen dürfen

31
Q

Was ist der Kthread-Daemon

A

Der Kthread-Daemon ist selbst ein Kernel-Thread, in dessen Kontext der Kind-Thread erzeugt wird.
Eindeutiger Kontext

32
Q

Warum gibt es Funktionen wie spin_lock_irqsave und spin_lock_irq

A

Wenn ein kritischer Bereich geschützt wird ist oftmals nicht ersichtlich in welchem Kontext. Z.B eine Funktion disabled interrupts eine nicht. Damit die Methode nicht einfach die Interrupts wieder frei gibt wird der Kontext gespeichert und wiederhergestellt.

33
Q

Was ist Reordering? Welche Probleme enstehen dadurch und wie werden sie gelöst?

A

x Threads -> CPU oder Compiler ändern Ausführungsreihenfolge.

Lösung:
Spinlocks/Semaphore
Besser: Memory Barriers

34
Q

Was sind High vs Low Level Driver?

A

„low level“-Treiber greifen direkt auf die Hardware zu.
„high level“-Treiber nutzen Funktionen, die ihnen die „core driver“ zur Verfügung stellen. USB-Geräte greifen beispielsweise nie selbst direkt auf Hardware zu.

35
Q

Wie funktioniert Manuelle Ressourcen-Detektion Hardware-Anbindung?

A

Treiber spezifiziert die Geräte (Vendor- und Device-ID + Probe“ „Remove“ Funktion.
Treiber meldet sich beim PCI-Subsystem an.
Ist Hardware vorhanden, wird Probefunktion von PCI Subsystem aufgerufen. Der Treiber bekommt die zu
allozierenden Ressourcen mitgeteilt.
Nachdem die Ressourcen alloziert wurden, ist der „low level“ Zugriff möglich.

36
Q

Was ist der Unterschied zwischen non blocking und asynchronous?

A

Non-blocking > if an answer can’t be returned rapidly, the API returns immediately with an error and does nothing else. So there must be some related way to query whether the API is ready to be called(select poll)

Asynchronous means that the API always returns immediately, having started a “background” effort to fulfil your request, so there must be some related way to obtain the result.(callback)

37
Q

Nenne die 9 relevanten Treiberfunktionen die wir verwendet haben

A

open(), close(), read(), write()

ioctl(), select()/poll(), fcntl(), seek()

38
Q

Was macht die Funktion ioctl()?

A

Universal-Funktion zur Kommunikation mit dem Treiber.

Unterstützt frei definierbare Kommandos mit frei definierbaren Parametern

39
Q

Was macht die Funktion mmap()

A

Funktion, um Speicherbereiche eines Geräts (Hardware) in den Adressraum einer Applikation einzublenden.
Damit kann die Applikation performant (ohne Übergang in den Kernel-Mode) auf Hardware (-Register) zugreifen.

40
Q

Was macht die Funktion select()/poll()

A

Funktion um festzustellen, ob an einem oder an mehrerenGeräten (Dateien oder Netzverbindungen) Daten zum Lesen bereit liegen bzw. Daten geschrieben werden können.

41
Q

Was macht die Funktion lseek()?

A

Mit dieser Funktion kann in einer Datei (bzw. bei einem
Blockdevice) gezielt ein bestimmtes Byte gelesen bzw.
geschrieben werden

42
Q

Welche zwei Zugriffsarten gibt es auf Geräte?

A

blocking und non blocking

43
Q

Mit welchem Code wird non- und blocking Zugriff erreicht?

A

if(ReadPossible && instance->f_flags&O_NOBLOCK)
return -EGAIN

if(wait_event_interruptable(wq_reqd, READ_POSSIBLE)
return -ERESTARTSYS