I am having difficulty getting bootloader updates on my target working. I am trying to follow the directions in the L4T_28.2 documentation on Bootloader Update / Redundancy but it isn’t working and I need some guidance on debugging. Here are the steps that I took:
- I updated the slot_metadata.bin by:
- Editing smd_info.cfg so that it was:
# SMD metadata information
< VERSION 3 >
#
# Config 2: Enable redundancy support (by removing comments ##)
#
< REDUNDANCY_USER 1 >
# slot info order is important!
# <priority> <suffix> <retry_count> <boot_successful>
15 _a 7 1
14 _b 7 1
- sudo ./build_l4t_bup.sh jetson-tx2 mmcblk0p1 (Note I tried the documented methods to do this without a board connected, but it didn't seem to work for me)
- Used scp to copy the resulting bl_update_payload to /opt/ota_package on my Tx2 based system
- Ran nv_update_engine (and saw failure "GetEntryTable failed"):
$ sudo nv_update_engine --install
Tegra User Block Device: /dev/disk/by-partlabel
Tegra Boot Block Device: /dev/mmcblk0boot0
HEADER: MAGIC NVIDIA__BLOB__V2
HEX_VALUE 131072
BLOB_SIZE 4968688
HEADER_SIZE 48
NUMBER_OF_ELEMENTS 16
HEADER_TYPE 0
UNCOMP_SIZE 4968688
MB1_RATCHET_LV 0
MTS_RATCHET_LV 0
ROLLBACK_FUSE_LV 0
Device TN Spec: P2771-0000-C04-devkit.default
Device is fused board.
ENTRY_TABLE:
PART POS LEN VER TNSPEC TYPE UPDATABLE
bpmp-fw 1968 529440 2 1 1
sce-fw 531408 76992 2 1 1
cpu-bootloader 608400 276384 2 1 1
mb2 884784 100960 2 0 1
spe-fw 985744 81936 2 0 1
secure-os 1067680 62976 2 1 1
kernel 1130656 508304 2 1 1
mb1 1638960 94736 2 2 1
mts-bootpack 1733696 2076832 2 1 1
mts-preboot 3810528 63024 2 0 1
sc7 3873552 21552 2 1 1
BCT 3895104 3584 2 3310-B02-fuselevel_production 2 0
MB1_BCT 3898688 50016 2 3310-B02-fuselevel_production 0 0
bpmp-fw-dtb 3948704 466160 2 3310-B02-fuselevel_production 1 0
bootloader-dtb 4414864 276912 2 3310-B02-fuselevel_production 1 0
kernel-dtb 4691776 276912 2 3310-B02-fuselevel_production 1 0
Writing 529440 bytes to /dev/disk/by-partlabel/bpmp-fw_b for bpmp-fw
Writing 76992 bytes to /dev/disk/by-partlabel/sce-fw_b for sce-fw
Writing 276384 bytes to /dev/disk/by-partlabel/cpu-bootloader_b for cpu-bootloader
mb2 write: slot = 1 offset = 1212416 bytes = 100960
spe-fw write: slot = 1 offset = 819200 bytes = 81936
Writing 62976 bytes to /dev/disk/by-partlabel/secure-os_b for secure-os
Writing 508304 bytes to /dev/disk/by-partlabel/kernel_b for kernel
Writing 2076832 bytes to /dev/disk/by-partlabel/mts-bootpack_b for mts-bootpack
mts-preboot write: slot = 1 offset = 1736704 bytes = 63024
Writing 21552 bytes to /dev/disk/by-partlabel/sc7_b for sc7
GetEntryTable failed
Fail to write Dependence partitions
Writing to partitions failed.
OTA Blob update failed. Status: 3
Nvidia A/B-Redundancy Update tool Version 1.1
current slot 0
Start updating slot 1
Slot 1 update failed
$ sudo nvbootctrl dump-slots-info
magic:0x43424e00, version: 3 features: 3 num_slots: 2
slot: 0, priority: 15, suffix: _a, retry_count: 7, boot_successful: 1
slot: 1, priority: 0, suffix: _b, retry_count: 0, boot_successful: 0
$ sudo bash -c 'nvbootctrl is-slot-bootable 1; if [ $? = 0 ]; then echo yes; else echo no; fi'
no
$ sudo bash -c 'nvbootctrl is-slot-bootable 0; if [ $? = 0 ]; then echo yes; else echo no; fi'
yes
$ sudo nvbootctrl get-number-slots
2
$ sudo nvbootctrl get-current-slot
0
What else can I do to debug this? Can anyone give me guidance on getting this working? It looks like a lot of the update was successful, but failed midway through. I have a bunch of our products that I would love to update without having to go into recovery mode, and I would love to support this in our production software as well.
Thanks,
-David