Einfuerung in Kernel Programmierung Michael Blizek
About Hauptsaechlich C/keine glibc z.B.: nicht printf, sondern printk keine Gleitkommazahlen Programmfluss Vorsicht, Interrupts Locking Speicherverwaltung
Programmfluss MODULE_INIT/MODULE_EXIT System calls Callbacks Threads, Timer, Workqueues, ...
Interrupts Interrupt ==> Task wird unterbrochen Interrupts abgedreht ==> Interrupts "gequeued" Wo? Interrupt-handler, Timer local_irq_disable/enable(), local_irq_save/restore() kein sleep() in Interrupts
Locking Interrupts aufgedreht: mutex Interrupts abgedreht: spinlock beides: local_irq_save/restore, spinlock
Speicherverwaltung physischer Speicher, nicht Virtueller kmalloc/kfree GFP_KERNEL, GFP_ATOMIC, GFP_DMA, GFS_NOIO, GFP_NOFS, GFP_HIGH slab caches Requests > 4096 Bytes ... nicht gut kein Speicher ==> "return 0" 0-Pointer dereferenzierung ==> security bug copy_to_user(), copy_from_user()
Siehe auch /usr/src/linux/Documentation www.kernel.org/doc/ kernelnewbies.org www.lwn.net/free www.linuxsymposium.org www.linux.org.au/lca