+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
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
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
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
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