Get in Touch

Course Outline

Introduction

  • GNU/Linux historical overview
  • Licensing models
  • Kernel versioning schemes
  • Release cycles
  • Kernel trees
  • Mainline development
  • Kernel vs. user space interactions
  • Mechanism vs. policy separation
  • Alternatives to kernel drivers
  • RTOS versus Linux

Memory Management

  • Virtual versus physical memory
  • Kernel memory allocation
  • Memory pages
  • Memory zones
  • Allocation APIs
  • Slab allocators

Kernel Patching

  • Patch lifecycle
  • Git workflow
  • Kernel source management
  • Creating patches
  • Reviewing patches
  • Refining patches
  • Distributing patches
  • Audited code standards

Kernel Modules

  • Acquiring kernel sources
  • Configuration, build, and installation
  • Device drivers (static linking and runtime loading)
  • Initialization and exit routines
  • Licensing requirements
  • EXPORT_SYMBOL_GPL usage
  • Out-of-tree Makefiles
  • Module initialization tools
  • In-tree module integration
  • Kconfig configuration
  • Parameter passing mechanisms
  • Sparse static analysis

Character Drivers

  • Architectural design
  • User/kernel interface standards
  • I/O subsystem overview
  • Virtual File System (VFS)
  • sysfs (devices, buses, drivers, classes)
  • kobject, ktype, and kset structures
  • Linux kernel driver model
  • Device file management
  • Character driver structure

    • Initialization procedures
    • Registration processes
    • Open and release handlers
    • cdev, cdev_add, cdev_del operations
    • Major and minor numbers
    • udev, udevmonitor, and udevadm utilities

Advanced Character Driver Operations

  • ioctl commands
  • Unlocked ioctl
  • Compat ioctl
  • User space APIs
  • Kernel space APIs
  • Process lifecycle management
  • Sleeping and blocking mechanisms
  • Wakeup and sleep transitions
  • Wait queues
  • Thundering herd problem
  • Poll and select operations

Kernel Debugging

  • General debugging techniques
  • Debugging the kernel

    • Binary search using git
    • Built-in kernel debug support
    • printk, syslogd, klogd, log levels, rate limiting, debug levels, and selective subsystem debugging
    • Debugging via debugfs
    • Oops debugging and triggering oopses
    • Magic SysRq Key functionality
    • kgdb/kdb usage
    • JTAG debugging

Tracing

  • gcov coverage
  • lcov report generation
  • oprofile analysis
  • ftrace

    • nop tracer
    • Function tracer
    • Scheduler switch tracer
    • Function graph tracer
    • Dynamic tracer
  • trace-cmd and kernelshark
  • perf tools
  • LTTng

Interrupts

  • Interrupts versus polling
  • Interrupt handling concepts
  • Program execution sections
  • Reentrancy issues
  • Event handling
  • Interrupt handlers
  • Shared interrupt handlers
  • Interrupt flow control
  • Interrupt management

Deferring Work

  • Top halves and bottom halves
  • Soft interrupts (softirqs)
  • Tasklets
  • Work queues
  • Threaded interrupts

Concurrency

  • Critical regions and sections
  • Atomic operations
  • Race conditions
  • Synchronization strategies
  • Locking mechanisms
  • Locking solutions
  • Deadlock prevention
  • Contention management
  • Determining what to lock
  • Available synchronization primitives

    • Atomic operations
    • Spinlocks
    • Reader-writer spinlocks
    • Semaphores
    • Binary semaphores
    • Mutexes
    • Reader-writer semaphores
    • Completion variables
    • Seqlocks
    • Disabling preemption
    • Ordering and memory barriers

Time Handling

  • HZ configuration
  • Jiffies counter
  • Large and small delays
  • Kernel timers

Hardware I/O

  • I/O Ports
  • I/O Memory
  • Managing side effects when accessing registers

User-Kernel Communication

  • put_user()/get_user()
  • copy_to_user()/copy_from_user()
  • Kernel I/O operations
  • Memory mapping
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • Netlink sockets
  • ioctl

Portability

  • Word size considerations
  • Opaque types
  • Signed versus unsigned characters
  • Data alignment issues
  • Integral promotion rules
  • Code reuse strategies
  • Endianness
  • System tick handling
  • Page size variations
  • Instruction ordering
  • SMP, preemption, and high memory

Unless otherwise stated, the content and this course outline are licensed under Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Requirements

  • Familiarity with using a GNU/Linux system as an end user
  • Comfort with command line shells
  • Foundational knowledge of user space and application development
  • Intermediate proficiency in C programming
  • Completion of Embedded GNU/Linux Systems Architecture is strongly recommended, or a solid grasp of the topics covered therein.
 35 Hours

Custom Corporate Training

Training solutions designed exclusively for businesses.

  • Customized Content: We adapt the syllabus and practical exercises to the real goals and needs of your project.
  • Flexible Schedule: Dates and times adapted to your team's agenda.
  • Format: Online (live), In-company (at your offices), or Hybrid.
Investment

Price per private group, online live training, starting from 6500 € + VAT*

Contact us for an exact quote and to hear our latest promotions

Testimonials (3)

Provisional Upcoming Courses (Contact Us For More Information)

Related Categories