X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fkernel%2Fold_slides%2F.git;a=blobdiff_plain;f=plano;h=f1b0eb31bdebc1f724475694b169e50be940fe1e;hp=140c9f2d19dca8cafa70d5d4ac271fb57f8971b0;hb=HEAD;hpb=7a9e10d90a33c31ca9095cab597c7ce28b3b3dca diff --git a/plano b/plano index 140c9f2..f1b0eb3 100644 --- a/plano +++ b/plano @@ -1,15 +1,22 @@ +DAY ONE: intro linux - version history/evolution DO? - modules + version history/evolution/compatibility constant change, book is already outdated current versioning/development model + modules build dependencies running new/bleeding-edge kernels - kernel/user space - libc/system calls 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 @@ -27,21 +34,25 @@ concepts 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 DO? + Kconfig + building linux build init/exit module macros module parameters config/build time options/parameters - sysfs interface for modules DO? + 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 @@ -53,37 +64,43 @@ device driver subsystem dev file sysfs procfs - sysctl DO? - netlink DO? + 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 -sysfs -block device DO? STUDY -network device DO? STUDY -terminal/serial device DO? STUDY debugging techniques printk/procfs - debugfs DO? STUDY - kgdb DO? - trace DO? - kprobe DO? - -C basics - container_of (struct embedding) - fops/*ops (function pointers) - IS_ERR (pointers and error values) + debugfs + kgdb + trace + kprobe data structures list_head bitmap - trees DO? STUDY rbtree - idr DO? - any hash implementation DO? STUDY + trees rbtree + idr + any hash implementation + +portability + be16_to_cpu/etc + + +DAY THREE: contexts - user context (current, copy_from_user, schedule) STUDY schedule + user context (current, copy_from_user, schedule) schedule interrupt context workqueue is user context sleep == schedule @@ -93,18 +110,18 @@ concurrency locking spinlock: disable scheduler semaphore/mutex sleeps - per-cpu variables STUDY + per-cpu variables atomic - RCU DO? + RCU memory allocation kobject refcount MENTION - slab STUDY + slab multiple implementations space efficient (tables for different object sizes) concurrency efficient (per-cpu tables) kmalloc - uses slab STUDY + uses slab vmalloc linux memory layout @@ -113,27 +130,31 @@ scheduling/timing timer workqueue completion/wait_head - tasklets DO? STUDY + tasklets -portability - readl/writel/etc - be16_to_cpu/etc - -interrupt +DAY FOUR: +I/O + readl/writel/etc (portability) +Interrupts {request,free}_irq interrupt context tasklet/workqueue/postpone - -buses - PCI bus DO? - USB bus DO? - some bus: SPI, I2C, parport DO? - -device classes - some class: cdrom, backlight, input, misc DO? - -kobject DO? advanced - refcounting - -STUDY: - module owner, concurrency, reference counting +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