This is a hands-on eBPF tutorial designed to help developers master eBPF programming from basic concepts to advanced techniques. Each lesson includes detailed explanations, complete code examples, and practical exercises.
| Lesson | Topic | Status | Document |
|---|---|---|---|
| 1 | Hello World | ✅ Completed | lesson_1_helloworld_en.md |
| 2 | Kprobe | ✅ Completed | lesson_2_kprobe_en.md |
| 3 | Uprobe | ✅ Completed | lesson_3_uprobe_en.md |
| 4 | User-Space Map | ✅ Completed | lesson_4_user_map_en.md |
| 5 | Kernel-User Map | ✅ Completed | lesson_5_kernel_user_map_en.md |
| 6 | eBPF Go Development | ✅ Completed | lesson_6_golang_develop_en.md |
| 7 | Ring Buffer & Perf Buffer | ✅ Completed | lesson_7_ringbuffer_perfbuffer_en.md |
| 8 | Tracepoint | ✅ Completed | lesson_8_tracepoint_en.md |
| 9 | Raw Tracepoint | ✅ Completed | lesson_9_raw_tracepoint_en.md |
| 10 | BTF & CO-RE | ✅ Completed | lesson_10_btf_en.md |
| 11 | TC Ingress (Inbound Traffic Control) | ✅ Completed | lesson_11_tc_ingress_en.md |
| 12 | TC Egress (Outbound Traffic Control) | ✅ Completed | lesson_12_tc_egress_en.md |
- eBPF Fundamentals: Understanding eBPF architecture and core concepts
- Hook Mechanisms: Kprobe, Uprobe, Tracepoint, and Raw Tracepoint
- Data Structures: Maps, Ring Buffers, and Perf Buffers
- Multi-Language Development: C and Go development with eBPF
- Advanced Topics: BTF, CO-RE, and cross-kernel compatibility
-
Clone the Repository
This project contains Git submodules. You can clone it using one of the following methods:
Method 1: Clone with submodules initialized
git clone --recursive https://github.com/haolipeng/ebpf-tutorial.git
Method 2: Clone and initialize submodules separately
# First, clone the main repository git clone https://github.com/haolipeng/ebpf-tutorial.git cd ebpf-tutorial # Then, initialize and update submodules git submodule update --init
-
Prerequisites
- Linux kernel >= 5.4 (5.8+ recommended for Ring Buffer)
- Basic knowledge of C programming
- Understanding of Linux system programming
-
Development Environment
- Install libbpf, bpftool, and related tools
- For Go development: Go 1.18+
ebpf-tutorial/
├── Makefile # Top-level entry point
├── build/ # Build system configuration
│ ├── config.mk # Configurable options (toolchain, paths)
│ ├── common.mk # Common variables and functions
│ └── rules.mk # Common build rules (BPF compilation)
├── src/ # Example source code
│ ├── Makefile # Manages sub-projects
│ ├── helloworld/ # Lesson 1 example
│ ├── kprobe/ # Lesson 2 example
│ └── ... # More examples
├── libbpf/ # libbpf submodule
├── bpftool/ # bpftool submodule
├── vmlinux/ # Kernel type headers
└── .output/ # Build output directory (auto-generated)
# View available commands
make help
# First time: prebuild dependencies
make prebuild
# Build all examples
make all
# (Optional) Generate vmlinux.h from current kernel
make vmlinuxAvailable Commands:
| Command | Description |
|---|---|
make help |
Show help information |
make prebuild |
Prebuild libbpf and bpftool |
make vmlinux |
Generate vmlinux.h from kernel |
make all |
Build all examples |
make clean |
Clean sub-project build files |
make clean-all |
Clean all build files |
make install-deps |
Install system dependencies |
- Start Learning
- Begin with Lesson 1: Hello World
- Follow the lessons in order for best results
Contributions are welcome! Feel free to:
- Report issues or bugs
- Suggest improvements
- Submit pull requests
- Share your learning experience
This tutorial is open source and available for educational purposes.
Keep Learning, Keep Growing!