Some module basics.
[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         module macros
22         module parameters
23         config/build time options/parameters
24         sysfs interface for modules DO?
25         printk
26
27 VFS
28         center/hub/interface
29         char/block/procfs/sysfs: all go through VFS to device
30         FS on top of block devices
31                 block layer
32                 exception: some on top of MTD devices
33
34 device driver subsystem
35         buses
36         device classes
37         interfaces
38                 dev file
39                 sysfs
40                 procfs
41                 sysctl DO?
42                 netlink DO?
43
44 char device
45 procfs
46 sysfs
47 block device DO? STUDY
48 network device DO? STUDY
49 terminal/serial device DO? STUDY
50
51 debugging techniques
52         printk/procfs
53         debugfs DO? STUDY
54         kgdb DO?
55         trace DO?
56         kprobe DO?
57
58 C basics
59         container_of (struct embedding)
60         fops/*ops (function pointers)
61         IS_ERR (pointers and error values)
62
63 data structures
64         list_head
65         bitmap
66         trees DO? STUDY rbtree
67         idr DO?
68         any hash implementation DO? STUDY
69
70 contexts
71         user context (current, copy_from_user, schedule) STUDY schedule
72         interrupt context
73         workqueue is user context
74         sleep == schedule
75
76 concurrency
77         SMP systems
78         locking
79         spinlock: disable scheduler
80         semaphore/mutex sleeps
81         per-cpu variables STUDY
82         atomic
83         RCU DO?
84
85 memory allocation
86         kobject refcount MENTION
87         slab STUDY
88                 multiple implementations
89                 space efficient (tables for different object sizes)
90                 concurrency efficient (per-cpu tables)
91         kmalloc
92                 uses slab STUDY
93         vmalloc
94                 linux memory layout
95
96 scheduling/timing
97         schedule{,_timeout}
98         timer
99         workqueue
100         completion/wait_head
101         tasklets DO? STUDY
102
103 portability
104         readl/writel/etc
105         be16_to_cpu/etc
106
107 interrupt
108         {request,free}_irq
109         interrupt context
110         tasklet/workqueue/postpone
111
112 buses
113         PCI bus DO?
114         USB bus DO?
115         some bus: SPI, I2C, parport DO?
116
117 device classes
118         some class: cdrom, backlight, input, misc DO?
119
120 kobject DO? advanced
121         refcounting
122
123 STUDY:
124         module owner, concurrency, reference counting