Linux Kernel Networking Development — Learning Path¶
About This Guide¶
This is a structured, week-by-week plan to go from "I can read C and I know Linux" to "I submit patches to netdev." Each file is one week of work. Some weeks are heavier than others — adjust your pace as needed.
Prerequisites You Already Have¶
- Years of Linux experience (command line, system administration)
- Networking knowledge (protocols, sockets, interfaces)
- Git proficiency
- Comfortable reading C code
- Neovim as your editor
- A Debian 13 VM with 8 GB RAM and 32 cores
What You'll Need to Acquire¶
- Writing C confidently (not just reading it)
- Kernel-specific C idioms (linked lists, error handling, memory allocation)
- Comfort with kernel build systems, debugging tools, and QEMU
- Understanding of the patch-based workflow (no pull requests here)
Weekly Plan¶
| Week | File | Topic |
|---|---|---|
| 1 | 01-environment-setup.md |
Install toolchain, clone the kernel, first build |
| 2 | 02-kernel-build-system.md |
Kconfig, menuconfig, understanding .config |
| 3 | 03-boot-process.md |
From power-on to userspace — what happens when Linux boots |
| 4 | 04-qemu-deep-dive.md |
Running your kernel in QEMU, networking setups, snapshots |
| 5 | 05-kernel-debugging.md |
GDB with QEMU, printk, ftrace, dynamic debug |
| 6 | 06-kernel-c-idioms.md |
Kernel-specific C: linked lists, error codes, memory, locking |
| 7 | 07-kernel-modules.md |
Write, build, load, and test a kernel module |
| 8 | 08-networking-architecture.md |
How Linux handles packets: sk_buff, netdevice, protocol layers |
| 9 | 09-networking-drivers.md |
Drivers ↔ kernel ↔ userspace: the full picture |
| 10 | 10-kernel-testing.md |
kselftest, kunit, static analysis, syzkaller overview |
| 11 | 11-git-workflow-and-patches.md |
git format-patch, git send-email, b4, lei — the netdev workflow |
| 12 | 12-first-contribution.md |
Finding work: bug fixes, cleanups, TODOs, missing features |
How to Use This Guide¶
- Read each week's file top to bottom
- Run every command yourself — don't copy-paste blindly
- When something is unclear, stop and research it (kernel docs, LWN articles, ask me)
- Take notes in your own words — this is how kernel knowledge sticks
- After week 8, start reading netdev patches daily even if you don't understand everything
Key Resources You'll Use Repeatedly¶
- Kernel source: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
- Kernel docs: https://www.kernel.org/doc/html/latest/
- LWN.net: https://lwn.net (the newspaper of the kernel community)
- netdev wiki: https://netdev.bots.linux.dev/
- Patchwork (netdev): https://patchwork.kernel.org/project/netdevbpf/list/