BloodBadger BloodBadger
/ THEBLOODBADGER

Systems work,
documented
in the open.

Firmware patches, kernel modules, CLI tooling and custom Arch builds. Every project ships with the source, the notes, and the parts that failed first.

Builder of systems. Breaker of assumptions.

[ workbench photo ]
{{ f.n }}
{{ f.label }}
— REFERENCE LIBRARY

Searchable. Empirical. Linked to source.

Notes I keep for myself, cleaned up enough to be useful to you. Each entry cites the man page, commit, or datasheet it came from.

Everything is on GitHub.

Eleven repositories, MIT or GPL, no dead links.

github.com/BloodBadger ↗
— RECENT WORK
{{ p.id }} {{ p.name }} {{ p.kind }} {{ p.lang }}
/ REFERENCE INDEX

Six areas. One way of writing them up.

Every entry states the problem, the command or code that solves it, and the source it was verified against. If it hasn't been run on real hardware, it isn't here.

{{ t.code }} {{ t.count }} ENTRIES
{{ t.name }}
{{ t.long }}
Open {{ t.name }} →
/ HARDWARE. FIRMWARE. TOOLING.

Built and verified.

Each project below links to the repository and to the write-up explaining why it is built the way it is.

All repositories ↗
[ PCB photo ]
— PROJECT INDEX
{{ p.id }} {{ p.lang }}
{{ p.name }}
{{ p.desc }}
{{ p.shot }}
[ portrait ]
/ ABOUT

Michael Roby II

Builder of systems. Breaker of assumptions.

I work close to the metal: kernel modules, firmware, boot chains, and the tooling that makes them bearable. Most of what I publish started as a problem I hit on my own machines.

The site exists because the answers were scattered across forum posts, mailing lists, and my own terminal history. Writing them down properly costs an afternoon and saves everyone else a week.

Nothing here is theoretical. If a claim isn't backed by a run on real hardware, it says so.

The long version is on YouTube.

TheBloodBadger on YouTube ↗
Topics / Linux & CLI / Out-of-tree modules

Signing an out-of-tree kernel module for Secure Boot

UPDATED 2026-07-30|VERIFIED ON 6.9.7-ARCH1|7 MIN

Secure Boot rejects any module the firmware cannot trace to a trusted key. Distribution kernels ship with their own key enrolled, so an out-of-tree module you compile yourself will load on an unsigned system and fail silently on a locked one. The fix is to generate a machine owner key, enroll it, and sign the module after every rebuild.

Generate the key pair

Keep the private key off any machine you do not control. A 2048-bit RSA key is the practical minimum; shim will refuse anything smaller.

openssl req -new -x509 -newkey rsa:2048 \
  -keyout MOK.priv -outform DER -out MOK.der \
  -days 36500 -subj "/CN=bloodbadger module signing/"

mokutil --import MOK.der

Reboot into the MOK manager and enroll the key. The password you set is one-time and is discarded after enrollment.

WHAT ACTUALLY FAILED

On the first attempt the module still refused to load after enrollment. The cause was a kernel upgrade between signing and boot: the signature is tied to the module built against that exact kernel version, not to the module name.

Sign on every rebuild

Wire the signing step into your DKMS post-build hook so it cannot be forgotten.

/usr/src/linux-headers-$(uname -r)/scripts/sign-file \
  sha256 MOK.priv MOK.der module.ko

modinfo module.ko | grep -i signer

If signer comes back empty, the module was rebuilt after signing. Sign again, then load.

/ HTTP 404

404

No entry at this path.

Either it moved, or it was never written. If you followed a link from a video, tell me and I will fix the link.