Hi Eugeniu, On Fri, 17 May 2019 at 08:46, Eugeniu Rosca <ero...@de.adit-jv.com> wrote: > > 'Bootloader Control Block' (BCB) is a well established term/acronym in > the Android namespace which refers to a location in a dedicated raw > (i.e. FS-unaware) flash (e.g. eMMC) partition, usually called "misc", > which is used as media for exchanging messages between Android userspace > (particularly recovery [1]) and an Android-capable bootloader. > > On higher level, this allows implementing a subset of Android Bootloader > Requirements [2], amongst which is the Android-specific bootloader > flow [3]. Regardless how the latter is implemented in U-Boot ([3] being > the most memorable example), reading/writing/dumping the BCB fields in > the development process from inside the U-Boot is a convenient feature. > Hence, make it available to the users. > > Some usage examples of the new command recorded on R-Car H3ULCB-KF > ('>>>' is an overlay on top of the original console output): > > => bcb > bcb - Load/set/clear/test/dump/store Android BCB fields > > Usage: > bcb load <dev> <part> - load BCB from mmc <dev>:<part> > bcb set <field> <val> - set BCB <field> to <val> > bcb clear [<field>] - clear BCB <field> or all fields > bcb test <field> <op> <val> - test BCB <field> against <val> > bcb dump <field> - dump BCB <field> > bcb store - store BCB back to mmc > > Legend: > <dev> - MMC device index containing the BCB partition > <part> - MMC partition index or name containing the BCB > <field> - one of {command,status,recovery,stage,reserved} > <op> - the binary operator used in 'bcb test': > '=' returns true if <val> matches the string stored in <field> > '~' returns true if <val> matches a subset of <field>'s string > <val> - string/text provided as input to bcb {set,test} > NOTE: any ':' character in <val> will be replaced by line feed > during 'bcb set' and used as separator by upper layers > > => bcb dump command > Error: BCB not loaded! > >>> Users must specify mmc device and partition before any other call > > => bcb load 1 misc > => bcb load 1 1 > >>> The two calls are equivalent (assuming "misc" has index 1) > > => bcb dump command > 00000000: 62 6f 6f 74 6f 6e 63 65 2d 73 68 65 6c 6c 00 72 bootonce-shell.r > 00000010: 79 00 72 00 00 00 00 00 00 00 00 00 00 00 00 00 y.r............. > >>> The output is in binary/string format for convenience > >>> The output size matches the size of inspected BCB field > >>> (32 bytes in case of 'command') > > => bcb test command = bootonce-shell && echo true > true > => bcb test command = bootonce-shell- && echo true > => bcb test command = bootonce-shel && echo true > >>> The '=' operator returns 'true' on perfect match > > => bcb test command ~ bootonce-shel && echo true > true > => bcb test command ~ bootonce-shell && echo true > true > >>> The '~' operator returns 'true' on substring match > > => bcb set command recovery > => bcb dump command > 00000000: 72 65 63 6f 76 65 72 79 00 73 68 65 6c 6c 00 72 recovery.shell.r > 00000010: 79 00 72 00 00 00 00 00 00 00 00 00 00 00 00 00 y.r............. > >>> The new value is NULL-terminated and stored in the BCB field > > => bcb set recovery "msg1:msg2:msg3" > => bcb dump recovery > 00000040: 6d 73 67 31 0a 6d 73 67 32 0a 6d 73 67 33 00 00 msg1.msg2.msg3.. > 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > >>> --- snip --- > >>> Every ':' is replaced by line-feed '\n' (0xA). The latter is used > >>> as separator between individual commands by Android userspace > > => bcb store > >>> Flush/store the BCB structure to MMC > > [1] https://android.googlesource.com/platform/bootable/recovery > [2] https://source.android.com/devices/bootloader > [3] https://patchwork.ozlabs.org/patch/746835/ > ("[U-Boot,5/6] Initial support for the Android Bootloader flow") > > Signed-off-by: Eugeniu Rosca <ero...@de.adit-jv.com> > --- > v2: > - [Heinrich Schuchardt] Implement sub-commands via U_BOOT_CMD_MKENT. > - Polished the code. Ensured no warnings returned by sparse, smatch, > `cppcheck --force --enable=all --inconclusive`, make W=1. > - Tested on R-Car-H3-ES20 ULCB-KF. > > v1: > - https://patchwork.ozlabs.org/patch/1080395/ > --- > cmd/Kconfig | 17 +++ > cmd/Makefile | 1 + > cmd/bcb.c | 330 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 348 insertions(+) > create mode 100644 cmd/bcb.c
Where is this documented? Perhaps it should go in README.avb2? Should it default to enabled if avb is used? Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot