Added functions to move memory to and from user space.
[cascardo/kernel/old_slides/.git] / plano
1 DAY ONE:
2 intro
3         linux
4                 version history/evolution/compatibility
5                 constant change, book is already outdated
6                 current versioning/development model
7                 modules
8                 build dependencies
9                 running new/bleeding-edge kernels
10
11 concepts
12         kernel/user space
13                 rings/levels/modes
14                 memory protection/segmentation/pagination
15                 library calls
16                 allowed uses (floating point forbidden)
17                 concurrency
18                 small stack
19         libc/system calls
20         operating system functions
21                 process management
22                         concurrency
23                         communication/IPC, scheduling
24                 memory management
25                         address space
26                         virtual memory
27                 filesystems
28                 networking
29                 device, I/O
30         robustness/security
31                 error checking
32                 kernel space code
33                 programming errors and bugs
34                 restrict some operations to privileged users
35                 do not send unzeored data (information leak)
36                 do not trust received data (malformed data) (exploit)
37                 risks for the machine/system/data
38
39 basics
40         Makefile
41         Kconfig
42         building linux
43         build
44         init/exit
45         module macros
46         module parameters
47         config/build time options/parameters
48         sysfs interface for modules
49         printk
50         module loading/unloading/handling
51
52 VFS
53         center/hub/interface
54         char/block/procfs/sysfs: all go through VFS to device
55         fops is the main structure in linux
56         FS on top of block devices
57                 block layer
58                 exception: some on top of MTD devices
59
60 device driver subsystem
61         buses
62         device classes
63         interfaces
64                 dev file
65                 sysfs
66                 procfs
67                 sysctl
68                 netlink
69
70 C basics
71         container_of (struct embedding)
72         fops/*ops (function pointers)
73         IS_ERR (pointers and error values)
74
75 char device
76         MAJOR/MINOR/MKDEV
77
78
79 DAY TWO:
80 procfs
81
82 debugging techniques
83         printk/procfs
84         debugfs
85         kgdb
86         trace
87         kprobe
88
89 data structures
90         list_head
91         bitmap
92         trees rbtree
93         idr
94         any hash implementation
95
96 portability
97         be16_to_cpu/etc
98
99
100
101 DAY THREE:
102 contexts
103         user context (current, copy_from_user, schedule) schedule
104         interrupt context
105         workqueue is user context
106         sleep == schedule
107
108 concurrency
109         SMP systems
110         locking
111         spinlock: disable scheduler
112         semaphore/mutex sleeps
113         per-cpu variables
114         atomic
115         RCU
116
117 memory allocation
118         kobject refcount MENTION
119         slab
120                 multiple implementations
121                 space efficient (tables for different object sizes)
122                 concurrency efficient (per-cpu tables)
123         kmalloc
124                 uses slab
125         vmalloc
126                 linux memory layout
127
128 scheduling/timing
129         schedule{,_timeout}
130         timer
131         workqueue
132         completion/wait_head
133         tasklets
134
135 DAY FOUR:
136 I/O
137         readl/writel/etc (portability)
138 Interrupts
139         {request,free}_irq
140         interrupt context
141         tasklet/workqueue/postpone
142 Device Model
143         classes: cdrom, backlight, input, misc
144         terminal/serial device
145         sysfs
146         kobject (advanced)
147                 refcounting
148
149 Buses
150         PCI
151         USB
152         other buses: SPI, I2C, parport, etc
153
154 DAY FIVE:
155 DMA/Memory Mapping
156 Block Devices
157         scather/gather
158 Network Devices
159         skb
160 board/machine/architecture files