Versioning¶
SBL implements a simple versioning structure with many features:
- Image identification (e.g. supported platforms)
- Core major and minor revision (See Semantic Versioning)
- Project major and minor revision
- Traceability to release process and build environment (e.g. git SHA1, dirty bit, build number)
- Security version (SVN) to provide Anti-Rollback protection during firmware update
Version Information data structure (BootlLoaderVersionGuid.h
):
typedef struct {
UINT16 BuildNumber; /* A hour-granularity time stamp */
UINT8 ProjMinorVersion; /* Project or platform major version */
UINT8 ProjMajorVersion; /* Project or platform minor version */
UINT8 CoreMinorVersion; /* Core code major version */
UINT8 CoreMajorVersion; /* Core code minor version */
UINT8 SecureVerNum; /* Security version number (SVN) */
UINT8 Reserved : 5;
UINT8 BldDebug : 1; /* Bootloader debug build if 1 */
UINT8 FspDebug : 1; /* FSP debug build if 1 */
UINT8 Dirty : 1; /* Dirty flag from git */
} IMAGE_BUILD_INFO;
typedef struct {
UINT32 Signature; /* '$SBH' */
UINT16 HeaderLength;
UINT8 HeaderRevision;
UINT8 Reserved;
UINT64 ImageId; /* Unique ASCII string per platform */
IMAGE_BUILD_INFO ImageVersion;
UINT64 SourceVersion; /* First 8 bytes of git SHA1 */
} BOOT_LOADER_VERSION;
Image build data IMAGE_BUILD_INFO
can be configured in board configuration file BoardConfig.py
. One can specify BUILD_NUMBER
in environment variables to provide references in an automated build and release setup (e.g. Jenkins)
During build process, version data is generated and embedded in SBL image with signature $SBH
.
During boot, SBL passes version data to OS via HOB data list with GUID gBootLoaderVersionGuid
and also prints it to the serial console. For example:
SBID: SB_APLI
ISVN: 001
IVER: 000.005.001.000.02490
SVER: 77F65EAF257FD5DE-dirty
FDBG: BLD(D) FSP(R)
FSPV: ID($APLFSP$) REV(01040301)
For build reproducibility required by certain strict development process, one can provide a hard-coded version information in a file during the build process. See Build Tool for more details.