lkenv

package
v2.42.5-go-mod+incompa... Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2020 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MATRIX_ROW_PARTITION = 0
	MATRIX_ROW_KERNEL    = 1
)

for accessing the Bootimg_matrix

View Source
const BOOTIMG_DEFAULT_NAME = "boot.img"

Default boot image file name to be used from kernel snap

View Source
const SNAP_BOOTIMG_PART_NUM = 2

number of available boot partitions

View Source
const SNAP_BOOTSELECT_SIGNATURE = 0x53 | 0x42<<8 | 0x73<<16 | 0x65<<24

const SNAP_BOOTSELECT_SIGNATURE ('S' | ('B' << 8) | ('s' << 16) | ('e' << 24))

View Source
const SNAP_BOOTSELECT_VERSION = 0x00010001
View Source
const SNAP_NAME_MAX_LEN = 256

Variables

This section is empty.

Functions

This section is empty.

Types

type Env

type Env struct {
	// contains filtered or unexported fields
}

Env contains the data of the uboot environment path can be file or partition device node

func NewEnv

func NewEnv(path string) *Env

func (*Env) ConfigureBootPartitions

func (l *Env) ConfigureBootPartitions(boot_1, boot_2 string)

ConfigureBootPartitions set boot partitions label names this function should not be used at run time! it should be used only at image build time, if partition labels are not pre-filled by gadget built

func (*Env) ConfigureBootimgName

func (l *Env) ConfigureBootimgName(bootimgName string)

ConfigureBootimgName set boot image file name boot image file name is used at kernel extraction time this function should not be used at run time! it should be used only at image build time if default boot.img is not set by gadget built

func (*Env) FindFreeBootPartition

func (l *Env) FindFreeBootPartition(kernel string) (string, error)

FindFreeBootPartition find free boot partition to be used for new kernel revision

  • consider kernel snap blob name, if kernel name matches already installed revision, return coresponding partition name
  • protect partition used by kernel_snap, consider other as free
  • consider only boot partitions with defined partition name

func (*Env) FreeBootPartition

func (l *Env) FreeBootPartition(kernel string) (bool, error)

FreeBootPartition free passed kernel revision from any boot partition ignore if there is no boot partition with given kernel revision

func (*Env) Get

func (l *Env) Get(key string) string

func (*Env) GetBootImageName

func (l *Env) GetBootImageName() string

GetBootImageName return expected boot image file name in kernel snap

func (*Env) GetBootPartition

func (l *Env) GetBootPartition(kernel string) (string, error)

func (*Env) Load

func (l *Env) Load() error

func (*Env) LoadEnv

func (l *Env) LoadEnv(path string) error

func (*Env) Save

func (l *Env) Save() error

func (*Env) SaveEnv

func (l *Env) SaveEnv(path string, buf *bytes.Buffer) error

func (*Env) Set

func (l *Env) Set(key, value string)

func (*Env) SetBootPartition

func (l *Env) SetBootPartition(bootpart, kernel string) error

SetBootPartition set kernel revision name to passed boot partition

type SnapBootSelect_v1

type SnapBootSelect_v1 struct {
	/* Contains value BOOTSELECT_SIGNATURE defined above */
	Signature uint32
	/* snappy boot select version */
	Version uint32

	/* snap_mode, one of: 'empty', "try", "trying" */
	Snap_mode [SNAP_NAME_MAX_LEN]byte
	/* current core snap revision */
	Snap_core [SNAP_NAME_MAX_LEN]byte
	/* try core snap revision */
	Snap_try_core [SNAP_NAME_MAX_LEN]byte
	/* current kernel snap revision */
	Snap_kernel [SNAP_NAME_MAX_LEN]byte
	/* current kernel snap revision */
	Snap_try_kernel [SNAP_NAME_MAX_LEN]byte

	/* gadget_mode, one of: 'empty', "try", "trying" */
	Gadget_mode [SNAP_NAME_MAX_LEN]byte
	/* GADGET assets: current gadget assets revision */
	Snap_gadget [SNAP_NAME_MAX_LEN]byte
	/* GADGET assets: try gadget assets revision */
	Snap_try_gadget [SNAP_NAME_MAX_LEN]byte

	/**
	 * Reboot reason
	 * optional parameter to signal bootloader alternative reboot reasons
	 * e.g. recovery/factory-reset/boot asset update
	 */
	Reboot_reason [SNAP_NAME_MAX_LEN]byte

	/**
	 * Matrix for mapping of boot img partion to installed kernel snap revision
	 *
	 * First column represents boot image partition label (e.g. boot_a,boot_b )
	 *   value are static and should be populated at gadget built time
	 *   or latest at image build time. Values are not further altered at run time.
	 * Second column represents name currently installed kernel snap
	 *   e.g. pi2-kernel_123.snap
	 * initial value representing initial kernel snap revision
	 *   is pupulated at image build time by snapd
	 *
	 * There are two rows in the matrix, representing current and previous kernel revision
	 * following describes how this matrix should be modified at different stages:
	 *  - at image build time:
	 *    - extracted kernel snap revision name should be filled
	 *      into free slow (first row, second row)
	 *  - snapd:
	 *    - when new kernel snap revision is being installed, snapd cycles through
	 *      matrix to find unused 'boot slot' to be used for new kernel snap revision
	 *      from free slot, first column represents partition label to which kernel
	 *      snap boot image should be extracted. Second column is then populated with
	 *      kernel snap revision name.
	 *    - snap_mode, snap_try_kernel, snap_try_core behaves same way as with u-boot
	 *  - bootloader:
	 *    - bootloader reads snap_mode to determine if snap_kernel or snap_kernel is used
	 *      to get kernel snap revision name
	 *      kernel snap revision is then used to search matrix to determine
	 *      partition label to be used for current boot
	 *    - bootloader NEVER alters this matrix values
	 *
	 * [ <bootimg 1 part label> ] [ <kernel snap revision installed in this boot partition> ]
	 * [ <bootimg 2 part label> ] [ <kernel snap revision installed in this boot partition> ]
	 */
	Bootimg_matrix [SNAP_BOOTIMG_PART_NUM][2][SNAP_NAME_MAX_LEN]byte

	/**
	 * name of the boot image from kernel snap to be used for extraction
	 * when not defined or empty, default boot.img will be used
	 */
	Bootimg_file_name [SNAP_NAME_MAX_LEN]byte

	/**
	 * gadget assets: Matrix for mapping of gadget asset partions
	 * Optional boot asset tracking, based on bootloader support
	 * Some boot chains support A/B boot assets for increased robustness
	 * example being A/B TrustExecutionEnvironment
	 * This matrix can be used to track current and try boot assets for
	 * robust updates
	 * Use of Gadget_asset_matrix matches use of Bootimg_matrix
	 *
	 * [ <boot assets 1 part label> ] [ <currently installed assets revision in this partition> ]
	 * [ <boot assets 2 part label> ] [ <currently installed assets revision in this partition> ]
	 */
	Gadget_asset_matrix [SNAP_BOOTIMG_PART_NUM][2][SNAP_NAME_MAX_LEN]byte

	/* unused placeholders for additional parameters in the future */
	Unused_key_01 [SNAP_NAME_MAX_LEN]byte
	Unused_key_02 [SNAP_NAME_MAX_LEN]byte
	Unused_key_03 [SNAP_NAME_MAX_LEN]byte
	Unused_key_04 [SNAP_NAME_MAX_LEN]byte
	Unused_key_05 [SNAP_NAME_MAX_LEN]byte
	Unused_key_06 [SNAP_NAME_MAX_LEN]byte
	Unused_key_07 [SNAP_NAME_MAX_LEN]byte
	Unused_key_08 [SNAP_NAME_MAX_LEN]byte
	Unused_key_09 [SNAP_NAME_MAX_LEN]byte
	Unused_key_10 [SNAP_NAME_MAX_LEN]byte
	Unused_key_11 [SNAP_NAME_MAX_LEN]byte
	Unused_key_12 [SNAP_NAME_MAX_LEN]byte
	Unused_key_13 [SNAP_NAME_MAX_LEN]byte
	Unused_key_14 [SNAP_NAME_MAX_LEN]byte
	Unused_key_15 [SNAP_NAME_MAX_LEN]byte
	Unused_key_16 [SNAP_NAME_MAX_LEN]byte
	Unused_key_17 [SNAP_NAME_MAX_LEN]byte
	Unused_key_18 [SNAP_NAME_MAX_LEN]byte
	Unused_key_19 [SNAP_NAME_MAX_LEN]byte
	Unused_key_20 [SNAP_NAME_MAX_LEN]byte

	/* unused array of 10 key value pairs */
	Kye_value_pairs [10][2][SNAP_NAME_MAX_LEN]byte

	/* crc32 value for structure */
	Crc32 uint32
}

*

  • Following structure has to be kept in sync with c structure defined by

  • include/snappy-boot_v1.h

  • c headerfile is used by bootloader, this ensures sync of the environment

  • between snapd and bootloader

  • when this structure needs to be updated,

  • new version should be introduced instead together with c header file,

  • which is to be adopted by bootloader *

  • !!! Support for old version has to be maintained, as it is not guaranteed

  • all existing bootloader would adopt new version!

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL