Click here to load reader

OSUE Linux Kernel Modul Bonusbeispiel · PDF file OSUE Linux Kernel Modul Bonusbeispiel Frömel Der Linux Kernel Kernel Modul Appplication vs. Kernel Modul Device Drivers Allgemeines

  • View
    3

  • Download
    0

Embed Size (px)

Text of OSUE Linux Kernel Modul Bonusbeispiel · PDF file OSUE Linux Kernel Modul Bonusbeispiel...

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    OSUE Linux Kernel Modul Bonusbeispiel

    Bernhard Frömel

    Institut für Technische Informatik Technische Universität Wien

    - 182.709 Betriebssysteme UE

    WS15

    December 2015

    1

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Motivation Linux ist erweiterbar – beispielsweise per Einbindung von HW:

    I Digital Video Broadcasting (DVB) PCI card, IP over Satellite

    I Time-Triggered Ethernet, Time-Triggered System-on-Chip Frontend

    I Apple MacBook Pro Retina, apple-gmux1 1https://groups.google.com/forum/#!topic/linux.

    kernel/rlC-NG3Yv3Q 2

    https://groups.google.com/forum/#!topic/linux.kernel/rlC-NG3Yv3Q https://groups.google.com/forum/#!topic/linux.kernel/rlC-NG3Yv3Q

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Überblick

    I Kernel Module und Device Drivers

    I Kernel Modul Build Prozess

    I Character Devices

    I Übungsumgebung

    I Bonus Beispiel

    3

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Teil I

    Kernel Module und Device Drivers

    4

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Quelle: http://www.makelinux.net/kernel_map

    5

    http://www.makelinux.net/kernel_map

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Komplexizität vs Fehler

    Wenn Bugs auftreten, dann oft trotzdem schwer zu beheben

    http://www.phoronix.com/scan.php?page=news_ item&px=MTg1MDc http://codemonkey.org.uk/ 2015/01/08/closure-nasty-bug/

    6

    http://www.phoronix.com/scan.php?page=news_item&px=MTg1MDc http://www.phoronix.com/scan.php?page=news_item&px=MTg1MDc http://codemonkey.org.uk/2015/01/08/closure-nasty-bug/ http://codemonkey.org.uk/2015/01/08/closure-nasty-bug/

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Allgemeines

    I Linux Kernel ist monolithisch (gesamtes OS im Ring 0)

    I Loadable Kernel Module (LKM) Unterstützung I erweitern den Kernel um zusätzliche Funktionalität I entwickeln, laden und entfernen von Modulen zur

    System-Laufzeit I insbesondere gut geeignet für Device Drivers

    (Gerätetreiber) I nur benötigte Treiber zu tatsächlich vorhandenen Geräten

    werden geladen I vereinfachte Entwicklung (kein Reboot erforderlich)

    I ”Module Stacking”, d.h. aufeinander aufbauende Module, möglich (modprobe(3))

    7

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    A split view of the kernel

    This is the Title of the Book, eMatter Edition Copyright © 2005 O’Reilly & Associates, Inc. All rights reserved.

    6 | Chapter 1: An Introduction to Device Drivers

    The three classes are:

    Character devices A character (char) device is one that can be accessed as a stream of bytes (like a file); a char driver is in charge of implementing this behavior. Such a driver usu- ally implements at least the open, close, read, and write system calls. The text console (/dev/console) and the serial ports (/dev/ttyS0 and friends) are examples of char devices, as they are well represented by the stream abstraction. Char devices are accessed by means of filesystem nodes, such as /dev/tty1 and /dev/lp0. The only relevant difference between a char device and a regular file is that you can always move back and forth in the regular file, whereas most char devices are just data channels, which you can only access sequentially. There exist, nonetheless, char devices that look like data areas, and you can move back and forth in them; for instance, this usually applies to frame grabbers, where the applications can access the whole acquired image using mmap or lseek.

    Figure 1-1. A split view of the kernel

    features implemented as modules

    Process management

    Memory management

    Filesystems Device control

    Networking

    Arch- dependent

    code

    Memory manager

    Character devices

    Network subsystem

    CPU Memory

    Concurrency, multitasking

    Virtual memory

    Files and dirs: the VFS

    Kernel subsystems

    Features implemented

    Software support

    Hardware

    IF driversBlock devices

    File system types

    Ttys & device access Connectivity

    Disks & CDs Consoles, etc.

    Network interfaces

    The System Call Interface

    ,ch01.2168 Page 6 Thursday, January 20, 2005 9:21 AM

    8

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Kernel Modul (1)

    I Kernel Module sind immer serviceorientiert:

    I Beim Ladevorgang ”einhängen” in Kernelstrukturen, bzw. Bekanntmachung, welche Services angeboten werden

    I Danach nur noch Bearbeitung von Requests

    I Keine externen Bibliotheken (insb. keine libc!), aber viele ”bekannte” Funktionen trotzdem vertreten

    I Formatierten String ausgeben: printk (linux/kernel.h)

    I linux/string.h: strcpy, strcat, memset, ...

    I Limitierte Stackgröße: 8 KByte 9

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Kernel Modul (2)

    I Gleichzeitigkeit (Concurrency) beachten! I Sequentieller Code kann immer unterbrochen werden

    (schon beim Laden des Moduls! –> ”Module Loading Races”)

    I Scheduling/Preemption I Interrupts (e.g., kernel timers) I Symmetric Multi Prozessor (SMP)

    I auf saubere Synchronisation bei shared resources (globale Variablen, Devices, ...) achten!

    I ”manuelle” Freigabe von Ressourcen notwendig: kein ”Garbage Collector” - auch nicht bei Modulentfernung per rmmod(8)!

    I Portabilität wichtig: keine Annahmen über Seiten- und Wortgröße, Endianess, . . . treffen.

    10

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    (Userspace) Applikation vs. Kernel Modul

    Kriterium Applikation Kernel Modul

    Funktion task/serviceorientiert nur serviceorientiert Parameter argv Mod. Parameter ”Entry Point” main Funktion module_init ”Exit Point” ”beliebig” module_exit Bibliotheken System (libc, libm, ...) nur Kernel Stack Größe MByte KByte Floating Point ja nein (CPU context) Zugriffsverletz. Segmentation Fault Kernel Fault Res. Freigabe Termination keine/Neustart Sprache ”beliebig” GNU C (C99 Std)

    11

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    (Userspace) Applikation oder Kernel Modul? ’Rule of thumb’: Alles was im Userspace einfacher implementierbar ist, sollte im Userspace implementiert werden. Fails:

    I Band ’netcat’ veröffentlicht Album als Linux Kernel Modul2

    Their ”music” sounds like one of those sleep CDs..

    Charliemopps, Slashdot I fbrcapi: TCP Socket Client im Kernelspace . . . 2http://entertainment.slashdot.org/story/14/04/23/2241209/band-

    releases-album-as-linux-kernel-module 12

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Device Drivers (1)

    I Gerät wird hinter wohldefiniertem Programmierinterface abstrahiert (File in /dev/, Ausnahme: Netzwerkgeräte in Linux nicht unter /dev/ auffindbar)

    I Policy vs. Mechanism: Treiber soll I keine (möglichst wenige) Regeln/Richtlinien bezüglich

    seiner Verwendung dem User aufzwingen I die gesamte (möglichst komplette) Hardwarefunktionalität

    anbieten

    I Hauptklassen von Device Treibern I Character Device (Stream) I Block Device (Blocks) I Network Device (Packets)

    I Einteilung nach Subsystem: USB, SCSI, Firewire, . . .

    13

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Security

    I Kernel hat ”max. Rechte” im System, d.h. Sicherheitsprobleme im Kernel bedeuten Sicherheitsprobleme im System

    I typische Security-Bugs: I Bufferoverflows I Information-Leakage I Unchecked User-Input

    14

  • OSUE Linux Kernel

    Modul Bonusbeispiel

    Frömel

    Der Linux Kernel

    Kernel Modul

    Appplication vs. Kernel Modul

    Device Drivers

    Lizenzierung

    I Linux lizenziert unter Version 2 der General Public License (GPL)3

    I Deklarierung der Lizenz per MODULE_LICENSE Makro

    I Proprietäre