# ebpf-tutorial
**Repository Path**: SomeMirrors/ebpf-tutorial
## Basic Information
- **Project Name**: ebpf-tutorial
- **Description**: [Mirror] https://github.com/haolipeng/ebpf-tutorial
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-10-27
- **Last Updated**: 2025-11-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# eBPF 入门教程
[](README.md)
[](README_zh-CN.md)
**从零开始系统学习 eBPF 编程**
---
## 📚 关于本教程
这是一个从零开始学习 eBPF 的实战教程,旨在帮助开发者从基础概念到高级技术全面掌握 eBPF 编程。每节课都包含详细的讲解、完整的代码示例和实践练习。
## 📖 教程目录
| 课程 | 主题 | 状态 | 文档 |
| ---- | ---- | ---- | ---- |
| 1 | Hello World 入门 | ✅ 已完成 | [lesson_1_helloworld.md](lesson_1_helloworld.md) |
| 2 | Kprobe 内核探针 | ✅ 已完成 | [lesson_2_kprobe.md](lesson_2_kprobe.md) |
| 3 | Uprobe 用户态探针 | ✅ 已完成 | [lesson_3_uprobe.md](lesson_3_uprobe.md) |
| 4 | 用户态 Map 操作 | ✅ 已完成 | [lesson_4_user_map.md](lesson_4_user_map.md) |
| 5 | 内核态与用户态 Map 通信 | ✅ 已完成 | [lesson_5_kernel_user_map.md](lesson_5_kernel_user_map.md) |
| 6 | eBPF Go 语言开发 | ✅ 已完成 | [lesson_6_golang_develop.md](lesson_6_golang_develop.md) |
| 7 | Ring Buffer 与 Perf Buffer | ✅ 已完成 | [lesson_7_ringbuffer_perfbuffer.md](lesson_7_ringbuffer_perfbuffer.md) |
| 8 | Tracepoint 静态跟踪点 | ✅ 已完成 | [lesson_8_tracepoint.md](lesson_8_tracepoint.md) |
| 9 | Raw Tracepoint 原始跟踪点 | ✅ 已完成 | [lesson_9_raw_tracepoint.md](lesson_9_raw_tracepoint.md) |
| 10 | BTF 与 CO-RE 技术 | ✅ 已完成 | [lesson_10_btf.md](lesson_10_btf.md) |
## 🎯 学习内容
### 基础篇
- **eBPF 基础**: 理解 eBPF 架构和核心概念
- **开发环境**: libbpf 工程模板搭建和使用
- **第一个程序**: Hello World 示例详解
### 探针机制
- **Kprobe**: 内核函数动态跟踪
- **Uprobe**: 用户态函数跟踪
- **Tracepoint**: 静态跟踪点使用
- **Raw Tracepoint**: 原始跟踪点高级用法
### 数据通信
- **Map 基础**: 用户态和内核态数据交换
- **Ring Buffer**: 高效的单生产者单消费者队列
- **Perf Buffer**: 多 CPU 性能事件缓冲区
### 多语言开发
- **C 语言开发**: 基于 libbpf 的传统开发方式
- **Go 语言开发**:
- Cilium ebpf-go 库使用
- Aqua Security libbpfgo 库使用
- 两种方案对比分析
### 高级主题
- **BTF (BPF Type Format)**: 类型元数据格式
- **CO-RE (Compile Once, Run Everywhere)**: 一次编译,到处运行
- **跨内核版本兼容性**: 编写可移植的 eBPF 程序
## 🚀 开始学习
### 前置要求
1. **操作系统**
- Linux 内核 >= 5.4
- 推荐 5.8+ 以支持 Ring Buffer
- 推荐 5.14+ 以支持完整的 BTF 功能
2. **编程基础**
- C 语言编程基础
- Linux 系统编程基础知识
- 了解内核基本概念(进程、系统调用等)
3. **开发工具**
- GCC 或 Clang 编译器
- libbpf 开发库
- bpftool 工具
- (可选) Go 1.18+ 用于 Go 语言开发
### 环境搭建
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y \
clang \
llvm \
libbpf-dev \
linux-headers-$(uname -r) \
bpftool
# CentOS/RHEL
sudo yum install -y \
clang \
llvm \
libbpf-devel \
kernel-devel \
bpftool
```
### 学习路径
1. **入门阶段** (第 1-3 课)
- 从 [第一课:Hello World](lesson_1_helloworld.md) 开始
- 学习基本的 eBPF 程序结构
- 掌握 kprobe 和 uprobe 的使用
2. **进阶阶段** (第 4-7 课)
- 学习数据通信机制(Map、Ring Buffer、Perf Buffer)
- 尝试使用 Go 语言开发 eBPF 程序
- 理解不同数据结构的使用场景
3. **高级阶段** (第 8-10 课)
- 深入学习各种跟踪点机制
- 掌握 BTF 和 CO-RE 技术
- 编写可移植的 eBPF 程序
## 💡 学习建议
1. **循序渐进**: 建议按照课程顺序学习,每节课都为后续课程打下基础
2. **动手实践**: 每节课都包含完整代码示例,建议自己动手编写和运行
3. **理解原理**: 不要只关注代码实现,要理解背后的原理和设计思想
4. **查阅文档**: 遇到问题时查阅官方文档和内核源码
5. **持续学习**: eBPF 技术在快速发展,保持学习最新特性
## 📝 贡献指南
我们欢迎任何形式的贡献!
### 如何贡献
1. **报告问题**
- 发现文档错误或代码 bug
- 提出改进建议
- 分享使用中遇到的问题
2. **改进文档**
- 修正拼写或语法错误
- 补充说明或示例
- 翻译文档到其他语言
3. **贡献代码**
- 修复 bug
- 添加新的示例
- 优化现有代码
4. **分享经验**
- 分享学习笔记
- 编写实战案例
- 参与讨论交流
### 贡献流程
1. Fork 本仓库
2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
## 🔗 相关资源
### 官方文档
- [eBPF 官方网站](https://ebpf.io/)
- [libbpf 文档](https://libbpf.readthedocs.io/)
- [Cilium eBPF 文档](https://ebpf-go.dev/)
### 推荐阅读
- [BPF Performance Tools](http://www.brendangregg.com/bpf-performance-tools-book.html)
- [Linux Observability with BPF](https://www.oreilly.com/library/view/linux-observability-with/9781492050193/)
### 工具链
- [bpftool](https://github.com/libbpf/bpftool) - BPF 工具
- [bpftrace](https://github.com/iovisor/bpftrace) - BPF 高级追踪语言
- [libbpf](https://github.com/libbpf/libbpf) - BPF 开发库
## 📄 许可证
本教程采用开源协议,可自由用于学习和教学目的。
## 🙏 致谢
感谢所有为 eBPF 技术发展做出贡献的开发者和社区成员。
---
**持续学习,不断进步!**
如果本教程对您有帮助,欢迎 ⭐ Star 支持!