- 9 (Registered)
This training is targeted primarily at software professionals – tech leads, system programmers / developers, maintainers and testers – who would like to delve much deeper into the internal functioning of the Linux operating system. This may be in order to work on a project involving this directly or indirectly (for example, for those on an application development project on the Linux platform, this training would give them tremendous insight into optimization and code tweaking based on internal factors). Opensource (and closed-source commercial) contributors / developers (or to-be contributors) would find this training very useful as well.
This training is based on the latest 2.6.x / 3.x / 4.x Linux kernel. It starts with a quick and comprehensive look at the overall Linux OS architecture, monolithic kernel approach. It then moves into deep technical discussion of various kernel internal topics: kernel architecture, process descriptor, task list, task creation (with code walkthrough), CPU scheduler design and implementation, virtual memory and memory management.
In-depth coverage continues on: kernel space debugging.
Throughout, professional / industry best practices are taught and encouraged.
1 Day or 8 hours
It is very important that the prerequisite(s) marked as Mandatory below be met by all participants intending to attend this training, either by having successfully attended a training program (mentioned below), or having the equivalent knowledge / skill sets.
- Good working knowledge of and experience programming using the ‘C’
- Successfully attended the “LINUX Fundamentals for Software Developers” training program -or-have the equivalent knowledge / skill
- Successfully attended the “Advanced LINUX Programming” training program -or-have the equivalent knowledge / skill Implies knowledge / skill sets of: POSIX library and system call API set, process management, IPC mechanisms, etc.
Optional / Advantageous:
- Extensive user-space development experience on a POSIX
- Kernel Code-based Techniques for Debugging
- Debugging by Printing with the printk
- Programatically turning Messages On and Off
- Rate Limiting
- Where you can and cannot use printk
- trace_printk as an alternative.
- The Need
- Kernel configuration
- Example Usage
- Automated with shell scripts.
- A Header of Convenience.
- Using debugfs programatically
- Debugfs pre-requisites
- The debugfs API (ABI)
- Full example walk-through.
- Debugging System Faults
- Oops Messages
- Generating a (trivial) Oops
- Analyzing an Oops dump
- Article: “The foggy crystal ball: Understanding Oopses”
- Generating a mixed source-assembly-machine-language dump
- Lab Assignment:
- System Hangs
- Using the Magic SysRq Facility
- WARN, BUG, etc macros
- Kernel Panic:
- Setting up your own panic handler using the kernel
- panic chain notifier mechanism.
- A note on Watchdog Timers.
- Kernel-Level Debuggers
- Using gdb for kernel-space
- gdb and loadable kernel modules.
- kgdb setup
- Initiating a debugging session on the target system
- Using the kernel debugger kgdb
- Useful gdb Macros
- Debugging kernel modules
- Using QEMU and [k]gdb for source-level kernel debugging
- Stand-alone kernel debug
- Building a root filesystem for Qemu VM
- Sample Debug Session – KGDB with ARM
- gcc : setting debug flags
- For debug symbolic information
- For mixed source-assembly-machine language listing.
- Kernel-Level Tools
- Dynamic Probes – Kprobes & Jprobes – Essentials
- Kernel build and setup
- Kprobe Interfaces
- Using Jumper Probes (jprobes)
- Kprobes, JProbes and Loadable Kernel Modules
- A basic automated framework
- Essentials of Kdump, kexec and crash
- The kexec with kdump feature
- Tools and kernel installation
- Usage Procedure documentation.
- Real-world eg.: Setting up and using kdump/crash on a Qemu ARM embedded Linux.
- Kernel Hacking Config Options.
- Real time virtual classess
- Pre course reading material
- Suppliment resources
- Language: English
- Certificate of completion