Sie sind auf Seite 1von 13

Rückblick letzte Übung: FIFO Warteschlange

Rückblick letzte Übung: FIFO Warteschlange printm_ext.c und fifo_queue.c U6 Prof. Dr. Stefan Böhmer Einführung 3.

printm_ext.c und fifo_queue.c

U6
U6

Prof. Dr. Stefan Böhmer

Einführung 3. Message Queueing

36
36
Entwicklungsprojekt Kernel Module Monitor 1. Einführung und Zielsetzung 2. 3. 4. 5. 6. 7. Variadic
Entwicklungsprojekt
Kernel Module Monitor
1.
Einführung und Zielsetzung
2.
3.
4.
5.
6.
7.
Variadic function
Message Queueing
Character Device Kernel Module
Concurrency und Kernel Space Adjustment
User Space I/O Interface
Applikationsentwicklung

Kernel Module Monitor

4. Character Device Kernel Module

4. Character Device Kernel Module 1. Linux Kernel Struktur 2. Hardware I/O 3. Linux Device
4. Character Device Kernel Module
1.
Linux Kernel Struktur
2.
Hardware I/O
3.
Linux Device Driver Model
4.
Character Device Realisierung
U6
U6

Prof. Dr. Stefan Böhmer

37
37

Struktur des Linux Kernels

Struktur des Linux Kernels Kernel Module Monitor 4. Character Device Kernel Module U6 Bildquelle: z.B.

Kernel Module Monitor

4. Character Device Kernel Module

U6
U6

Bildquelle: z.B. http://technet.co.at/docs/linux/definition.html

Prof. Dr. Stefan Böhmer

38
38

Kernel Module Monitor

4. Character Device Kernel Module

PC Mainboard: Hardware I/O Struktur

Device Kernel Module PC Mainboard: Hardware I/O Struktur 39 Bildquelle: http://en.wikipedia.org/wiki/Super_I/O U6
39
39

Bildquelle: http://en.wikipedia.org/wiki/Super_I/O

U6
U6

Prof. Dr. Stefan Böhmer

Hardware I/O Architektur

Hardware I/O Architektur Kernel Module Monitor 4. Character Device Kernel Module Zugriff auf I/O Ports: •

Kernel Module Monitor

4. Character Device Kernel Module

Zugriff auf I/O Ports:

Port Mapped I/O

spez. Assemblerbefehle erforderlich

Kernel Unterstützung :

inb(), inw(), inl() …

outb(), outw(), outl()

Memory Mapped I/O

I/O Ports im Speicherbereich der CPU

I/O Ports werden durch den Kernel in einer Baumstruktur verwaltet

U6
U6

Prof. Dr. Stefan Böhmer

40
40

Linux Device Driver Modell (DDM) -1-

Linux Root Filesystem (Auszug)

Kernel Module Monitor

4. Character Device Kernel Module

U6
U6

» DDM definiert eine einheitliche Sicht auf die Komponenten der I/O Architektur:

- Busse

- Schnittstellen

- Schnittstellen-Treiber

» Abbildung erfolgt auf das sysfs

Dateisystem ( /sys )

Prof. Dr. Stefan Böhmer

41
41

Linux Device Driver Modell (DDM) -2-

Aufbau des DDM

Kernel Module Monitor

4. Character Device Kernel Module

zentrale Datenstruktur ist das Kernel Objekt, welches in sog. container Objekte eingebettet wird

container Objekte sind die Strukturelemente des DDM

Kernel Objekte innerhalb von Containern ermöglichen es dem Kernel

Referenzzähler für Container zu verwalten

Hierarchische Listen von Containern zu verwalten

Struktur kobject ./include/linux/kobject.h

Begriffe:

kset: Gruppe von kobjetcs, die von unterschiedlichem Typ sein können, jedoch zusammengehörig sind und in gleicher Weise behandelt werden (Beispiel: Gruppe der Device Driver)

kobj_type: Struktur, die den Typ eines Kernel Objektes repräsentiert und an das Kernel Objekt gebunden ist

subsystem: Gruppen (ggf. unterschiedlicher) ksets, realisiert als verkettete Liste von ksets

42
42
U6
U6

Prof. Dr. Stefan Böhmer

Linux Device Driver Modell (DDM) -3-

Kernel Module Monitor

4. Character Device Kernel Module

Beispiel: bus (subsystem) pci (subsystem) drivers (kset) serial (kobject) attributes (kobject_type)

Sofern ein kobject, kset, oder subsystem im sysfs Dateisystem

sichtbar sein soll Registrierung im Kernel erforderlich

subsystem, kset, kobject Verzeichnisse

kobjects_type Datei

Beispiel:

U6
U6
subsystem, kset, kobject  Verzeichnisse – kobjects_type  Datei • Beispiel: U6 Prof. Dr. Stefan Böhmer

Prof. Dr. Stefan Böhmer

43
43

Linux Device Driver Modell (DDM) -4-

Kernel Module Monitor

4. Character Device Kernel Module

Der Kernel bietet (De-) Registrierungsfunktionen für subsystems, ksets und kobjects über die Funktionen xyz_register() und

xyz_unregister() an (Kernel API)

Komponenten des DDM

1. Devices

Devices werden durch ein Objekt vom Typ device beschrieben, welches unter anderem

ein kobject

Referenzzeiger für andere Devices, den Bus und den Device Treiber

enthält

Device Objekte sind typischerweise in „größere“ Objekte eingebettet (z.B. pci_dev), Registrierung schließt device Objekt ein (pci_register())

2. (Device) Drivers

Device Drivers werden durch ein Objekt device_driver beschrieben; die Beschreibung bezieht Methoden für „hot-plugging“, „plug and play“ sowie „power management“ ein

U6
U6

Prof. Dr. Stefan Böhmer

44
44

Linux Device Driver Modell (DDM) -5-

Kernel Module Monitor

4. Character Device Kernel Module

(De-) Registrierung erfolgt über driver_register() und driver_unregister()

device_driver Objekte werden typischerweise in „größere“ Objekte eingebettet (z.B. pci_driver() )

3. Busses

werden durch ein bus_type Objekt beschrieben

4. Classes

Classes gruppieren Devices unter logischen Gesichtspunkten, d.h. ein physikalisches Device kann mehreren

eine Klasse wird durch ein class Objekt beschrieben

Beispiele:

printer

input

net

Strukturen sind in ./include/linux/devices.h definiert

U6
U6

Prof. Dr. Stefan Böhmer

45
45

Linux Device Driver Modell (DDM) -6-

Kernel Module Monitor

4. Character Device Kernel Module

Der Zugriff auf Device Treiber aus dem User Space erfolgt über spezielle Dateien des Dateisystems /dev

aus Sicht der Applikation wird auf einen Device Name zugegriffen Beispiele: /dev/tty0, /dev/sda0, /dev/cdrom

der Kernel bildet den Device Name auf eine Gerätenummer (ab 2.6.x.x) ab

Ein Device Treiber wird als Block oder Character Device Driver realisiert

Block Devices erlauben eine wahlfreien Zugriff auf die Daten

Character Devices ermöglichen nur einen sequentiellen Datenzugriff

Traditionell wurden/werden Device Treiber über eine

Major Number ( 8 bit) ; z.B. Gerät und

Minor Number (8bit) ; Untereinheit (z.B. Partition) eines Gerätes

identifiziert

Ab Kernel 2.6 wird dieses Paar auf die Gerätenummer abgebildet

U6
U6

Prof. Dr. Stefan Böhmer

46
46

Linux Device Driver Modell (DDM) -7-

Kernel Module Monitor

4. Character Device Kernel Module

Die Verwaltung der Gerätenummern erfolgt in Strukturen vom Typ

dev_t (./include/linux/types.h)

Für die Abbildung Major-Nr., Minor-Nr. Gerätenummer stehen die

Kernel-Makros MAJOR, MINOR und MKDEV zur Verfügung (Kernel API)

Die Struktur dev_t teilt die verfügbaren 32 bit logisch in die Bereiche

Major Number (12 bit)

Minor Number (20 bit)

auf

Die Major Number kann

statisch (Modul); Werte: 60-63; 120-127; 240-254

oder

dynamisch (Vergabe durch Kernel: alloc_chrdev_region() )

festgelegt werden.

U6
U6

Prof. Dr. Stefan Böhmer

47
47

Character Device Realisierung -1-

Kernel Module Monitor

4. Character Device Kernel Module

Ein Character Device wird durch eine Struktur vom Typ cdev beschrieben:

struct cdev { struct kobject kobj;

struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev;

unsigned int count;};

Die Reservierung von Speicherplatz im Kernel erfolgt über die Funktion cdev_alloc() (./include/linux/cdev.h)

Beim Beenden des Moduls (bzw. bei gravierenden Fehlern) muss der Speicherplatz freigegeben werden: cdev_del()

U6
U6

Prof. Dr. Stefan Böhmer

48
48