Recent Posts

  • From an AER Log to a PCIe Failure Story

    AER tells us who reported an error. A TLP header tells us what was on the wire. Two storage incidents show why we need both, and why neither is the whole story.

  • Versions, Callgraphs, and other ways to compare what changed

    In Part 4, we tried to recompile 191 decompiled C files and hit 2,896 unresolved symbols. We learned why firmware linking is fundamentally different from userspace linking, and concluded that binary patching – the four-byte...

  • tlp-tool and the Next Phase of PCIe Debugging

    A kernel 7.0 documentation patch pointed PCIe AER debugging at tlp-tool. The linux-pci discussion that followed surfaced a real Flit Mode debugging hazard -- and the tool changed in response.

  • Symbols, Scripts, and other linking nightmares

    In Part 3, we patched a four-byte bug in the firmware’s route engine and recalculated the CRC. Four bytes – problem solved. But as we noted at the end: what if the fix was not...

  • Decompilers, Annotations, and other ways to read the unreadable

    In Part 2, we mapped the major functions, string references, and 16 CLI commands using nothing but strings, pattern matching, and a Python script. That left us with a suspicious route-engine string:

  • Opcodes, Prologues, and other hidden patterns

    In Part 1, we built a flat MIPS32 firmware binary and stared at 8,496 bytes with no headers, no symbols, and no sections. file said “data.” readelf said nothing. We left off with a question:...

  • Headers, Symbols, and other things you won't find

    Eight years ago I wrote ELF’s Linker’s and other magical creatures – a walkthrough of the ELF binary format, relocations, segments, and even live code injection through /proc/pid/mem. That post ended in a comfortable place:...

  • Before the BSD Kernel Starts: Part Two ARMv8

    Note: This article was written in 2020 as a companion to Part One (AMD64) but was never published. The technical content reflects the state of NetBSD and the RK3399 platform at that time. Published here...

  • rust_tlplib and tlp-tool 0.5.0: PCIe 6.0 Flit Mode

    The rust_tlplib and rtlp-tool libraries had not seen a release in a long time. After getting Gen 4 TLP parsing to a point where it covered everything I needed day-to-day, I left it there. Good...

  • A Transformer Block in CUDA

    December, somewhere over the Pacific on the way to Tokyo. The letGPU challenge open in one browser tab, Ro Salaverry’s The Scaling Era: An Oral History of AI, 2019–2025 on my Kindle. No plan beyond...