Setting bootable and unbootable AB rootFS slots for L4T r35.1

Hello,
regarding L4T 35.1.0 nvbootctrl mark as bootable - #12 by JerryChang

the issues of the linked post… (I need to mark my AB rootfs slots as bootable or unbootable on a L4T r35.1 for Nvidia Jetson AGX)

  • First of all, how is it looking the release of that functionality? I really need to use it asap, but if it is coming lets say this month, may be it does not worth the effort of implementing it manually.

  • If not, I am wondering from the following miniscript example:

# cd /sys/firmware/efi/efivars/
# printf "\x07\x00\x00\x00" > /tmp/var_tmp.bin
# printf "\x3c\xc0\x01\x00" >> /tmp/var_tmp.bin
# chattr -i RootfsInfo-781e084c-a330-417c-b678-38e696380cb9
# dd if=/tmp/var_tmp.bin of=RootfsInfo-781e084c-a330-417c-b678-38e696380cb9; sync
# chattr +i RootfsInfo-781e084c-a330-417c-b678-38e696380cb9
# reboot

1 - Is that working for slot A or for the current slot?
2 - Is there some other file to do the opposite? (set as unbootable)

These both questions would help me to manage it pretty quickly.

Thanks in advance,
Alvaro.

hello alvaro.gimenez.s,

I don’t have solid release date, but it’s around mid-Jan/2023 for next JetPack public release.
it’ll be able to create separated UEFI variables for rootfs A/B status, so user may rest them in UEFI menu.

Hi Jerry,
thanks for the answer. It looks promising, that should be this or next week.

  • Will it support also these variables for nvbootctrl script? I actually need them there. I am implementing the update system with rauc and i have everything else already configured (in fact, with cboot was working my workaround).
    So, more concrete: Are the functions is-slot-marked-successful, mark-boot-successful and set-slot-as-unbootable in the tool nvbootctrl implemented and working in the next JetPack public release?

  • May be I try anyway with your example script workaround anyway, if you could answer me the other 2 questions,
    1- Is that working for slot A or for the current slot?
    2 - Is there some other file to do the opposite? (set as unbootable)

Thank you in advance,
Alvaro.

hello alvaro.gimenez.s,

that’s register settings to update the slot-A status to normal.
as you can see, it writes the register values to var_tmp.bin and update RootfsInfo property directly.

may I know what’s your actual use-case, could you please wait for next Jetpack release?

Hi Jerry,
we are actually adapting an OS for Nvidia Jetson AGX using YOCTO OE4T and we need AB partitioning and update. Until now we were using a version with the previous Kernel and Jetpack versions, but we actually need functionality from the latest Jetpack.

The project cant be blocked on this for too long, but I guess is the better option.

Specifically, we need nvbootctrl full functionality for this. Will that be included in the upcoming release? From the release notes it looks so, but I would like to be sure.

Thanks in advance,
Alvaro.

hello alvaro.gimenez.s,

we should have next Jetpack release soon, why don’t you wait for it and give it a try.

Hello Jerry,
yes, I am in that status right now, waiting for the new Jetpack release. I just wanted to be sure that the fixes we need will be included.
If the UEFI implementation and the nv tools will support AB partitioning again, then it should be all fine as long as it does not get too delayed.
Regards,
Alvaro.

hello alvaro.gimenez.s,

okay, please wait for public release to confirm the use-case. you may reply this, or initial a new discussion thread to grant supports.

Hi Jerry,
any news about when the Jetpack will be released? January is coming to an end and we have somehow the development stopped.

Regards,
Alvaro.

hello alvaro.gimenez.s,

as you can see, JetPack 5.1 is available now.

Hi Jerry,
I have been working on adapting my yocto recipes to install the newest version of the tools, all from l4t-r35.2.1.
I see some things have changed but actually i have some issues:

  • Are the tools nvbootctl and nv_update_engine still supported? More detailed:
    → Why is ‘nv_update_engine -e’ not an option anymore and how can I enable a_b for rootfs?
    → Is ‘nvbootctrl set-SR-BR SLOT’ the substitute for ‘nvbootctrl set-active-boot-slot SLOT’?
    → Why was ‘nvbootctrl is-slot-marked-successful’ removed and how can I get the slot information now?
    → Also ‘nvbootctrl mark-boot-successful/set-slot-as-unbootable’ was removed. How can this be set now?
    → The command ‘nvbootctrl is-rootfs-ab-enabled’ still fails with ‘is-rootfs-ab-enabled is not implemented.’.
    → nvbootctl verify is also giving contradictory response:
    $ nvbootctrl verify
    Info: variable BootChainFwStatus is not found.
    $ nvbootctrl -t rootfs verify
    verify bootloader is not implemented.

Am I using the wrong tools?

From old documentation (I dont find the one for 35.2.1), I get that most of this information can be written into the Boodloader Scratch register. Is there an alternative tool to write there? Or how can I access there?

Is it really AB partitioning for rootfs already supported with UEFI?

Best regards,
Alvaro.

hello alvaro.gimenez.s,

Update Engine is not supported for r35.2.1, you may use UEFI Capsule Update for l4t-r35.2.1 release.
the UEFI Capsule update only can update one slot at a time, and its not support runtime Capsule update currently.

moreover, here’s r35.2 developer guide, Generating the Capsule Update Payload.

Thanks Jerry,
I will try that way then…
Regards,
Alvaro.

Hi again,
after reading the documentation for UEFI Capsule Update… I find only documentation for Bootloader update.

As a first simple step, I need to know how to enable AB Rootfs . Before it was possible with nv_update_engine.

Is that still possible?

Thanks in advance.

hello alvaro.gimenez.s,

please refer to developer guide. Flashing the Target Board with a Redundant Root File Systems.
you should re-flash the target with rootfs_ab flash configuration file to enable that.

looking forward to your test results.
thanks

Hi Jerry,
ok that works on the first flashing and it can not be changed, but I can live with that.

  • How can I set the active boot slot for the rootfs? Is the command $ sudo nvbootctrl -t rootfs set-active-boot-slot <slot> working as described in the documentation for r35.2.1?
  • How can I set or read if a slot is marked as successful or unbootable?

These information would be all what I am missing for my system. Sorry for my persistence but I can not find it in the documentation.

Regards and thanks in advance,
Alvaro.

hello alvaro.gimenez.s,

you may use nvbootctrl to change the rootfs active slots.
for example, switch rootfs to slot-B, $ nvbootctrl -t rootfs set-active-boot-slot 1
you should execute $ sudo reboot to reset the board and let the changes take effect in the next boot-up cycle.

besides,
here’s command to dump the rootfs slot information for checking,
for example, $ nvbootctrl -t rootfs dump-slots-info

Hi JerryChang,
thanks again. This works once I flashed properly.

I am just missing how could I mark-successful or unsuccessful a slot with nvbootctrl. In the past this was an option on the script, if I dont remember it wrong. I can see that now is called “normal, unbootable” but I dont know how to set them explicitly.

Regards,
Alvaro.

1 Like

Hello Nvidia Team,

  1. I was searching for the is-slot-bootable and mark-boot-successful nvbootctrl-commands in the new Jetpack 5.1.0 (r35.2.1), but unfortunately I couldn’t find them. Aren’t they implemented yet or there won’t be support for these two nvbootctrl-commands in the future? If they will be implemented in the future, which Jetpack version should support them?

  2. My second question is when I tried to test the Fail-over Rootfs Slot Switching. I destroyed the second backup rootfs partition (rootfs.B) and tried to boot from it, where it should fail over to the bootable unused rootfs slot, but unfortunately that didn’t happen. The board doesn’t fallback to rootfs.A (which is working normally) it stucks while booting and restarts! Is the Fail-over Rootfs Slot Switching supported for the newest Jetpack 5.1.0 and if yes how can I test it?

Thanks and best Regards,
Max

2 Likes

hi all,

had you flash the target by adding ROOTFS_AB=1 to enable RootFS A/B?
for example, $ sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./flash.sh jetson-agx-orin-devkit mmcblk0p1

we’ve tested locally on JetPack-5.1/ l4t-r35.2.1 / AGX Orin.
it’s able to use nvbootctrl to switch rootfs slots.