Consider debugfs as an option for debugging.
[cascardo/kernel/old_slides/.git] / plano
1 intro
2         linux
3                 version history/evolution DO?
4                 modules
5                 constant change, book is already outdated
6                 current versioning/development model
7                 build dependencies
8                 running new/bleeding-edge kernels
9         kernel/user space
10         libc/system calls
11
12 concepts
13         robustness
14                 error checking
15
16 basics
17         Makefile
18         Kconfig DO?
19         build
20         init/exit
21         printk
22
23 VFS
24         center/hub/interface
25         char/block/procfs/sysfs: all go through VFS to device
26         FS on top of block devices
27                 block layer
28                 exception: some on top of MTD devices
29
30 device driver subsystem
31         buses
32         device classes
33         interfaces
34                 dev file
35                 sysfs
36                 procfs
37                 sysctl DO?
38                 netlink DO?
39
40 char device
41 procfs
42 sysfs
43 block device DO? STUDY
44 network device DO? STUDY
45 terminal/serial device DO? STUDY
46
47 debugging techniques
48         printk/procfs
49         debugfs DO? STUDY
50         kgdb DO?
51         trace DO?
52         kprobe DO?
53
54 C basics
55         container_of (struct embedding)
56         fops/*ops (function pointers)
57         IS_ERR (pointers and error values)
58
59 data structures
60         list_head
61         bitmap
62         trees DO? STUDY rbtree
63         idr DO?
64         any hash implementation DO? STUDY
65
66 contexts
67         user context (current, copy_from_user, schedule) STUDY schedule
68         interrupt context
69         workqueue is user context
70         sleep == schedule
71
72 concurrency
73         SMP systems
74         locking
75         spinlock: disable scheduler
76         semaphore/mutex sleeps
77         per-cpu variables STUDY
78         atomic
79         RCU DO?
80
81 memory allocation
82         kobject refcount MENTION
83         slab STUDY
84                 multiple implementations
85                 space efficient (tables for different object sizes)
86                 concurrency efficient (per-cpu tables)
87         kmalloc
88                 uses slab STUDY
89         vmalloc
90                 linux memory layout
91
92 scheduling/timing
93         schedule{,_timeout}
94         timer
95         workqueue
96         completion/wait_head
97         tasklets DO? STUDY
98
99 portability
100         readl/writel/etc
101         be16_to_cpu/etc
102
103 interrupt
104         {request,free}_irq
105         interrupt context
106         tasklet/workqueue/postpone
107
108 buses
109         PCI bus DO?
110         USB bus DO?
111         some bus: SPI, I2C, parport DO?
112
113 device classes
114         some class: cdrom, backlight, input, misc DO?
115
116 kobject DO? advanced
117         refcounting
118
119 STUDY:
120         module owner, concurrency, reference counting