Linux kernel development for embedded, server and desktop

Duration: 5 days
  • Introduction to operating systems
    • Hardware abstraction
    • Multitasking
    • Process management
  • Hardware architecture features
    • Kernel and user space distinction
    • CPU and virtual memory
    • Symmetric multi-processing
  • Hardware device driver code
    • Hardware interrupt handling
    • Deferred handler operations
    • Atomic context and process context
  • Concurrency issues
    • Asynchronous interrupt synchronization
    • SMP synchronization using spinlocks
    • Process locking
  • Memory management
    • User space, kernel space and interrupt handler stacks
    • Paged memory allocations
    • SLAB based memory allocation
    • Circular buffers
    • Linked lists
    • Pre-allocated buffers
  • Process management
    • Processes, threads and namespaces
    • Tasks and the schedulre
  • Operating system API development
    • System calls
    • Virtual file system APIs
  • Tracing and debugging
    • Logging and debug messages
    • Kernel debugging possibilities
    • Debugging features for user space applications
    • Tracing the system calls
  • Loadable kernel modules
    • Build system
    • In-tree and out-of-tree builds
    • Module dependencies and automation
    • Automatic device driver loading
  • Device driver object model
    • Kernel object model
    • Objects accessible via sysfs
    • Automated devtmpfs node creation and udev
  • Plug and play driver subsystems
    • Automatic driver discovery
    • USB/PCI device ID tables
    • Device registration
  • Kernel code organization
    • Kernel source tree
  • Legal and community considerations
    • GPLv2
    • Mailing lists
    • Subsystem maintainers
    • Branch maintainers