OSUE Linux Kernel Modul Bonusbeispiel

Werbung
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
OSUE
Linux Kernel Modul Bonusbeispiel
Christian Hirsch <[email protected]>
basierend auf Slides von Bernhard Frömel
Institut für Technische Informatik
Technische Universität Wien
182.709 Betriebssysteme UE
SS16
Mai 2016
1
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Motivation
Linux ist erweiterbar – beispielsweise per Einbindung von HW:
I
Digital Video Broadcasting (DVB) PCI card, IP over Satellite
I
(LCD) Displays:
echo ’Hello World!’ > /dev/disp
2
OSUE
Linux Kernel
Modul
Bonusbeispiel
Überblick
Christian Hirsch
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
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Teil I
Kernel Module und Device Drivers
Device
Drivers
4
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
5
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Komplexizität vs Fehler
Wenn Bugs auftreten, dann oft trotzdem schwer zu beheben
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
http://www.phoronix.com/scan.php?page=news_
item&px=MTg1MDc http://codemonkey.org.uk/
2015/01/08/closure-nasty-bug/
6
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Allgemeines
I
Linux Kernel ist monolithisch (gesamtes OS im Ring 0)
I
Loadable Kernel Module (LKM) Unterstützung
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
I
I
I
erweitern den Kernel um zusätzliche Funktionalität
entwickeln, laden und entfernen von Modulen zur
System-Laufzeit
insbesondere gut geeignet für Device Drivers
(Gerätetreiber)
I
I
I
nur benötigte Treiber zu tatsächlich vorhandenen Geräten
werden geladen
vereinfachte Entwicklung (kein Reboot erforderlich)
”Module Stacking”, d.h. aufeinander aufbauende Module,
möglich (modprobe(3))
7
OSUE
Linux Kernel
Modul
Bonusbeispiel
A split view of the kernel
The System Call Interface
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
Process
management
Memory
management
Filesystems
Device
control
Networking
Concurrency,
multitasking
Virtual
memory
Files and dirs:
the VFS
Ttys &
device access
Connectivity
Archdependent
code
Memory
manager
File system
types
Character
devices
Network
subsystem
Kernel
subsystems
Features
implemented
Software
support
Block devices
IF drivers
Hardware
CPU
Memory
Disks & CDs
Consoles,
etc.
Network
interfaces
features implemented as modules
8
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Kernel Modul (1)
I
Der Linux
Kernel
Kernel Module sind immer
serviceorientiert:
I
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
I
I
Keine externen Bibliotheken
(insb. keine libc!), aber viele
”bekannte” Funktionen trotzdem
vertreten
I
I
I
Beim Ladevorgang
”einhängen” in
Kernelstrukturen, bzw.
Bekanntmachung, welche
Services angeboten werden
Danach nur noch Bearbeitung
von Requests
Formatierten String ausgeben:
printk (linux/kernel.h)
linux/string.h: strcpy, strcat,
memset, ...
Limitierte Stackgröße: 8 KByte
9
OSUE
Linux Kernel
Modul
Bonusbeispiel
Kernel Modul (2)
Christian Hirsch
I
Der Linux
Kernel
Gleichzeitigkeit (Concurrency) beachten!
I
Kernel
Modul
I
I
Appplication
vs. Kernel
Modul
Device
Drivers
Sequentieller Code kann immer unterbrochen werden
(schon beim Laden des Moduls! –> ”Module Loading
Races”)
I
I
Scheduling/Preemption
Interrupts (e.g., kernel timers)
Symmetric Multi Prozessor (SMP)
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
(Userspace) Applikation vs. Kernel Modul
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
Kriterium
Funktion
Parameter
”Entry Point”
”Exit Point”
Bibliotheken
Stack Größe
Floating Point
Zugriffsverletz.
Res. Freigabe
Sprache
Applikation
Kernel Modul
task/serviceorientiert
nur serviceorientiert
Mod. Parameter
argv
main Funktion
”beliebig”
System (libc, libm, ...)
MByte
ja
Segmentation Fault
Termination
”beliebig”
module_init
module_exit
nur Kernel
KByte
nein (CPU context)
Kernel Fault
keine/Neustart
GNU C (C99 Std)
11
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Der Linux
Kernel
(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 Modul1
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
Their ”music” sounds like one of those sleep
CDs..
Charliemopps, Slashdot
1
http://entertainment.slashdot.org/story/14/04/23/2241209/bandreleases-album-as-linux-kernel-module
12
OSUE
Linux Kernel
Modul
Bonusbeispiel
Device Drivers (1)
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
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
Appplication
vs. Kernel
Modul
Device
Drivers
I
I
Hauptklassen von Device Treibern
I
I
I
I
keine (möglichst wenige) Regeln/Richtlinien bezüglich
seiner Verwendung dem User aufzwingen
die gesamte (möglichst komplette) Hardwarefunktionalität
anbieten
Character Device (Stream)
Block Device (Blocks)
Network Device (Packets)
Einteilung nach Subsystem: USB, SCSI, Firewire, . . .
13
OSUE
Linux Kernel
Modul
Bonusbeispiel
Security
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
Device
Drivers
I
Kernel hat ”max. Rechte” im System, d.h.
Sicherheitsprobleme im Kernel bedeuten
Sicherheitsprobleme im System
I
typische Security-Bugs:
I
I
I
Bufferoverflows
Information-Leakage
Unchecked User-Input
14
OSUE
Linux Kernel
Modul
Bonusbeispiel
Lizenzierung
Christian Hirsch
Der Linux
Kernel
Kernel
Modul
Appplication
vs. Kernel
Modul
I
Linux lizenziert unter Version 2 der General Public License
(GPL)2
I
Deklarierung der Lizenz per MODULE_LICENSE Makro
I
Proprietäre Module (d.h. Module die nicht GPLv2
kompatibel lizenziert sind) im Kernel ”toleriert”
I
Proprietäre Module erhalten aber nicht das komplette
Kernel API, Umgehungstaktiken:
Device
Drivers
I
Linuxant:
MODULE_LICENSE ( "GPL\0 f o r f i l e s i n the \"GPL\" d i r e c t o r y ; f o r others
, only LICENSE f i l e a p p l i e s " ) ;
I
2
Nvidia: open-source glue code, proprietärer Treibercode im
closed source binary-blob
Free vs Open Source, R. Stallman,
https://www.youtube.com/watch?v=Ag1AKIl_2GM
15
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Setup
Beispiel
Teil II
Build Prozess
16
OSUE
Linux Kernel
Modul
Bonusbeispiel
Kernel Quellen
Christian Hirsch
I
Setup
Kernel Quellen enthalten neben dem Kernel selbst
I
Beispiel
I
I
I
Build System basierend auf Unix Make,
–> <kernel_source>/Documentation/kbuild
Interfaces für User-Space Applikationen und Kernel Module
(Header Files)
Unterstützung für zahlreiche Architekturen
Device Driver
I
Linux Kernel Archiv: www.kernel.org
I
”configured” Kernel-tree passend zum Laufzeitkernel
(uname -a) um gebautes Module laden zu können
I
I
I
oft erhältlich als Package in Distributionen
(linux-headers-...)
(Symlink /usr/src/linux sollte auf Kernelquellen verweisen)
Devel- & Testsystem (e.g. Virtual Machine, . . . ) sinnvoll
17
OSUE
Linux Kernel
Modul
Bonusbeispiel
Compilieren eigener Kernel Module
Christian Hirsch
Setup
I
“out-of-tree” Builds möglich
I
dabei Makefile ”two-faced”
Beispiel
I
Bei Ausführung im Modulquellverzeichnis: Wechsel in
Kernel Source Directory und Ausführung des eigentlichen
Kernel Makefiles um das Modul zu übersetzen
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
I
Bei Kernel-Build Einbindung: wird zu Makefilefragment, das
die gesamte Compile-Info für Kernel-Build Vorgang enthält
obj-m := cmod1.o cmod2.o ...
I
Laden und Entfernen von Modulen per insmod(8) und
rmmod(8) als Superuser (”root”) zur Laufzeit möglich
I
aktuelle Liste der geladenen Module: lsmod(8)
18
OSUE
Linux Kernel
Modul
Bonusbeispiel
Hello World Modul, ’Makefile’
Christian Hirsch
Setup
Beispiel
% (for kernel build)
obj-m := hello_world.o
% (for module build)
KERNELDIR = /usr/src/linux
all: modules
modules modules_install clean:
$(MAKE) V=1 ARCH=um -C ${KERNELDIR} M=$(PWD) $@
19
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Setup
Beispiel
Hello World Modul, ’hello_world.c’
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int mod_init(void)
{
printk(KERN_ALERT "Hello World!\n");
return 0;
}
static void mod_exit(void)
{
printk(KERN_ALERT "Bye World!\n");
}
module_init(mod_init);
module_exit(mod_exit);
20
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Character
Devices
File
Operationen
Kernelspace
Lifecycle
Teil III
Character Devices
21
OSUE
Linux Kernel
Modul
Bonusbeispiel
Character Devices
Christian Hirsch
Character
Devices
File
Operationen
I
zeichenorientierte Geräte, die sich wie Files verhalten z.B.
Maus, Keyboard, Serial, ...
I
implementieren meist open, close, read und write File
Operationen
I
oft nur sequentiell les/schreibbar (z.B. /dev/ttyS0)
Kernelspace
Lifecycle
22
OSUE
Linux Kernel
Modul
Bonusbeispiel
Major/Minor Number
Christian Hirsch
Character
Devices
I
Special File (mknod(1)) in /dev/ referenziert Device per
Typ, Major und Minor Device Number
I
Dynamische Anforderung (alloc_chrdev_region) od.
statische Zuweisung (register_chrdev_region) möglich
I
Kernel verwaltet Character Devices in struct cdev, die
als Member struct file_operations enthält.
I
Dabei ist struct inode die Kernel-interne
Repräsentation einer Datei, und struct file die eines
offenen Dateideskriptors
File
Operationen
Kernelspace
Lifecycle
23
OSUE
Linux Kernel
Modul
Bonusbeispiel
File Operationen
Christian Hirsch
Character
Devices
File
Operationen
Kernelspace
Lifecycle
I
struct file_operations (linux/fs.h) enthält
Function Pointer als Members: z.B.
int (*open)(struct inode *,struct file *);
int (*release) (struct inode *, struct file *);
int (*unlocked_ioctl) (struct inode *,
struct file *, unsigned int, unsigned long);
(ioctl vs. unlocked_ioctl:
http://lwn.net/Articles/119652/)
ssize_t (*read) (struct file *,
char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *,
const char __user *, size_t, loff_t *);
loff_t (*llseek) (struct file *, loff_t, int);
24
OSUE
Linux Kernel
Modul
Bonusbeispiel
File Operationen
I
Device Treiber kann Default-Verhalten der File
Operationen ”überschreiben”
Character
Devices
I
Funktionen werden bei den jeweiligen Operationen (vom
Userspace) auf das Character Device aufgerufen
File
Operationen
I
Ausführung im Kernelspace, im Kontext des aufrufenden
Userspace Prozesses
Kernelspace
I
Setzen des struct module *owner Members wichtig,
sodass Modul nicht aus System entfernt werden kann,
solange File Operationen ausgeführt werden.
Christian Hirsch
Lifecycle
struct file_operations my_fops = {
.owner = THIS_MODULE,
.open = my_open,
.release = my_release,
.unlocked_ioctl = my_ioctl,
.read = my_read,
.write = my_write,
.llseek = my_llseek,
};
25
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Character
Devices
File
Operationen
Kernelspace
Lifecycle
open
struct my_dev
{
struct cdev cdev;
/* other
members needed
for device */
};
int my_open(struct inode *inode, struct file *filp)
{
struct my_dev *dev;
dev = container_of(inode->i_cdev,
struct my_dev, cdev);
filp->private_data = dev;
return 0;
}
indoe->i_cdev Zeiger auf cdev Member von
struct my_dev
container_of:
http://www.kroah.com/log/linux/container_of.html
26
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Character
Devices
the file structure when appropriate. The pread and pwrite system calls have different semantics, however; they operate from a given file offset and do not change the
file position as seen by any other system calls. These calls pass in a pointer to the
user-supplied position, and discard the changes that your driver makes.
read/write
Figure 3-2 represents how a typical read implementation uses its arguments.
ssize_t dev_read(struct file *file, char *buf, size_t count, loff_t *ppos);
File
Operationen
Kernelspace
Lifecycle
struct file
Buffer
(in the driver)
f_count
f_flags
f_mode
f_pos
Buffer
(in the
application
or libc)
copy_to_user()
....
....
Kernel Space
User Space
(nonswappable)
(swappable)
Figure 3-2. The arguments to read
Both the read and write methods return a negative value if an error occurs. A return
value greater than or equal to 0, instead, tells the calling program how many bytes
have been successfully transferred. If some data is transferred correctly and then an
27
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Character
Devices
Synchronisation
I
Zugriff auf shared resources muss synchronisiert werden
I
Semaphoren
I
Initialisierung:
sema_init(struct semaphore *, int);
File
Operationen
I
P Operation: z.B.
I
int down_interruptible(struct semaphore *);
V Operation: z.B. void up(struct semaphore *);
Kernelspace
Lifecycle
I
I
I
Spinlocks
I
I
I
Als Mutex: Schutz eines kritischen Abschnitts,
Initialisierung mit 1
Prozess wird u.U. geblockt (nicht geeignet für
Interrupthandler)
Deaktiviert Interrupts, Busy Waiting (Multiprozessor)
Kann in Interruptbehandlungsroutinen verwendet werden
atomic_* Funktionen: z.B.
void atomic_inc(atomic_t *v);
28
OSUE
Linux Kernel
Modul
Bonusbeispiel
Speichermanagement
Christian Hirsch
Character
Devices
I
Speicherverwaltung sehr flexibel unter Linux (siehe LDD3,
Chapter 8: page-oriented, vmalloc, caches, pools, . . . );
File
Operationen
I
für die meisten Fälle geeignet:
I Speicher anfordern: void
*kmalloc(size_t, int);
I Speicher freigeben: void kfree(void
*ptr);
I
angeforderter Speicher nicht initialisiert (kann beliebigen
Inhalt haben)
I
freigegebener Speicher wird nicht automatisch gelöscht
Kernelspace
Lifecycle
int *data = kmalloc(DATA_SIZE, GFP_KERNEL);
/* Fehlerbehandlung und
Verwendung von angefordertem Speicher */
kfree(data);
29
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Character
Devices
File
Operationen
Datenaustausch Kernelspace <-> Userspace
Oft notwendig Bufferinhalte vom Kernel-Space in den
User-Space und umgekehrt zu transferieren:
I
Niemals ungeprüfte Pointer im Kernel dereferenzieren!
I
copy to/from user Interface (asm/uaccess.h) nutzen:
unsigned long copy_to_user(void __user *to,
const void *from,
unsigned long count);
unsigned long copy_from_user(void *to,
const void __user *from,
unsigned long count);
Kernelspace
Lifecycle
I
wie memcpy, zusätzlich: Prüfung des User-Space Pointers
I
Rückgabe enthält Anzahl der nicht kopierten Bytes (d.h.
wenn nicht 0 –> Fehler).
I
Kopieroperationen können jederzeit unterbrochen werden
(Concurrency!) z.B. angeforderte Page nicht im
Hauptspeicher
30
OSUE
Linux Kernel
Modul
Bonusbeispiel
Lifecycle eines Character Devices
Christian Hirsch
Character
Devices
I
Initialisierung
I
File
Operationen
I
Kernelspace
Registrierung/Allozierung der Character Device Region:
register_chrdev_region
Initialisierung der Character Device Struktur
struct cdev (inkl. struct file_operations):
cdev_init
I
Lifecycle
I
Registrierung des Character Devices im Kernel: cdev_add
Bemerkung: Ab diesem Zeitpunkt muss damit gerechnet
werden, dass das Device verwendet wird - auch wenn die
module_init Funktion noch nicht fertig ist!
Entfernung
I
I
Deregistrierung des Character Devices: cdev_del
Deregistrierung der Character Device Region:
unregister_chrdev_region
31
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Übungsumgebung
Org
Teil IV
Angabe
LDD3 vs.
4.0.2
Bonusbeispiel
Ausblick
und Quellen
32
OSUE
Linux Kernel
Modul
Bonusbeispiel
Christian Hirsch
Übungsumgebung
Übungsumgebung
I
Kernel 4.0.2, Debian 8, Jessie
I
User Mode Linux (UML) Umgebung im TI-Lab installiert
I
Read-only Base Image (gross)
/opt/osue/uml/osue_bonus.umldisk
Org
I
Angabe
Overlay im Homedirectory (nur Änderungen zum Base
Image): ~/.uml.cow
LDD3 vs.
4.0.2
I
Ausblick
und Quellen
virtuelle Maschine: Linux wird als User-Prozess ausgeführt
(Architektur um)
I
”sichere” Umgebung für riskantes (und rasches) Entwickeln
I
Interaktion mit Host per hostfs Filesystem (z.B.
Home-Directory kann gemountet werden)
I
Interaktion mit User über Pseudo Terminals in
/dev/pts/ (z.B. per screen(1) verwendbar)
I
weitere Details: siehe Angabe (im myTI)
33
OSUE
Linux Kernel
Modul
Bonusbeispiel
Organisatorisches
Christian Hirsch
I
Übungsumgebung
Selbststudium: Linux Device Drivers 3rd Edition (LDD3) zumindest Kapitel 1 bis 3, 5 (Semaphoren)
I
Richtlinien:
I
Org
I
Angabe
LDD3 vs.
4.0.2
I
I
Ausblick
und Quellen
Beispielabnahme ausschliesslich auf TI-Lab Umgebung
GNU C Standard, i.e. C99 Std. mit GNU Erweiterungen
(statt C89 Standard und gegebenen CFLAGS für alle
anderen Beispiele)
debug Modul Parameter (siehe Angabe)
Coding Style:
/usr/src/linux/Documentation/CodingStyle
I
I
Synchronisation
Sauberes Modul Unloading (keine Resourceleaks!)
I
Abgabedeadline: 26.06.2016 23:59
I
Abgabegespräche 27.06.2016 (bei Bedarf 28.06.2016),
Anmeldung via myTI, TI Labor
I
Beginn: ab sofort
34
OSUE
Linux Kernel
Modul
Bonusbeispiel
Bonusbeispiel: Secvault - Übersicht
Christian Hirsch
Übungsumgebung
I
Character Device Driver soll als Kernel Modul
implementiert werden
I
Verwaltung von bis zu 4 Secure Vaults (Secvaults)
Org
Angabe
LDD3 vs.
4.0.2
Ausblick
und Quellen
I
I
I
Größe zwischen 1 Byte und 1 MByte (konfigurierbar)
verschlüsselt nach XOR Verfahren
Userspace Tool: svctl
I
I
anlegen und entfernen von Secvaults
Löschung (gesamten Speicher mit 0x0 überschreiben)
eines Secvaults.
35
OSUE
Linux Kernel
Modul
Bonusbeispiel
Ablauf
Christian Hirsch
Übungsumgebung
I
Einmaliges Anlegen der notwendigen Special Files per
mknod(1): /dev/sv_ctl, /dev/sv_data0,
/dev/sv_data1, /dev/sv_data2, /dev/sv_data3
I
Modul stellt nach dem Laden Control Character Device
(/dev/sv_ctl) zur Verfügung
I
Userspace Tool svctl kommuniziert per IOCTL Calls mit
Control Device (/dev/sv_ctl) des Treibers
Org
Angabe
LDD3 vs.
4.0.2
Ausblick
und Quellen
I
I
Anlegen, Löschen (mit 0x0 überschreiben) und Entfernen
eines Secvaults
liest Schlüssel über stdin (bis zu 10 Byte, wenn weniger:
0x0).
36
OSUE
Linux Kernel
Modul
Bonusbeispiel
Anlegen
Christian Hirsch
Übungsumgebung
Org
Angabe
LDD3 vs.
4.0.2
Ausblick
und Quellen
I
Überprüfung, ob Secvault schon existiert, falls ja –> Fehler
I
sonst:
I
I
I
Erzeugung eines neuen Character Devices
angeforderten Speicher reservieren
Schlüssel zum Secvault speichern
37
OSUE
Linux Kernel
Modul
Bonusbeispiel
Lesen/Schreiben/Löschen/Entfernen
Christian Hirsch
Übungsumgebung
I
Beim Lesen/Schreiben *): Anwendung des symmetrischen
Verchlüsselungsverfahren XOR abhängig von Position
crypt(pos, data, key) = data[pos] ⊕ key[pos mod keysize ]
I
Wenn über Speichergrenze des Secvaults
hinausgelesen/geschrieben wird: geeignete
Fehlerbehandlung
I
Löschanforderung: den gesamten Secvault mit 0x0
überschreiben (Operation innerhalb des Moduls!)
I
Entfernung: Speicher- und Characterdevicefreigabe *)
Org
Angabe
LDD3 vs.
4.0.2
Ausblick
und Quellen
*) hier kann auch überprüft werden, ob der Benutzer berechtigt
ist (siehe Fragen in Angabe)
38
OSUE
Linux Kernel
Modul
Bonusbeispiel
Secvaults – Relevanz?
Christian Hirsch
Übungsumgebung
Org
Angabe
LDD3 vs.
4.0.2
Ausblick
und Quellen
39
OSUE
Linux Kernel
Modul
Bonusbeispiel
Unterschiede LDD3 und Linux 4.0.2
Christian Hirsch
Übungsumgebung
Org
LDD3 für 2.6.10 - API Changes:
http://lwn.net/Articles/2.6-kernel-api/
zB:
Angabe
LDD3
4.0.2
LDD3 vs.
4.0.2
ioctl
init_MUTEX(&mutex)
current->uid
uid_t
uid_a == uid_b
unlocked_ioctl
sema_init(&mutex, 1)
current_uid()
kuid_t
uid_eq(uid_a, uid_b)
Ausblick
und Quellen
Weitere Änderungen ?
–> mailto:[email protected]
40
OSUE
Linux Kernel
Modul
Bonusbeispiel
Ausblick
Christian Hirsch
Übungsumgebung
I
Letzte Vorlesung!
Org
I
Lust auf mehr Linux Kernel Entwicklung?
I
Angabe
I
LDD3 vs.
4.0.2
I
Ausblick
und Quellen
Lust auf Konzepte/Design zwischen Hardware and
Userspace Software?
I
I
3
4
Talk: ’Write and Submit your first Linux kernel Patch’3
Linux Kernel Newbies4
Programmierung von Betriebssystemen (ProgOS) 182.710
(Sommersemester)
Live Demo
http://www.youtube.com/watch?v=LLBrBBImJt4
http://kernelnewbies.org/
41
OSUE
Linux Kernel
Modul
Bonusbeispiel
Quellen und Material
Christian Hirsch
Übungsumgebung
Org
Angabe
LDD3 vs.
4.0.2
Ausblick
und Quellen
I
”Linux Device Drivers 3rd Edition” (LDD3) von Jonathan
Corbet, Alessandro Rubini, and Greg Kroah-Hartman
http://lwn.net/Kernel/LDD3/
I ”Linux Kernel Development 2nd Edition” von Robert Love
http://book.chinaunix.net/special/ebook/Linux_Kernel_
Development/0672327201/toc.html
I ’Comic’: https://www.kickstarter.com/profile/1694714745
I Ramdump setup: neimod, 3ds scene
I Protection rings figure:
https://en.wikipedia.org/wiki/Protection_ring
42
Herunterladen