I’ve got a custom carrier board using an Orin Nano module. I have working Linux system images (built using Yocto and OE4T) that I am able to install and boot without a problem. It is running L4T version 36.5.
Now, I need to learn how to burn the correct fuses to enable secure booting. I’m starting off by burning just the PKC and SBK keys, but something went wrong. The fuses seem to have burned correctly, the board still boots into Linux, but the NVIDIA tools for installing new images or for reading the fuses no longer works.
Here’s the details.
I created an ECDSA P-521 key as described here: Secure Boot — NVIDIA Jetson Linux Developer Guide . I also created the public key hashes as described there and (for my own reference) also created a PEM file with the public key:
$ openssl ecparam -name secp521r1 -genkey -noout -out key.pem
$ …/tegrasign_v3.py --pubkeyhash key.pubkey key.hash --key key.pem
Valid ECC key. Key size is 521
Saving public key in key.pubkey for ECC
Sha saved in pcp.sha
tegra-fuse format (big-endian): 0xdd5dfef6ab46e95772265d0d3a7ef2009db30c0db9238b06035573efacb5c0cf4099392d5b94d8717aaab23e54ad06b41c97e2186331848e8d7cafb6f0bd5f84
$ openssl pkey -in key.pem --pubout > key.pub.pem
I then generated an SBK key as described here: Secure Boot — NVIDIA Jetson Linux Developer Guide
I read 32 bytes from /dev/random:
$ cat /dev/random | head -c32 | xxd -c32 -p
Then I formatted it as documented and saved it to sbk.key with the following format:
0x12345678 0x9abcdef0 0x0fedcba9 0x87654321 0x12345678 0x9abcdef0 0x0fedcba9 0x87654321
I then created a fuses.xml file for the burning:
<genericfuse MagicId="0x45535546" version="1.0.0">
<fuse name="PublicKeyHash" size="64" value="0x..."/>
<fuse name="SecureBootKey" size="32" value="0x..."/>
<fuse name="BootSecurityInfo" size="4" value="0x0b"/>
</genericfuse>
And I used this file to burn the fuses:
$ sudo ./odmfuse.sh -X .../fuses.xml -i 0x23 jetson-orin-nano-devkit-nvme
This all seems to have worked. The module continues to boot into Linux, and when I run the nv_fuse_read.sh script, I see the values I burned.
But I can no longer use the odmfuseread.sh script to read the fuse values, and I can no longer flash new images.
Trying to read the fuses with:
$ sudo ./odmfuseread.sh -i 0x23 -k key.pubkey -S sbk.key jetson-orin-nano-devkit-nvme
I see several errors (I can share the full output, if required), ending with:
...
[ 1.4280 ] tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct
[ 1.4285 ] BR_CID: 0x8B012344705DD3172C00000005FF0240
[ 1.5706 ] Sending bct_br
[ 1.7090 ] File mb1_t234_prod_aligned_sigheader_encrypt.bin.signed open failed
Error: Return value 19
Command tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct
[ 1.7116 ] tegrarcm_v2 --chip 0x23 0 --ismb2applet
[ 1.7129 ] Retrieving board information
[ 1.7135 ] tegrarcm_v2 --chip 0x23 0 --oem platformdetails chip chip_info.bin
[ 1.7143 ] Retrieving EEPROM data
[ 1.7143 ] tegrarcm_v2 --oem platformdetails eeprom cvm .../Linux_for_Tegra/bootloader/cvm.bin --chip 0x23 0
[ 1.7167 ] tegrarcm_v2 --chip 0x23 0 --ismb2applet
[ 1.7175 ] Dumping customer Info
[ 1.7180 ] tegrarcm_v2 --chip 0x23 0 --oem dump bct tmp.bct
[ 1.7193 ] tegrabct_v2 --brbct tmp.bct --chip 0x23 0 --custinfo .../Linux_for_Tegra/bootloader/custinfo_out.bin
[ 1.7199 ] File tmp.bct open failed
Error: Return value 19
Command tegrabct_v2 --brbct tmp.bct --chip 0x23 0 --custinfo .../Linux_for_Tegra/bootloader/custinfo_out.bin
Reading board information failed.
I see similar results when trying to flash the board.
doflash.sh:
$ sudo ./doflash.sh -u key.pem -v sbk.key --spi-only
...
[ 2.7140 ] Boot Rom communication
[ 2.7148 ] tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct.signed
[ 2.7153 ] BR_CID: 0x8B012344705DD3172C00000005FF0240
[ 2.9516 ] Sending bct_br
[ 3.0902 ] Sending mb1
[ 3.0912 ] ERROR: might be timeout in USB write.
Error: Return value 3
Command tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct.signed
[ 3.0981 ] tegrarcm_v2 --chip 0x23 0 --ismb2applet
[ 3.0994 ] Retrieving board information
[ 3.1001 ] tegrarcm_v2 --chip 0x23 0 --oem platformdetails chip chip_info.bin
[ 3.1010 ] Retrieving EEPROM data
[ 3.1011 ] tegrarcm_v2 --oem platformdetails eeprom cvm .../cvm.bin.gmgtU --chip 0x23 0
[ 3.1074 ] tegrarcm_v2 --chip 0x23 0 --ismb2applet
[ 3.1083 ] Dumping customer Info
[ 3.1088 ] tegrarcm_v2 --chip 0x23 0 --oem dump bct tmp.bct
[ 3.1101 ] tegrabct_v2 --brbct tmp.bct --chip 0x23 0 --custinfo .../custinfo_out.bin
[ 3.1107 ] File tmp.bct open failed
[ 3.1115 ] Error: try getting custinfo fail. Moving on
[ 3.1116 ] Rebooting to recovery mode
[ 3.1121 ] tegrarcm_v2 --chip 0x23 0 --ismb2
[ 3.1129 ] Rebooting to recovery mode
[ 3.1134 ] tegrarcm_v2 --chip 0x23 0 --reboot recovery
ERR: chip_info.bin_bak missing after dumping boardinfo
initrd-flash:
sudo ./initrd-flash -u key.pem -v sbk.key
Starting at 2026-03-17T16:44:05-04:00
Machine: ...
Rootfs device: nvme0n1p1
Found Jetson device in recovery mode at USB 1-3.3
== Step 1: Signing binaries at 2026-03-17T16:44:05-04:00 ==
ERR: chip_info.bin_bak missing after dumping boardinfo
ERR: signing failed at 2026-03-17T16:44:10-04:00
And in the corresponding log-initrd-flash file:
...
[ 2.5299 ] Boot Rom communication
[ 2.5306 ] tegrarcm_v2 --instance 1-3.3 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct.signed
[ 2.5312 ] BR_CID: 0x8B012344705DD3172C00000005FF0240
[ 2.5493 ] Sending bct_br
[ 2.5654 ] Sending mb1
[ 2.5664 ] ERROR: might be timeout in USB write.
Error: Return value 3
Command tegrarcm_v2 --instance 1-3.3 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader_encrypt.bin.signed --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader_encrypt.bin.signed --download bct_mb1 mb1_bct_MB1_sigheader_encrypt.bct.signed
[ 2.5740 ] tegrarcm_v2 --instance 1-3.3 --chip 0x23 0 --ismb2applet
[ 2.5752 ] Retrieving board information
[ 2.5757 ] tegrarcm_v2 --instance 1-3.3 --chip 0x23 0 --oem platformdetails chip chip_info.bin
[ 2.5764 ] Retrieving EEPROM data
[ 2.5765 ] tegrarcm_v2 --instance 1-3.3 --oem platformdetails eeprom cvm .../cvm.bin.teYdk --chip 0x23 0
[ 2.5789 ] tegrarcm_v2 --instance 1-3.3 --chip 0x23 0 --ismb2applet
[ 2.5798 ] Dumping customer Info
[ 2.5802 ] tegrarcm_v2 --instance 1-3.3 --chip 0x23 0 --oem dump bct tmp.bct
[ 2.5814 ] tegrabct_v2 --brbct tmp.bct --chip 0x23 0 --custinfo .../custinfo_out.bin
[ 2.5819 ] File tmp.bct open failed
[ 2.5826 ] Error: try getting custinfo fail. Moving on
[ 2.5826 ] Rebooting to recovery mode
[ 2.5831 ] tegrarcm_v2 --instance 1-3.3 --chip 0x23 0 --ismb2
[ 2.5839 ] Rebooting to recovery mode
[ 2.5843 ] tegrarcm_v2 --instance 1-3.3 --chip 0x23 0 --reboot recovery
ERR: signing failed at 2026-03-17T16:44:10-04:00
So…
What did I do wrong here? Please help. If I have irrevocably broken this module with these fuses, I can replace it, but I need to know what I did wrong so I don’t repeat this mistake.