Course Summary
This course focuses on the elements of the Linux kernel that allow programmers to build software components that are linked to the hardware level. Students gain a general understanding of basic tools and interfaces in order to successfully modify features and develop new aspects of the kernel.Duration
5 days.
Audience
Programmers, software designers, and technical managers who plan to use Linux below the application level.
Advanced UNIX Programming is recommended. Strong C programming skills and intermediate knowledge of UNIX/Linux shell commands are required. UNIX/Linux application development experience is recommended.
Outline
Introduction to Linux Internals
- Introduction and environmental setup
- Main characteristics of the Linux operating system
- Linux distributions
- Kernel configuration facilities
- Building the kernel
- Location of components
- Compiling
Kernel Overview
- Important data structures
- Processes and tasks
- Files and inodes
- Dynamic memory management
- Queues and semaphores
- System time and timers
- Primary algorithms
- Signals
- Interrupts
- System booting
- Timer interrupt
- Scheduler
- System call implementation
- Description of system calls
- Practical examples
- Adding new system calls
Memory Management
- Architecture-dependent memory model Pages
- Virtual address space
- Linear address conversion
- Page table and page directory
- Middle page directory
- Virtual address space model
- User segment
- Virtual memory
- The brk system call
- Mapping functions
- Kernel segment
- Static and dynamic memory allocation in the kernel
- Block device caching
- Block buffering
- Update and bdflush
- List structures for the buffer cache
- How to use the buffer cache
- Paging in Linux
- Page cache management
- Finding free pages
- Page exceptions
Inter-Process Communication
- Synchronization
- Communication via files
- Pipes
- Debugging using ptrace
- System V IPC
- Socket-based communications
File System
- Basic aspects
- VFS
- Mouting a file system
- Superblock
- The Inode concept and operations
- File operations
- Directory cache
- Proc filesystem
- Ext2 filesystem
- Structure
- Directories
- Block allocation
- Extensions
System Calls
- Initialization
- Process management
- Memory management
- Communication
- Filesystem
Kernel-Related Commands
- ps
- top
- free
- init
- shutdown
- strace
- traceroute
- mount
Device Drivers
- Character vs block devices
- Polling and interrupts
- Polling and interrupt mode
- Interrupt sharing
- Bottom halves
- Task queues
- Implementation
- Setup
- Init
- Open and release
- Read and write
- Ioctl
- Select
- Lseek
- Mmap
- Readdir
- Fsync and fasync
Module Management
- Interfaces to modules
- Adding/removing modules to the Kernel
- Insmod
- Modprobe
- Rmmod
- Implementation details
Network
- Layer model
- Network communications
- Data structures
- Socket
- sk_buff
- Inet socket
- proto
- Devices
- Ethernet
- SLIP and PPP
- Loopback
- Dummy device
- Protocols
- Arp
- IP
- Functions
- Routing
- Multicasting
- Packet filters
- Accounting
- Firewalls
- UDP
- Standard and extra functions
- TCP
- Standard functions
- Communication details
SCSI Subsystem
- Architecture overview
- Names and conventions
- Upper level
- Block devices (hard disks, CD-ROM)
- Character devices (tape)
- Generic drivers
- Mid level (boot parameters, proc interface)
- Lower (hardware) level and pseudo drivers
Boot Process
- Booting details
- LILO
- Started by MBR
- Started by a boot manager
- Structure in the MBR
- Files
- Parameters
- Start-up messages
- Error messages
Debugging Tools
- ptrace
- SysRq
- KDB
- User Mode Linux
- kgdb