Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Course Outline
Introduction
- Overview of the history and development of GNU/Linux for government use.
- Licensing models and their implications for government.
- Kernel versioning practices and their significance for system stability and security.
- Release cycles and their impact on deployment and maintenance in government environments.
- Different kernel trees and their roles in supporting various government applications.
- The mainline kernel and its importance for ensuring compatibility and support.
- Distinction between the kernel space and user space, emphasizing security and performance considerations for government systems.
- Differentiating between mechanism and policy in kernel design to meet specific government needs.
- Alternatives for kernel drivers to enhance flexibility and adaptability in government applications.
- Comparing Real-Time Operating Systems (RTOS) with Linux, highlighting the advantages and disadvantages for government operations.
Memory Management
- Differentiating between virtual memory and physical memory and their roles in efficient resource management for government systems.
- Memory allocation processes within the kernel to ensure optimal performance and security.
- Understanding pages and zones in memory management for effective data handling.
- Utilizing the Application Programming Interface (API) for memory operations in government applications.
- The slab allocator's role in managing small, frequently used objects in government systems.
Kernel Patch
- Lifecycle of a kernel patch from creation to deployment in government environments.
- Using Git for version control and collaboration in the development of patches for government use.
- Accessing and working with the kernel source code to develop and test patches.
- Creating a patch to address specific issues or requirements in government systems.
- Checking and validating the integrity and functionality of patches before deployment.
- Fixing any issues identified during testing to ensure reliability.
- Shipping the final patch for integration into government systems.
- Ensuring that all code is audited and meets security standards for government use.
Kernel Modules
- Obtaining kernel sources to develop custom modules for government applications.
- Configuring, building, and installing modules to meet specific government needs.
- Device drivers: options for static linking or dynamic loading at runtime in government systems.
- Initialization and exit procedures for kernel modules to ensure proper operation and cleanup.
- Licensing considerations for kernel modules to comply with government regulations.
- Utilizing the EXPORT_SYMBOL_GPL directive for sharing symbols in a secure manner.
- Creating out-of-tree Makefiles for custom module development.
- Using module-init-tools for managing and loading modules in government systems.
- Incorporating modules into the kernel tree for integrated support.
- Configuring Kconfig options to tailor module behavior for specific government applications.
- Passing parameters to modules at load time for flexible configuration.
- Using sparse for static analysis and ensuring code quality in government modules.
Char Drivers
- Architecture of character drivers and their role in government systems.
- Interface between user space and kernel space for efficient data handling.
- I/O subsystem components and their interactions in government applications.
- Virtual File System (VFS) and its importance in managing file operations.
- sysfs: managing devices, buses, drivers, and classes in government systems.
- kobject, ktype, and kset concepts for structured device management.
- Linux kernel driver model and its application in government environments.
- Device files and their role in accessing hardware resources.
- Char drivers:
- Initialization procedures to set up char drivers for use.
- Registration processes to integrate char drivers into the system.
- Open and release operations for managing device access.
- cdev, cdev_add, cdev_del, and other functions for device management.
- Major and minor numbers for unique device identification.
- udev, udevmonitor, and udevadm tools for dynamic device management in government systems.
Advanced Character Driver Operations
- ioctl system calls for extended device control in government applications.
- Unlocked ioctl for non-blocking operations.
- compat ioctl for backward compatibility with older systems.
- User space API for interacting with char drivers.
- Kernel space API for implementing driver functionalities.
- Process lifecycle management in the context of device operations.
- Sleeping and blocking states to manage resource utilization efficiently.
- Mechanisms for waking up processes after waiting periods.
- Wait queues for managing multiple processes waiting on a single event.
- Thundering herd problem and strategies for mitigation in government systems.
- poll and select system calls for monitoring multiple file descriptors efficiently.
Kernel Debugging
- General debugging techniques applicable to kernel development for government use.
- Specific methods for debugging the Linux kernel:
- Binary search with Git to identify problematic changes.
- Built-in debug support from the kernel to aid in troubleshooting.
- Using printk, syslogd, klogd, log levels, rate limits, and selective debugging for detailed insights.
- Querying debugfs for real-time system information and diagnostics.
- Ooops debugging techniques, including asserting oops conditions.
- Utilizing the Magic SysRq Key for emergency operations.
- kgdb and kdb for advanced kernel debugging in government environments.
- JTAG for hardware-assisted debugging of embedded systems.
Tracing
- gcov for code coverage analysis in government applications.
- lcov for generating detailed coverage reports.
- oprofile for profiling system performance and identifying bottlenecks.
- ftrace:
- nop tracer for minimal overhead tracing.
- function tracer for tracking function calls.
- sched switch tracer for monitoring scheduling activities.
- function graph tracer for visualizing call graphs.
- dynamic tracer for custom event tracing.
- trace-cmd and kernelshark for advanced tracing and analysis in government systems.
- perf tool for performance monitoring and profiling.
- LTTng (Linux Trace Toolkit Next Generation) for comprehensive tracing solutions.
Interrupts
- Comparison of interrupts and polling methods for efficient resource management in government systems.
- Overview of interrupt handling mechanisms in the Linux kernel.
- Program sections and their impact on interrupt processing.
- Ensuring reentrancy in interrupt handlers to prevent conflicts.
- Managing events and their interactions with interrupts.
- Structure of an interrupt handler for reliable operation.
- Shared interrupt handling for multiple devices on a single IRQ line.
- Interrupt flow from hardware to kernel processing.
- Techniques for controlling and managing interrupts in government systems.
Deferring Work
- Top and bottom halves for dividing interrupt handling tasks in government applications.
- Softirqs for processing deferred work with low latency.
- Tasklets for lightweight, deferred execution of tasks.
- Work queues for managing complex and time-consuming tasks.
- Threaded interrupts for handling long-running operations in a separate thread.
Concurrency
- Critical regions or sections to ensure data integrity during concurrent access.
- Atomic operations for performing indivisible actions in government systems.
- Race conditions and their impact on system reliability and security.
- Synchronization techniques to manage concurrent processes effectively.
- Locking mechanisms to prevent conflicts in shared resources.
- Various locking solutions for different concurrency scenarios.
- Deadlock conditions and strategies for prevention and resolution.
- Contention management to optimize resource utilization.
- Identifying what needs to be locked in government applications.
- Tools and techniques available for locking:
- Atomic operations for simple, fast synchronization.
- Spin locks for short critical sections with low latency requirements.
- Reader-writer spin locks for read-heavy scenarios.
- Semaphores for managing access to shared resources.
- Binary semaphores for mutual exclusion in government systems.
- Mutexes for ensuring exclusive access to data structures.
- Reader-writer semaphores for balancing read and write operations.
- Completion variables for coordinating asynchronous tasks.
- Sequential locks for ordered operations in government applications.
- Disabling preemption to prevent context switching during critical sections.
- Ordering and barriers for ensuring correct execution order in concurrent code.
Time
- HZ constant and its significance in kernel timing for government systems.
- Jiffies as the basic unit of time measurement in the Linux kernel.
- Handling both small and large delays effectively in government applications.
- Kernel timers for scheduling deferred work and managing timeouts.
Hardware I/O
- I/O ports and their role in communicating with hardware devices.
- I/O memory and its management in government systems.
- Strategies for dealing with side effects when accessing hardware registers.
User-Kernel Communication
- put_user() and get_user() functions for safe data transfer between user space and kernel space in government applications.
- copy_to_user() and copy_from_user() for bulk data transfers.
- Kernel I/O operations for managing device interactions.
- Memory mapping techniques for efficient data sharing between user and kernel spaces.
- procfs for providing system information and configuration options in government systems.
- sysfs for exposing device and driver information to user space.
- debugfs for debugging and diagnostics in government applications.
- relayfs for efficient logging and tracing.
- Netlink sockets for communication between the kernel and user space processes.
- ioctl system calls for extended device control from user space.
Portability
- Considerations for word size in portable code development for government systems.
- Use of opaque types to abstract data structures and enhance portability.
- Handling signed and unsigned char types to ensure consistent behavior across platforms.
- Data alignment requirements for optimal performance and compatibility.
- Understanding integral promotion in C and its implications for portable code.
- Strategies for reusing code across different government projects.
- Endianness considerations for cross-platform development.
- System tick management for consistent timing across different hardware.
- Page size variations and their impact on memory management in government systems.
- Instruction ordering and barriers to ensure correct execution order in multi-processor environments.
- Managing SMP, preemption, and high-memory issues for robust system performance.
Except where otherwise noted content and this course outline are licensed under Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Requirements
- Basic experience using a GNU/Linux system as an end user for government applications.
- Familiarity with command line shell operations.
- Elementary knowledge of user space and application development.
- Intermediate proficiency in C programming.
- It is strongly recommended that participants have attended the Embedded GNU/Linux Systems Architecture course, or possess a solid understanding of its content.
35 Hours
Testimonials (3)
Everything is ok.
Adrian Rybka - SEOyon
Course - Flutter Development Bootcamp with Dart
Very usefull additional informations
Grzegorz - Comp S.A.
Course - BLoC Pattern
His knowledge and patience.