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