-
Notifications
You must be signed in to change notification settings - Fork 0
perplexity_study_guide
This plan is optimized for hands-on coding, not just reading. The goal is to deepen Linux kernel, driver, observability, and modern C++ skills while keeping your userspace strengths useful.
Focus on writing and debugging small kernel modules so the concepts stick fast. Start with a character driver, procfs/sysfs interface, basic synchronization, and module parameters.
Build:
- A simple char driver with
open/read/write/ioctl. - A
/procorsysfsinterface for runtime status. - A kernel module using
mutex,spinlock,wait_queue, andatomic_t.
Study:
- Kernel build flow.
- Process context vs interrupt context.
- Memory allocation in kernel space.
- Basic locking rules.
Outcome: You should be able to write and load a simple driver, debug logs, and understand kernel crash symptoms at a basic level.
Move into real interfaces you already care about: USB, PCIe, or platform-style devices. Even if you do not write a full USB driver from scratch, build driver-shaped code and understand probe/remove flow.
Build:
- A platform driver skeleton with device tree matching.
- A userspace tool that communicates with it using
ioctl,netlink, orsysfs. - A small DMA-style simulation or ring-buffer data path in userspace.
Study:
- Driver model.
- Device tree basics.
- Probe/remove lifecycle.
- Interrupt handling and deferred work.
Outcome: You’ll understand how kernel objects map to actual hardware-facing logic.
This is a great fit for your trace parsing and diagnostics background. The point is to move from consuming traces to producing them.
Build:
- One eBPF program for tracing a syscall or scheduler event.
- One tool that collects and prints latency or count metrics.
- A small profiler-like utility for a real Linux workload.
Study:
- kprobes, tracepoints, uprobes.
- eBPF maps and helpers.
- libbpf basics.
- Safety and verifier constraints.
Outcome: You’ll be able to write production-style observability tooling, not just analyze logs after the fact.
This month should be code-heavy. Rewrite one existing utility in cleaner C++ and use it to practice performance-conscious design.
Build:
- Rewrite your ARM trace parser or ELF/DWARF parser in modern C++.
- Use RAII,
std::unique_ptr,std::vector,std::span,std::optional, and move semantics. - Add multithreaded parsing or pipeline stages.
- Add tests and benchmarks.
Study:
- Ownership and lifetime design.
- Concurrency primitives.
- Memory model basics.
- Zero-copy and cache-friendly design.
Outcome: Your C++ will start looking like a serious systems engineer’s toolkit, not just “C with classes.”
Connect your code with actual measurable gains. Pick one area where you can reduce latency, memory, or CPU usage.
Build:
- A benchmark harness for one daemon or parser.
- Flame-graph/perf-based analysis notes.
- A lock-free or low-lock queue prototype.
- A cache-aware data-path optimization.
Study:
- CPU caches and false sharing.
- Branch prediction.
- Memory layout.
- Throughput vs latency tradeoffs.
Outcome: You’ll build the habit of performance-first engineering with evidence, not intuition.
Combine everything into one portfolio-quality project. It should touch userspace, kernel awareness, tracing, and C++ design.
Project ideas:
- A userspace daemon plus kernel trace collector for USB/PCIe event latency.
- A diagnostic tool that correlates system logs, eBPF events, and symbolized crash data.
- A low-latency pipeline that ingests events, processes them in C++, and exposes metrics via CLI or HTTP.
Study:
- Packaging and deployment.
- Documentation.
- Reproducibility.
- Upstream-style code hygiene.
Outcome: You’ll have a project that demonstrates the kind of cross-layer systems work that senior platform teams value.
- 60% coding.
- 20% debugging and measurement.
- 20% reading.
- Kernel char driver.
- Device-tree platform driver.
- eBPF tracing tool.
- Modern C++ parser rewrite.
- Performance benchmark and optimization.
- Integrated cross-layer diagnostic tool.
- Linux kernel internals.
- Driver development.
- eBPF.
- Modern C++.
- Performance profiling.
- ARM architecture.
- Android internals.
Pick one main project per month and keep it small enough to finish. Ship code, write a short README, add tests, and measure something real. That habit matters more than trying to study ten subjects at once.