I’m attempting to enable Soft Secure Boot (Method 2 — reversible,
no fuse burning) on a Jetson AGX Orin Developer Kit, following the
official guide:
After two attempts with different signing tools, the kernel signature
is rejected by the UEFI on first boot after PK enrollment.
Recovery via “Reset Secure Boot Keys” in the UEFI menu works cleanly
both times. I’d appreciate guidance on the correct end-to-end workflow.
════════════════════════════════════════════════════════════════
SYSTEM
════════════════════════════════════════════════════════════════
- Hardware: Jetson AGX Orin Developer Kit (64 GB)
- JetPack: 6.2.2
- L4T: R36.5
- Kernel: 5.15.185-tegra (stock /boot/Image, untouched)
- UEFI: stock NVIDIA UEFI (custom rebuild attempted earlier — same result)
════════════════════════════════════════════════════════════════
GOAL
════════════════════════════════════════════════════════════════
Enable Soft Secure Boot so that:
- Boot from external USB / SD with foreign OS is rejected
- Modified /boot/Image on the eMMC is rejected
- Reversible via UEFI menu (no fuse burning on a Dev Kit)
═══════════════════════════════════════════════════════════════
WHAT I DID
═══════════════════════════════════════════════════════════════
Step 1 — Generated PKI keys on Ubuntu 22.04 build host:
openssl req -newkey rsa:2048 -nodes -keyout PK.key -new -x509 …
openssl req -newkey rsa:2048 -nodes -keyout KEK.key -new -x509 …
openssl req -newkey rsa:2048 -nodes -keyout db.key -new -x509 …
Step 2 — Built auth files via efitools:
cert-to-efi-sig-list -g $GUID PK.crt PK.esl
sign-efi-sig-list -k PK.key -c PK.crt PK PK.esl PK.auth
sign-efi-sig-list -k PK.key -c PK.crt KEK KEK.esl KEK.auth
sign-efi-sig-list -k KEK.key -c KEK.crt db db.esl db.auth
Step 3 — Captured stock kernel:
scp Jetson:/boot/Image /tmp/Image.unsigned
cp /boot/Image /boot/Image.unsigned.bak # safety backup
Step 4 — Verified signed kernel boots BEFORE enrolling keys.
It does. Boot is clean. Then proceeded to enroll.
Step 5 — Enrolled keys on the Jetson (over SSH):
sudo efi-updatevar -f /tmp/db.auth db # OK
sudo efi-updatevar -f /tmp/KEK.auth KEK # OK
sudo efi-updatevar -f /tmp/PK.auth PK # OK — activates Secure Boot
Step 6 — Reboot. ← THIS IS WHERE IT FAILS.
══════════════════════════════════════════════════════════════
FAILURE MODES
══════════════════════════════════════════════════════════════
ATTEMPT 1 — sbsign (standard EFI signing tool):
sbsign --key db.key --cert db.crt --output Image.signed Image.unsigned
sbverify --cert db.crt Image.signed → OK
Result after reboot with Secure Boot active:
→ UEFI Shell appears ("Press ESC in N seconds to skip startup.nsh")
→ No kernel load attempt visible
ATTEMPT 2 — l4t_uefi_sign_image.sh (NVIDIA’s tool):
cp /tmp/Image.unsigned /tmp/Image.l4tsigned
./l4t_uefi_sign_image.sh
–image /tmp/Image.l4tsigned
–key ~/secure_boot_keys/db.key
–cert ~/secure_boot_keys/db.crt
–mode nosplit
Output: “Image.l4tsigned is signed”
Result after reboot with Secure Boot active:
→ Boot loop: NVIDIA splash → black → NVIDIA splash → black → ...
→ No SSH, no DP login
RECOVERY (both cases, worked cleanly):
Power cycle → F11 → Device Manager → Secure Boot Configuration
→ Reset Secure Boot Keys → Save → Reset
→ Device boots normally. Rolled back to Image.unsigned.bak.
══════════════════════════════════════════════════════════════
QUESTIONS
══════════════════════════════════════════════════════════════
-
What is the correct end-to-end signing workflow for /boot/Image
on R36.5 / JetPack 6.2.2? Is--mode nosplitcorrect, or should
I use--mode split? -
Beyond /boot/Image, what else must be signed for the UEFI
verification chain to succeed?- DTBs in /boot/dtb/ ?
- initrd in /boot ?
- extlinux.conf entries ?
- Boot Manager variables ?
-
Are there gen_uefi_* helper scripts in Linux_for_Tegra/tools/
intended for this workflow that I missed? -
Is
efi-updatevarthe supported runtime enrollment path on
Jetson, or is rebuilding UEFI with PK embedded the recommended
approach? -
Is there a known-working step-by-step reference (commands +
files) for Soft Secure Boot on the AGX Orin Dev Kit at JetPack
6.2.2 specifically? The R36.4 doc page exists, but the exact
commands for the signing step are not spelled out.
═════════════════════════════════════════════════════════════
NOT ASKING ABOUT
═════════════════════════════════════════════════════════════
- Hard Secure Boot / fuse burning (intentionally avoided on Dev Kit)
- Pre-UEFI (MB1/PSC) — understand this is closed source
- Disk encryption — separate topic, will pursue separately if needed
Thanks for any pointers — happy to share full logs / commands /
file dumps if helpful.