DAY ONE: intro linux version history/evolution/compatibility constant change, book is already outdated current versioning/development model modules build dependencies running new/bleeding-edge kernels concepts kernel/user space rings/levels/modes memory protection/segmentation/pagination library calls allowed uses (floating point forbidden) concurrency small stack libc/system calls operating system functions process management concurrency communication/IPC, scheduling memory management address space virtual memory filesystems networking device, I/O robustness/security error checking kernel space code programming errors and bugs restrict some operations to privileged users do not send unzeored data (information leak) do not trust received data (malformed data) (exploit) risks for the machine/system/data basics Makefile Kconfig building linux build init/exit module macros module parameters config/build time options/parameters sysfs interface for modules printk module loading/unloading/handling VFS center/hub/interface char/block/procfs/sysfs: all go through VFS to device fops is the main structure in linux FS on top of block devices block layer exception: some on top of MTD devices device driver subsystem buses device classes interfaces dev file sysfs procfs sysctl netlink C basics container_of (struct embedding) fops/*ops (function pointers) IS_ERR (pointers and error values) char device MAJOR/MINOR/MKDEV DAY TWO: procfs debugging techniques printk/procfs debugfs kgdb trace kprobe data structures list_head bitmap trees rbtree idr any hash implementation portability be16_to_cpu/etc DAY THREE: contexts user context (current, copy_from_user, schedule) schedule interrupt context workqueue is user context sleep == schedule concurrency SMP systems locking spinlock: disable scheduler semaphore/mutex sleeps per-cpu variables atomic RCU memory allocation kobject refcount MENTION slab multiple implementations space efficient (tables for different object sizes) concurrency efficient (per-cpu tables) kmalloc uses slab vmalloc linux memory layout scheduling/timing schedule{,_timeout} timer workqueue completion/wait_head tasklets DAY FOUR: I/O readl/writel/etc (portability) Interrupts {request,free}_irq interrupt context tasklet/workqueue/postpone Device Model classes: cdrom, backlight, input, misc terminal/serial device sysfs kobject (advanced) refcounting Buses PCI USB other buses: SPI, I2C, parport, etc DAY FIVE: DMA/Memory Mapping Block Devices scather/gather Network Devices skb board/machine/architecture files