| |
| |
Foreword | |
| |
| |
Preface | |
| |
| |
Acknowledgments | |
| |
| |
About the Author | |
| |
| |
| |
Downloading and Installing Open Source Tools | |
| |
| |
| |
Introduction | |
| |
| |
| |
What Is Open Source? | |
| |
| |
| |
What Does Open Source Mean to You? | |
| |
| |
| |
An Introduction to Archive Files | |
| |
| |
| |
Know Your Package Manager | |
| |
| |
| |
Some Words about Security and Packages | |
| |
| |
| |
Inspecting Package Contents | |
| |
| |
| |
Keeping Packages up to Date | |
| |
| |
| |
Summary | |
| |
| |
| |
Building from Source | |
| |
| |
| |
Introduction | |
| |
| |
| |
Build Tools | |
| |
| |
| |
The Build Process | |
| |
| |
| |
Understanding Errors and Warnings | |
| |
| |
| |
Summary | |
| |
| |
| |
Finding Help | |
| |
| |
| |
Introduction | |
| |
| |
| |
Online Help Tools | |
| |
| |
| |
Other Places to Look | |
| |
| |
| |
Documentation Formats | |
| |
| |
| |
Internet Sources of Information | |
| |
| |
| |
Finding Information about the Linux Kernel | |
| |
| |
| |
Summary | |
| |
| |
| |
Editing and Maintaining Source Files | |
| |
| |
| |
Introduction | |
| |
| |
| |
The Text Editor | |
| |
| |
| |
Revision Control | |
| |
| |
| |
Source Code Beautifiers and Browsers | |
| |
| |
| |
Summary | |
| |
| |
| |
What Every Developer Should Know about the Kernel | |
| |
| |
| |
Introduction | |
| |
| |
| |
User Mode versus Kernel Mode | |
| |
| |
| |
The Process Scheduler | |
| |
| |
| |
Understanding Devices and Device Drivers | |
| |
| |
| |
The I/O Scheduler | |
| |
| |
| |
Memory Management in User Space | |
| |
| |
| |
Summary | |
| |
| |
| |
Understanding Processes | |
| |
| |
| |
Introduction | |
| |
| |
| |
Where Processes Come From | |
| |
| |
| |
The exec Functions | |
| |
| |
| |
Process Synchronization with wait | |
| |
| |
| |
The Process Footprint | |
| |
| |
| |
Setting Process Limits | |
| |
| |
| |
Processes and procfs | |
| |
| |
| |
Tools for Managing Processes | |
| |
| |
| |
Summary | |
| |
| |
| |
Communication between Processes | |
| |
| |
| |
Introduction | |
| |
| |
| |
IPC Using Plain Files | |
| |
| |
| |
Shared Memory | |
| |
| |
| |
Signals | |
| |
| |
| |
Pipes | |
| |
| |
| |
Sockets | |
| |
| |
| |
Message Queues | |
| |
| |
| |
Semaphores | |
| |
| |
| |
Summary | |
| |
| |
| |
Debugging IPC with Shell Commands | |
| |
| |
| |
Introduction | |
| |
| |
| |
Tools for Working with Open Files | |
| |
| |
| |
Dumping Data from a File | |
| |
| |
| |
Shell Tools for System V IPC | |
| |
| |
| |
Tools for Working with POSIX IPC | |
| |
| |
| |
Tools for Working with Signals | |
| |
| |
| |
Tools for Working with Pipes and Sockets | |
| |
| |
| |
Using Inodes to Identify Files and IPC Objects | |
| |
| |
| |
Summary | |
| |
| |
| |
Performance Tuning | |
| |
| |
| |
Introduction | |
| |
| |
| |
System Performance | |
| |
| |
| |
Application Performance | |
| |
| |
| |
Multiprocessor Performance | |
| |
| |
| |
Summary | |
| |
| |
| |
Debugging | |
| |
| |
| |
Introduction | |
| |
| |
| |
The Most Basic Debugging Tool: printf | |
| |
| |
| |
Getting Comfortable with the GNU Debugger: gdb | |
| |
| |
| |
Debugging Shared Objects | |
| |
| |
| |
Looking for Memory Issues | |
| |
| |
| |
Unconventional Techniques | |
| |
| |
| |
Summary | |
| |
| |
Index | |