No matter how you approach it, Linux debugging will always be complex. The first part of this Short Cut examines some of these complexities as they relate to kernel debugging and present ideas and methods to improve your debugging skills, inside the kernel itself and then inside device drivers. You begin by learning to use Kernel GNU Debugger (KGDB) to probe the kernel. But because you cannot debug very early kernel startup code with KGDB, we also show you how to work with a hardware debug probe. For the examples in this section, we use a unit manufactured by Abatron called the BDI-2000. Hardware debug probes are often called JTAG probes, because they use a low-level communications method first employed for boundary scan testing of integrated circuits defined by the Joint Test Action Group (JTAG). In the second part of this Short Cut, we continue our coverage of GDB for debugging application code in user space. We extend our coverage of remote debugging and the tools and techniques used for this peculiar debugging environment. This Short Cut includes Chapters 14 and 15 from the book Embedded Linux Primer by Christopher Hallinan (0-13-167984-8). As such, it contains references to earlier and later chapters that are not included in this Short Cut. Apart from these references, the Short Cut is fully self-contained and is an excellent choice for embedded Linux developers interested in learning both kernel-level and application-level debugging techniques. Kernel Debugging Techniques 14.1 Challenges to Kernel Debugging 4 14.2 Using KGDB for Kernel Debugging 6 14.3 Debugging the Linux Kernel 14 14.4 Hardward-Assisted Debugging 53 14.5 When It Doesn't Boot 63 14.6 Chapter Summary 69 Debugging Embedded Linux Applications 15.1 Target Debugging 72 15.2 Remote (Cross) Debugging 73 15.3 Debugging with Shared Libraries 80 15.4 Debugging Multiple Tasks 87 15.5 Additional Remote Debug Options 97 15.6 Chapter Summary 99

This digital Short Cut delivered in Adobe PDF format for quick and easy access, is an introduction to BusyBox, widely regarded as "The Swiss Army Knife of Embedded Linux." After a brief introduction, we walk you through the BusyBox configuration utility. This is used to tailor BusyBox to your particular requirements. You will next learn about the requirements for cross-compiling the BusyBox package. Then we look at BusyBox operational issues, including how it is used in an embedded system. Next you will examine the BusyBox initialization sequence, and how this departs from more traditional Linux systems. You will also study a sample initialization script. After reading the steps for installing BusyBox on a target system, you will learn about some of the BusyBox commands and their limitations. This Short Cut is Chapter 11 from the book Embedded Linux Primer by Christopher Hallinan (0-13-167984-8) available September 2007. As such, it contains references to earlier and later chapters that are not included in this Short Cut. Apart from these references, the Short Cut is fully self-contained and is an excellent choice for embedded Linux developers interested in understanding how to use the BusyBox utility. Table of Contents 11.1 Introduction to BusyBox 11.1.1 BusyBox is Easy 11.2 BusyBox Configuration 11.2.1 Cross-Compiling BusyBox 11.3 BusyBox Operation 11.3.1 BusyBox Init 11.3.2 Example rcS Initialization Script 11.3.3 BusyBox Target Installation 11.3.4 BusyBox Commands 11.4 Chapter Summary 11.4.1 Suggestions for Additional Reading