|
Preview
• What is a kernel
• Kernel Control Path
• What is a device driver
• The Rings architecture
• Introduction: Hello world kernel module
• Character Device Driver, block device driver and network device driver
Memory
• Virtual memory
• Memory management
1. Pages, zones and nodes
2. kmalloc, vmalloc and slabs
3. memory mapping, low and high, temporary and permanent
4. process address space
What is a context
Interrupts
Softirqs
Tasklets
Kernel threads
workqueues.
How to build and boot a Linux kernel
System calls
1. From user space
2. from kernel space (optional)
Synchronization
1. Atomic operations, bitwise and integer
2. Spin locks and interrupts disabling
3. Reader writer, semaphores, mutexes
4. Completion variables
5. RCU
6. Preemption
7. Memory barriers
Time
1. the tick
2. jiffies
3. hardware timers
4. delay methods
The Linux device model - udev and sysfs
Kernel Debugging
Kernel debugger - KDB
Analyzing an oops
Hanging machine
System Tap
Procfs
Kernel Profiler - perf
qemu
Optional
Eagers students can experiment with:
1. user mode helper
2. debugfs
3. mmap
4. network device driver
5. Preempt RT
6. kbuild
7. network filter driver
8. the socket buffer
9. climbing up the TCP/IP stack
10. git
Time Table
Day 1
9:00 - 10:00 : Introduction
10:00 - 11:00 : Exercise 1. Hello world driver
11:00 - 11:15 : Break
11:15 - 13:15 : Exercise 2. Writing a character device
13:15 - 14:00 : Break
14:15 - 14:45 : Memory
14:45 – 16:00: Exercise 3. Writing a pipe device
16:00 - 17:00 : How to build a kernel
Day 2
9:00 - 9:30 : Linux slabs and link lists
9:30 - 11:00 : Exercise 4: using slabs
11:00 - 11:15 : Break
11:15 – 12:00 : Memory & Process Address space.
12:00 - 13:15 : Exercise 5: getting to know get_user_pages
13:15 - 14:00 : Break
14:00 - 14:45 : The different kernel contexts
14:45 - 16:30 : Exercise 6: work queues
16:30 - 17:00 : Exercise 7: Implement your own system call
Day 3
9:00 - 9:30 : Kernel concurrency
9:30 - 11:00 : Exercise 8: Concurrency: preemption counter
Exercise 9: Concurrency : timer
Exercise 10: Concurrency : semaphores
11:00 – 11:15 : Break
11:15 – 12:45 : Exercise 11: Concurrency : tasklet
12:45 - 13:00 : Kernel concurrency continued ( memory barriers, rcu )
Exercise 12: memory barriers.
Exercise 13: Optional. Hrtimers.
13:00 – 14:00: Break
14:00 - 14:30 : Kernel Debugging - Don't panic
14:30 - 15:00 : Kernel Profiling and tracing – getting to know ftrace, perf , systemtap and others
15:00 - 15:15 : Break
15:15 - 15:30 : The Linux device model
15:30 - 16:15 : Network card driver,
16:15 - 17:00 : Time and high resolution timers
Prerequisite of the Linux kernel course
At least a year in operating UNIX systems and two years in C programming.
1. Have deep knowledge in C programming language.
Know how to compile executables and libraries in Linux
C programming language
1 static function variables
2 extern variables functions
3 function pointers
4 static inline functions
5 Macros
6 Polymorphism
Able to analyze bugs, compiler errors and warnings.
2. Have a fair experience in developing in Linux environments.
1 basic commands: ls,file, cat, ps,
2 Advanced: ifconfig,ip,vmstas,iostas,top...
3 knows how to untar and unzip balls.
4 knows how to transfer files (scp) and remote connect (ssh)
5 know how to mount
6 knows what is a boot loader
7 know what is a run level
8 basic shell commands:
ls,chmod,chown,mkdir,
file,
echo,cp,mv,wc,ps,kill,ps,grep,find,tail,sort,date,clear,cat,less,more,
output and input redirection >> ,<,>,|,&& ,-
3. Environment Requirement
1 . A full development Linux OS, ubunto or Fedora, with : make gcc,,tcl, ncurses
2. Kernel headers installed.
3. vim/gedit/gvim editor
4. root access
5. Virtual box is possible
|