
Linux OS fundamental
Linux address space on 32-bit architecture
User space addressing in 32-bit architecture
Virtual address mapping
Kernel space addressing in 32-bit architecture
Kernel Logical Address
Kernel Virtual address
Linux address space on 64-bit architecture
User space addressing in 64-bit architecture
Kernel space addressing in 64-bit architecture
Memory Management Unit (MMU)
Page table
Page fault handling sequence
Virtual address mapping in a process
Sharing memory between processes
Shared memory demonstration
Process and threads
Demonstration "current" task pointer using kernel module
Process and thread demonstration using example code
Executable file format
Demonstration to dump the ELF header from an executable binary.
Shared Libraries
Shared Libraries search path
Demonstration on shared libraries
Scheduling in Linux
Modifying scheduling parameters
Demonstration to set scheduling policy and other scheduling related parameters.
Context Scheduling
Scheduling Algorithms
System Calls in Linux
System call demonstration using strace
Exception in Linux
Interrupts in Linux
Interrupt context
Deferred interrupt handling in Linux
Kernel Threads
Workqueue
SoftIRQs
Tasklets
References
Summary
Discussing various pseudo (virtual) file systems and important files associated with these file systems
/proc
/sys
/dev
debugfs
Overview of Linux monitoring tools
Memory representation
Demonstrating following process monitoring tools
PS command
Top command
Process tree
Demonstrating following Memory Monitoring tools
Free
VMstat
Process map
Demonstrating following CPU and Disk monitoring tools
iostat
iotop
mpstat
Demonstrating following Network monitoring tools
netstat
ethtool
tcpdump
Summary
References
Binutils are a collection of tools that we can use to work with object files, program binaries and libraries. This video covers the following tools along with individual demonstration.
readelf
objdump
nm and addr2line
ldd
GDB introduction
Debugging file format
Compiler option for debugging
Code optimisation options
Code optimisation demonstration
GDB basic commands
Breakpoints
Watchpoints
File command
Collection for various GDB commands
Remote Debugging with GDB
Remote debugging demonstration
Remote debugging with VScode
Python GDB module
Setting breakpoint using python GDB module
Demonstration
Shared library debugging using GDB
LD_PRELOAD environment variable
Libsegfault
Demonstration
Backtrace analysis using nm
Coredump introduction
Enabling coredump functionality
Coredump analysis using GDB
Demonstration
References
Summary
Memory management
Common memory issues
Segmentation fault and demonstration
Memory leak
Buffer overflow
Memory debugging tools
Static analysis tools
Valgrind introduction
Memcheck tool in Valgrind along with demonstration
Valgrind GDB support along with demonstration
Sanitizer introduction
Address Sanitizer (ASan)
ASan demonstration
Memory Sanitizer (MSan)
Thread Sanitizer (TSan) and demonstration
Undefined Behaviour Sanitizer (UBSan) and demonstration
libefence
Demonstration
Best practices for Memory management
References
Summary
Linux is at the heart of our modern world. From the devices we carry in our pockets to the systems that power industries, Linux, and particularly embedded Linux, plays a pivotal role. It drives the technology behind smart home devices, medical equipment, automotive systems, and so much more. These systems aren't just conveniences—they're critical to how we live, work, and innovate.
But with great complexity comes great challenges. Debugging these systems is an intricate process that requires a deep understanding of tools and techniques. The stakes are high—whether it's ensuring a life-saving device operates flawlessly or guaranteeing the safety of an autonomous vehicle.
Acquiring these debugging skills is no easy feat. It demands not only technical expertise but also hands-on experience with the tools and processes that define the Linux ecosystem. And that's where this course steps in.
This course brings together all the essential material in one place, simplifying the complex and equipping you with the skills you need to excel. You'll master tools like GDB, learn to analyze core dumps, and understand how to debug segmentation faults and shared libraries. Whether you're troubleshooting a single device or an entire system, these skills will set you apart.
By the end of this journey, you'll be prepared to tackle the toughest debugging challenges in the Linux world, contributing to the technologies that shape our lives. Ready to dive in?