Linux Kernel Programming – System calls
What will you learn from this course?
What you’ll learn
- Basics of Inline Assembly.
- Writing examples for Inline Assembly.
- Various places where inline assembly is used.
- Adding a new system call to kernel.
- Updating system call table.
- VDSO and Virtual System Calls.
Course Content
- Inline Assembly –> 24 lectures • 1hr 10min.
- Linux Kernel Inline Assembly Examples –> 22 lectures • 1hr.
- Introduction to System Calls –> 23 lectures • 1hr.
- VDSO –> 5 lectures • 9min.
- Adding a new system call –> 13 lectures • 54min.
- Kernel Symbols –> 12 lectures • 43min.
Requirements
- Should have a basic understanding of Linux Kernel modules.
- C language.
What will you learn from this course?
- Basics of Inline Assembly
- Types of Inline Assembly: Basic and Extended
- GCC Assembly Syntax: AT&T
- Constraint strings
- Input and output operands
- Clobbering
- Various use cases of Inline assembly in Linux kernel: Interrupts, I/O Ports, Atomic operations, CPUID, Control Registers, Timestamp counters etc
- Deep understanding of system calls: Various ways of switching from user space to kernel space (int $0x80, sysenter/sysexit, syscall/sysret)
- VDSO
- Adding a new system call which doesn’t accept any arguments
- Adding a system call which accept argument
- Kernel Symbols and Kernel Symbol table
- Writing a kernel module which overwrite the kernel symbol table
- Writing a kernel module which sniffs the parameters passed to a system call
Examples covered in this course:
- Add two numbers in inline assembly
- Add three numbers in inline assembly
- Subtract, divide, multiply in inline assembly
- Can we disable/enable interrupts in user space
- Checking whether interrupts are enabled and disabled in user space
- Enabling/Disabling interrupts in user space
- Implementing simple locking to avoid race conditions: Lock prefix, compare and exchange instructions
- And many